ultimate-pi 0.19.1 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/harness-decisions/SKILL.md +68 -2
- package/.agents/skills/harness-git-commit/SKILL.md +72 -0
- package/.agents/skills/harness-governor/SKILL.md +2 -2
- package/.agents/skills/harness-ls-lint-setup/SKILL.md +59 -0
- package/.agents/skills/harness-plan/SKILL.md +13 -11
- package/.agents/skills/harness-review/SKILL.md +1 -1
- package/.agents/skills/harness-sentrux-repair/SKILL.md +48 -0
- package/.agents/skills/sentrux/SKILL.md +4 -2
- package/.agents/skills/wiki-save/SKILL.md +1 -1
- package/.pi/PACKAGING.md +6 -0
- package/.pi/SYSTEM.md +21 -3
- package/.pi/agents/harness/ls-lint-steward.md +49 -0
- package/.pi/agents/harness/planning/decompose.md +4 -4
- package/.pi/agents/harness/reviewing/evaluator.md +1 -1
- package/.pi/agents/harness/running/executor.md +43 -2
- package/.pi/agents/harness/sentrux-repair-advisor.md +50 -0
- package/.pi/agents/pi-pi/prompt-expert.md +17 -2
- package/.pi/auto-commit.json +9 -2
- package/.pi/extensions/debate-orchestrator.ts +3 -0
- package/.pi/extensions/harness-anchored-edit.ts +139 -0
- package/.pi/extensions/harness-ask-user.ts +13 -34
- package/.pi/extensions/harness-debate-tools.ts +43 -4
- package/.pi/extensions/harness-live-widget.ts +28 -19
- package/.pi/extensions/harness-run-context.ts +278 -115
- package/.pi/extensions/harness-web-tools.ts +598 -471
- package/.pi/extensions/ls-lint-rules-sync.ts +103 -0
- package/.pi/extensions/observation-bus.ts +4 -0
- package/.pi/extensions/policy-gate.ts +270 -229
- package/.pi/extensions/sentrux-rules-sync.ts +2 -0
- package/.pi/extensions/soundboard.ts +48 -48
- package/.pi/harness/README.md +4 -0
- package/.pi/harness/agents.manifest.json +15 -7
- package/.pi/harness/agents.policy.yaml +47 -81
- package/.pi/harness/docs/adrs/0051-hash-anchored-executor-edits.md +41 -0
- package/.pi/harness/docs/adrs/0052-ls-lint-naming-lifecycle.md +45 -0
- package/.pi/harness/docs/adrs/0052-sentrux-structured-repair.md +38 -0
- package/.pi/harness/docs/adrs/0053-plan-task-clarification-gate.md +39 -0
- package/.pi/harness/docs/adrs/0054-harness-native-ask-user.md +40 -0
- package/.pi/harness/docs/adrs/0055-auto-commit-coauthor-lifecycle.md +40 -0
- package/.pi/harness/docs/adrs/README.md +7 -0
- package/.pi/harness/docs/practice-map.md +21 -5
- package/.pi/harness/evals/smoke/ls-lint-stub.json +10 -0
- package/.pi/harness/evolution/self-healing-rules.json +16 -0
- package/.pi/harness/ls-lint/naming.manifest.json +128 -0
- package/.pi/harness/sentrux/architecture.manifest.json +1 -1
- package/.pi/harness/specs/auto-commit.schema.json +63 -0
- package/.pi/harness/specs/ls-lint-manifest-proposal.schema.json +80 -0
- package/.pi/harness/specs/ls-lint-signal.schema.json +47 -0
- package/.pi/harness/specs/naming-manifest.schema.json +54 -0
- package/.pi/harness/specs/plan-task-clarification.schema.json +88 -0
- package/.pi/harness/specs/sentrux-diagnostics.schema.json +173 -0
- package/.pi/harness/specs/sentrux-repair-plan.schema.json +133 -0
- package/.pi/harness/specs/sentrux-report.schema.json +119 -0
- package/.pi/harness/specs/sentrux-signal.schema.json +34 -1
- package/.pi/lib/agents-policy.d.mts +26 -47
- package/.pi/lib/agents-policy.mjs +84 -29
- package/.pi/lib/agents-policy.ts +1 -0
- package/.pi/lib/agt/build-evaluation-context.ts +136 -64
- package/.pi/lib/ask-user/constants.mjs +3 -0
- package/.pi/lib/ask-user/constants.ts +4 -0
- package/.pi/lib/ask-user/contracts/glimpse-parse.ts +56 -0
- package/.pi/lib/ask-user/contracts/glimpse-payload-build.ts +58 -0
- package/.pi/lib/ask-user/contracts/glimpse-payload.ts +38 -0
- package/.pi/lib/ask-user/core/questionnaire.ts +74 -0
- package/.pi/lib/ask-user/dialog.ts +2 -314
- package/.pi/lib/ask-user/fallback.ts +2 -78
- package/.pi/lib/ask-user/format.ts +85 -0
- package/.pi/lib/ask-user/glimpseui.d.ts +10 -0
- package/.pi/lib/ask-user/index.ts +114 -0
- package/.pi/lib/ask-user/merge-task-clarification.ts +98 -0
- package/.pi/lib/ask-user/policy.mjs +43 -0
- package/.pi/lib/ask-user/policy.ts +104 -0
- package/.pi/lib/ask-user/presenters/glimpse.ts +130 -0
- package/.pi/lib/ask-user/presenters/headless.ts +131 -0
- package/.pi/lib/ask-user/presenters/select.ts +60 -0
- package/.pi/lib/ask-user/presenters/tui.ts +373 -0
- package/.pi/lib/ask-user/presenters/types.ts +13 -0
- package/.pi/lib/ask-user/render.ts +40 -9
- package/.pi/lib/ask-user/schema.ts +66 -13
- package/.pi/lib/ask-user/types.ts +60 -3
- package/.pi/lib/ask-user/validate-core.mjs +193 -7
- package/.pi/lib/ask-user/validate.ts +53 -34
- package/.pi/lib/harness-anchored-edit/.hash_anchors +1721 -0
- package/.pi/lib/harness-anchored-edit/anchor-state.ts +320 -0
- package/.pi/lib/harness-anchored-edit/apply-anchored-edits.ts +161 -0
- package/.pi/lib/harness-anchored-edit/edit-executor.ts +146 -0
- package/.pi/lib/harness-anchored-edit/index.ts +9 -0
- package/.pi/lib/harness-anchored-edit/line-protocol.ts +38 -0
- package/.pi/lib/harness-anchored-edit/package.json +3 -0
- package/.pi/lib/harness-anchored-edit/settings.ts +1 -0
- package/.pi/lib/harness-anchored-edit/task-id.ts +8 -0
- package/.pi/lib/harness-anchored-edit/types.ts +19 -0
- package/.pi/lib/harness-artifact-gate.ts +75 -21
- package/.pi/lib/harness-auto-commit-config.mjs +321 -0
- package/.pi/lib/harness-lens/clients/anchored-edit-autopatch.ts +158 -0
- package/.pi/lib/harness-lens/clients/lsp/client.ts +62 -39
- package/.pi/lib/harness-lens/clients/tool-policy.ts +73 -181
- package/.pi/lib/harness-lens/index.ts +246 -96
- package/.pi/lib/harness-lens/tools/lsp-navigation.ts +10 -8
- package/.pi/lib/harness-repair-brief.ts +84 -25
- package/.pi/lib/harness-run-context.ts +42 -52
- package/.pi/lib/harness-sentrux-parse.mjs +272 -0
- package/.pi/lib/harness-sentrux-root.mjs +78 -0
- package/.pi/lib/harness-slash-completions.ts +116 -0
- package/.pi/lib/harness-spawn-topology.ts +121 -87
- package/.pi/lib/harness-subagent-submit-registry.ts +10 -0
- package/.pi/lib/harness-subagents-bridge.ts +11 -6
- package/.pi/lib/harness-ui-state.ts +95 -48
- package/.pi/lib/plan-approval/dialog.ts +5 -0
- package/.pi/lib/plan-approval/validate.ts +1 -1
- package/.pi/lib/plan-approval-readiness.ts +32 -0
- package/.pi/lib/plan-debate-gate.ts +154 -114
- package/.pi/lib/plan-task-clarification.ts +158 -0
- package/.pi/prompts/harness-auto.md +2 -2
- package/.pi/prompts/harness-ls-lint-steward.md +43 -0
- package/.pi/prompts/harness-plan.md +58 -8
- package/.pi/prompts/harness-review.md +40 -6
- package/.pi/prompts/harness-run.md +33 -11
- package/.pi/prompts/harness-setup.md +72 -3
- package/.pi/prompts/harness-steer.md +3 -2
- package/.pi/prompts/wiki-save.md +5 -4
- package/.pi/scripts/README.md +8 -0
- package/.pi/scripts/generate-agents-policy-yaml.mjs +14 -2
- package/.pi/scripts/harness-anchored-edit-smoke.mjs +45 -0
- package/.pi/scripts/harness-auto-commit-bootstrap.mjs +96 -0
- package/.pi/scripts/harness-cli-verify.sh +47 -0
- package/.pi/scripts/harness-git-churn.mjs +77 -0
- package/.pi/scripts/harness-git-commit.mjs +173 -0
- package/.pi/scripts/harness-ls-lint-bootstrap.mjs +142 -0
- package/.pi/scripts/harness-ls-lint-cli.mjs +184 -0
- package/.pi/scripts/harness-seed-project-contracts.mjs +47 -0
- package/.pi/scripts/harness-sentrux-diagnostics.mjs +230 -0
- package/.pi/scripts/harness-sentrux-report.mjs +256 -0
- package/.pi/scripts/harness-verify.mjs +347 -117
- package/.pi/scripts/ls-lint-rules-sync.mjs +265 -0
- package/.pi/scripts/run-tests.mjs +65 -0
- package/.pi/settings.example.json +1 -0
- package/.sentrux/rules.toml +1 -1
- package/AGENTS.md +1 -0
- package/CHANGELOG.md +31 -0
- package/README.md +13 -4
- package/THIRD_PARTY_NOTICES.md +7 -0
- package/package.json +8 -3
- package/vendor/pi-subagents/src/agents.ts +5 -0
- package/vendor/pi-subagents/src/subagents.ts +22 -3
- package/vendor/pi-vcc/src/hooks/before-compact.ts +86 -60
- package/.pi/scripts/release.sh +0 -338
package/.pi/harness/README.md
CHANGED
|
@@ -11,6 +11,7 @@ Phase 1–2 scaffold for the Pi harness runtime surfaces.
|
|
|
11
11
|
- `evolution/` - self-healing rules and chaos drills (JSONL-first).
|
|
12
12
|
- `corpus/` - ingest notes for graphify/raw sources.
|
|
13
13
|
- `sentrux/` - `architecture.manifest.json` source for `.sentrux/rules.toml` ([ADR 0009](docs/adrs/0009-sentrux-rules-lifecycle.md)).
|
|
14
|
+
- `ls-lint/` - `naming.manifest.json` source for `.ls-lint.yml` ([ADR 0052](docs/adrs/0052-ls-lint-naming-lifecycle.md)).
|
|
14
15
|
|
|
15
16
|
This scaffold is intentionally minimal and safe to adopt incrementally.
|
|
16
17
|
|
|
@@ -21,6 +22,8 @@ UP_PKG="$(node -p "require('path').dirname(require.resolve('ultimate-pi/package.
|
|
|
21
22
|
node "$UP_PKG/.pi/scripts/harness-verify.mjs"
|
|
22
23
|
node "$UP_PKG/.pi/scripts/harness-sentrux-bootstrap.mjs" # idempotent bootstrap (/harness-setup)
|
|
23
24
|
node "$UP_PKG/.pi/scripts/harness-sentrux-bootstrap.mjs" --force # after editing sentrux/architecture.manifest.json
|
|
25
|
+
node "$UP_PKG/.pi/scripts/harness-ls-lint-bootstrap.mjs" # idempotent naming bootstrap
|
|
26
|
+
node "$UP_PKG/.pi/scripts/harness-ls-lint-bootstrap.mjs" --force # after editing ls-lint/naming.manifest.json
|
|
24
27
|
```
|
|
25
28
|
|
|
26
29
|
## Governance Extensions
|
|
@@ -42,6 +45,7 @@ manifest (`package.json`).
|
|
|
42
45
|
- `observation-bus.ts` - normalized HarnessObservation envelopes
|
|
43
46
|
- `drift-monitor.ts` - interactive replan/proceed on high plan drift
|
|
44
47
|
- `sentrux-rules-sync.ts` - sync `.sentrux/rules.toml` from `sentrux/architecture.manifest.json`
|
|
48
|
+
- `ls-lint-rules-sync.ts` - sync `.ls-lint.yml` from `ls-lint/naming.manifest.json`
|
|
45
49
|
- `review-integrity.ts` - executor/reviewer session-isolation enforcement
|
|
46
50
|
- `test-diff-integrity.ts` - suspicious test-diff detection + adversary escalation
|
|
47
51
|
- `debate-orchestrator.ts` - headless debate bus + consensus packet emission
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema_version": "1.0.0",
|
|
3
3
|
"package": "ultimate-pi",
|
|
4
|
-
"package_version": "0.
|
|
5
|
-
"generated_at": "2026-05-
|
|
6
|
-
"policy_sha256": "
|
|
4
|
+
"package_version": "0.21.0",
|
|
5
|
+
"generated_at": "2026-05-27T07:05:16.312Z",
|
|
6
|
+
"policy_sha256": "799782453e74a1d2d15a28715c985c1b5dc4566701ddcce475ec4725294437e4",
|
|
7
7
|
"agents": {
|
|
8
8
|
"pi-pi/agent-expert": {
|
|
9
9
|
"path": ".pi/agents/pi-pi/agent-expert.md",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
},
|
|
32
32
|
"pi-pi/prompt-expert": {
|
|
33
33
|
"path": ".pi/agents/pi-pi/prompt-expert.md",
|
|
34
|
-
"sha256": "
|
|
34
|
+
"sha256": "043856946673ea7e655e31d71b544e1eac43705839669a3fd223dc16da12a71e"
|
|
35
35
|
},
|
|
36
36
|
"pi-pi/skill-expert": {
|
|
37
37
|
"path": ".pi/agents/pi-pi/skill-expert.md",
|
|
@@ -49,10 +49,18 @@
|
|
|
49
49
|
"path": ".pi/agents/harness/incident-recorder.md",
|
|
50
50
|
"sha256": "4efbdb9482b1038e2bd08cae9898aed9ef983903107ddab6c84d51436d5d3296"
|
|
51
51
|
},
|
|
52
|
+
"harness/ls-lint-steward": {
|
|
53
|
+
"path": ".pi/agents/harness/ls-lint-steward.md",
|
|
54
|
+
"sha256": "e35bf59adf2785e7369a7428793a26691cea43d630e02a9541398cb5a5b1f5dc"
|
|
55
|
+
},
|
|
52
56
|
"harness/sentrux-bootstrap": {
|
|
53
57
|
"path": ".pi/agents/harness/sentrux-bootstrap.md",
|
|
54
58
|
"sha256": "6132e83b400b6bc381841a09205eda00a2349ec127368f9d164631d73faadd1a"
|
|
55
59
|
},
|
|
60
|
+
"harness/sentrux-repair-advisor": {
|
|
61
|
+
"path": ".pi/agents/harness/sentrux-repair-advisor.md",
|
|
62
|
+
"sha256": "057618de561d90e597be7a319f3abfa2adaa128d4e92850c50b3e35a447f0371"
|
|
63
|
+
},
|
|
56
64
|
"harness/sentrux-steward": {
|
|
57
65
|
"path": ".pi/agents/harness/sentrux-steward.md",
|
|
58
66
|
"sha256": "d806cbf2c2e211c6b4c95e35893bc250c8a0fab6fae92190766eab16cd091d51"
|
|
@@ -87,7 +95,7 @@
|
|
|
87
95
|
},
|
|
88
96
|
"harness/running/executor": {
|
|
89
97
|
"path": ".pi/agents/harness/running/executor.md",
|
|
90
|
-
"sha256": "
|
|
98
|
+
"sha256": "0b602c27f8842af3b1bc702623649de8ba775e77fe59bc156bfabf91b5303d85"
|
|
91
99
|
},
|
|
92
100
|
"harness/reviewing/adversary": {
|
|
93
101
|
"path": ".pi/agents/harness/reviewing/adversary.md",
|
|
@@ -95,7 +103,7 @@
|
|
|
95
103
|
},
|
|
96
104
|
"harness/reviewing/evaluator": {
|
|
97
105
|
"path": ".pi/agents/harness/reviewing/evaluator.md",
|
|
98
|
-
"sha256": "
|
|
106
|
+
"sha256": "885dda59bbbc6193c485a90fa4a867d44f2d4278b6ab001dc548c67529d06452"
|
|
99
107
|
},
|
|
100
108
|
"harness/reviewing/tie-breaker": {
|
|
101
109
|
"path": ".pi/agents/harness/reviewing/tie-breaker.md",
|
|
@@ -103,7 +111,7 @@
|
|
|
103
111
|
},
|
|
104
112
|
"harness/planning/decompose": {
|
|
105
113
|
"path": ".pi/agents/harness/planning/decompose.md",
|
|
106
|
-
"sha256": "
|
|
114
|
+
"sha256": "ef552be75ff92667e6be90a85768e0804501d00e517b753ca37d174b2561618a"
|
|
107
115
|
},
|
|
108
116
|
"harness/planning/execution-plan-author": {
|
|
109
117
|
"path": ".pi/agents/harness/planning/execution-plan-author.md",
|
|
@@ -9,11 +9,6 @@ kinds:
|
|
|
9
9
|
- grep
|
|
10
10
|
- find
|
|
11
11
|
- ls
|
|
12
|
-
- ctx_read
|
|
13
|
-
- ctx_search
|
|
14
|
-
- ctx_execute
|
|
15
|
-
- ctx_batch_execute
|
|
16
|
-
- ctx_tree
|
|
17
12
|
extensions: false
|
|
18
13
|
read_only: true
|
|
19
14
|
executor:
|
|
@@ -26,6 +21,7 @@ kinds:
|
|
|
26
21
|
- find
|
|
27
22
|
- ls
|
|
28
23
|
extensions: true
|
|
24
|
+
extension_bundle: executor
|
|
29
25
|
read_only: false
|
|
30
26
|
evaluator:
|
|
31
27
|
tools:
|
|
@@ -33,11 +29,6 @@ kinds:
|
|
|
33
29
|
- grep
|
|
34
30
|
- find
|
|
35
31
|
- ls
|
|
36
|
-
- ctx_read
|
|
37
|
-
- ctx_search
|
|
38
|
-
- ctx_execute
|
|
39
|
-
- ctx_batch_execute
|
|
40
|
-
- ctx_tree
|
|
41
32
|
extensions: false
|
|
42
33
|
read_only: true
|
|
43
34
|
adversary:
|
|
@@ -46,11 +37,6 @@ kinds:
|
|
|
46
37
|
- grep
|
|
47
38
|
- find
|
|
48
39
|
- ls
|
|
49
|
-
- ctx_read
|
|
50
|
-
- ctx_search
|
|
51
|
-
- ctx_execute
|
|
52
|
-
- ctx_batch_execute
|
|
53
|
-
- ctx_tree
|
|
54
40
|
extensions: false
|
|
55
41
|
read_only: true
|
|
56
42
|
tie_breaker:
|
|
@@ -59,11 +45,6 @@ kinds:
|
|
|
59
45
|
- grep
|
|
60
46
|
- find
|
|
61
47
|
- ls
|
|
62
|
-
- ctx_read
|
|
63
|
-
- ctx_search
|
|
64
|
-
- ctx_execute
|
|
65
|
-
- ctx_batch_execute
|
|
66
|
-
- ctx_tree
|
|
67
48
|
extensions: false
|
|
68
49
|
read_only: true
|
|
69
50
|
trace:
|
|
@@ -72,11 +53,6 @@ kinds:
|
|
|
72
53
|
- grep
|
|
73
54
|
- find
|
|
74
55
|
- ls
|
|
75
|
-
- ctx_read
|
|
76
|
-
- ctx_search
|
|
77
|
-
- ctx_execute
|
|
78
|
-
- ctx_batch_execute
|
|
79
|
-
- ctx_tree
|
|
80
56
|
extensions: false
|
|
81
57
|
read_only: true
|
|
82
58
|
incident:
|
|
@@ -85,11 +61,6 @@ kinds:
|
|
|
85
61
|
- grep
|
|
86
62
|
- find
|
|
87
63
|
- ls
|
|
88
|
-
- ctx_read
|
|
89
|
-
- ctx_search
|
|
90
|
-
- ctx_execute
|
|
91
|
-
- ctx_batch_execute
|
|
92
|
-
- ctx_tree
|
|
93
64
|
extensions: false
|
|
94
65
|
read_only: true
|
|
95
66
|
other:
|
|
@@ -98,10 +69,6 @@ kinds:
|
|
|
98
69
|
- grep
|
|
99
70
|
- find
|
|
100
71
|
- ls
|
|
101
|
-
- ctx_read
|
|
102
|
-
- ctx_search
|
|
103
|
-
- ctx_execute
|
|
104
|
-
- ctx_tree
|
|
105
72
|
extensions: false
|
|
106
73
|
read_only: true
|
|
107
74
|
agents:
|
|
@@ -113,17 +80,30 @@ agents:
|
|
|
113
80
|
max_turns: 15
|
|
114
81
|
thinking: medium
|
|
115
82
|
submit_tool: submit_human_required
|
|
116
|
-
harness/
|
|
83
|
+
harness/ls-lint-steward:
|
|
117
84
|
kind: planner
|
|
118
85
|
tools_add:
|
|
119
|
-
-
|
|
86
|
+
- submit_ls_lint_manifest_proposal
|
|
87
|
+
extensions: false
|
|
88
|
+
max_turns: 16
|
|
89
|
+
thinking: high
|
|
90
|
+
submit_tool: submit_ls_lint_manifest_proposal
|
|
91
|
+
harness/sentrux-bootstrap:
|
|
92
|
+
kind: planner
|
|
120
93
|
extensions: true
|
|
121
94
|
max_turns: 12
|
|
122
95
|
thinking: low
|
|
96
|
+
harness/sentrux-repair-advisor:
|
|
97
|
+
kind: evaluator
|
|
98
|
+
tools_add:
|
|
99
|
+
- submit_sentrux_repair_plan
|
|
100
|
+
extensions: false
|
|
101
|
+
max_turns: 14
|
|
102
|
+
thinking: high
|
|
103
|
+
submit_tool: submit_sentrux_repair_plan
|
|
123
104
|
harness/sentrux-steward:
|
|
124
105
|
kind: planner
|
|
125
106
|
tools_add:
|
|
126
|
-
- bash
|
|
127
107
|
- submit_sentrux_manifest_proposal
|
|
128
108
|
extensions: false
|
|
129
109
|
max_turns: 16
|
|
@@ -137,11 +117,40 @@ agents:
|
|
|
137
117
|
max_turns: 20
|
|
138
118
|
thinking: medium
|
|
139
119
|
submit_tool: submit_human_required
|
|
120
|
+
harness/web-retrieval/web-answerer:
|
|
121
|
+
kind: other
|
|
122
|
+
extensions: false
|
|
123
|
+
max_turns: 12
|
|
124
|
+
thinking: medium
|
|
125
|
+
harness/web-retrieval/web-criteria-verifier:
|
|
126
|
+
kind: other
|
|
127
|
+
extensions: false
|
|
128
|
+
max_turns: 14
|
|
129
|
+
thinking: medium
|
|
130
|
+
harness/web-retrieval/web-gap-analyzer:
|
|
131
|
+
kind: other
|
|
132
|
+
extensions: false
|
|
133
|
+
max_turns: 10
|
|
134
|
+
thinking: low
|
|
135
|
+
harness/web-retrieval/web-query-expander-fast:
|
|
136
|
+
kind: other
|
|
137
|
+
extensions: false
|
|
138
|
+
max_turns: 5
|
|
139
|
+
thinking: off
|
|
140
|
+
harness/web-retrieval/web-query-expander:
|
|
141
|
+
kind: other
|
|
142
|
+
extensions: false
|
|
143
|
+
max_turns: 8
|
|
144
|
+
thinking: low
|
|
145
|
+
harness/web-retrieval/web-summarizer:
|
|
146
|
+
kind: other
|
|
147
|
+
extensions: false
|
|
148
|
+
max_turns: 6
|
|
149
|
+
thinking: low
|
|
140
150
|
harness/running/executor:
|
|
141
151
|
kind: executor
|
|
142
152
|
tools_add:
|
|
143
153
|
- submit_executor_handoff
|
|
144
|
-
extensions: true
|
|
145
154
|
max_turns: 20
|
|
146
155
|
thinking: medium
|
|
147
156
|
submit_tool: submit_executor_handoff
|
|
@@ -172,7 +181,6 @@ agents:
|
|
|
172
181
|
harness/planning/decompose:
|
|
173
182
|
kind: planner
|
|
174
183
|
tools_add:
|
|
175
|
-
- bash
|
|
176
184
|
- submit_decomposition_brief
|
|
177
185
|
- submit_human_required
|
|
178
186
|
extensions: false
|
|
@@ -197,50 +205,14 @@ agents:
|
|
|
197
205
|
harness/planning/hypothesis:
|
|
198
206
|
kind: planner
|
|
199
207
|
tools_add:
|
|
200
|
-
- bash
|
|
201
208
|
- submit_hypothesis_brief
|
|
202
209
|
extensions: false
|
|
203
210
|
max_turns: 14
|
|
204
211
|
thinking: medium
|
|
205
212
|
submit_tool: submit_hypothesis_brief
|
|
206
|
-
harness/web-retrieval/web-query-expander:
|
|
207
|
-
kind: other
|
|
208
|
-
extensions: false
|
|
209
|
-
max_turns: 8
|
|
210
|
-
thinking: low
|
|
211
|
-
harness/web-retrieval/web-query-expander-fast:
|
|
212
|
-
kind: other
|
|
213
|
-
extensions: false
|
|
214
|
-
max_turns: 5
|
|
215
|
-
thinking: off
|
|
216
|
-
harness/web-retrieval/web-gap-analyzer:
|
|
217
|
-
kind: other
|
|
218
|
-
extensions: false
|
|
219
|
-
max_turns: 8
|
|
220
|
-
thinking: low
|
|
221
|
-
harness/web-retrieval/web-answerer:
|
|
222
|
-
kind: other
|
|
223
|
-
extensions: false
|
|
224
|
-
max_turns: 12
|
|
225
|
-
thinking: medium
|
|
226
|
-
harness/web-retrieval/web-summarizer:
|
|
227
|
-
kind: other
|
|
228
|
-
extensions: false
|
|
229
|
-
max_turns: 6
|
|
230
|
-
thinking: low
|
|
231
|
-
harness/web-retrieval/web-criteria-verifier:
|
|
232
|
-
kind: other
|
|
233
|
-
extensions: false
|
|
234
|
-
max_turns: 14
|
|
235
|
-
thinking: medium
|
|
236
213
|
harness/planning/implementation-researcher:
|
|
237
214
|
kind: planner
|
|
238
215
|
tools_add:
|
|
239
|
-
- bash
|
|
240
|
-
- web_search
|
|
241
|
-
- web_fetch
|
|
242
|
-
- web_find_similar
|
|
243
|
-
- web_contents
|
|
244
216
|
- submit_implementation_research
|
|
245
217
|
extensions: false
|
|
246
218
|
max_turns: 14
|
|
@@ -272,7 +244,6 @@ agents:
|
|
|
272
244
|
harness/planning/planning-context:
|
|
273
245
|
kind: planner
|
|
274
246
|
tools_add:
|
|
275
|
-
- bash
|
|
276
247
|
- submit_planning_context
|
|
277
248
|
extensions: false
|
|
278
249
|
max_turns: 12
|
|
@@ -297,11 +268,6 @@ agents:
|
|
|
297
268
|
harness/planning/stack-researcher:
|
|
298
269
|
kind: planner
|
|
299
270
|
tools_add:
|
|
300
|
-
- bash
|
|
301
|
-
- web_search
|
|
302
|
-
- web_fetch
|
|
303
|
-
- web_find_similar
|
|
304
|
-
- web_contents
|
|
305
271
|
- submit_stack_brief
|
|
306
272
|
extensions: false
|
|
307
273
|
max_turns: 16
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# ADR 0051: Hash-anchored read/edit (Dirac-inspired)
|
|
2
|
+
|
|
3
|
+
- **Status:** Accepted
|
|
4
|
+
- **Date:** 2026-05-26
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
|
|
8
|
+
Harness executor sessions used Pi’s `oldText`/`newText` `edit` tool. Line-number and fuzzy-match edits fail when files drift between read and edit, causing retries and token waste. [Dirac](https://github.com/dirac-run/dirac) demonstrates stable **hash-anchored** line targeting with Myers-diff anchor reconciliation; user evaluation chose adoption for the harness.
|
|
9
|
+
|
|
10
|
+
We already own adjacent concerns: **harness-lens** (LSP, indentation autopatch, format), **shell `sg`** (structural search per ADR 0045), **Sentrux** (architecture gate). We must not duplicate those layers.
|
|
11
|
+
|
|
12
|
+
## Decision
|
|
13
|
+
|
|
14
|
+
1. **First-class tools** — [`.pi/extensions/harness-anchored-edit.ts`](../../../extensions/harness-anchored-edit.ts) registers harness `read` and `edit`. No env toggle.
|
|
15
|
+
2. **Vendored core** in [`.pi/lib/harness-anchored-edit/`](../../../lib/harness-anchored-edit/) (Apache-2.0 subset from Dirac: anchor state, line protocol, resolve/apply).
|
|
16
|
+
3. **`read`** output: `AnchorWord§line` per line; anchor state scoped per session/task id.
|
|
17
|
+
4. **`edit`** input: `anchor`, optional `end_anchor` (defaults to `anchor` for single-line replace), `edit_type`, `text`; batch `edits[]` per file.
|
|
18
|
+
5. **Native apply** — `applyAnchoredEditsToFile` writes disk directly (Pi `edit-diff` for unified diff in tool result). No `resolve-to-pi-edit` / no delegation to `createEditTool`.
|
|
19
|
+
6. **Lens** — `tool_call` autopatch corrects indentation on anchored `edits[].text` only ([`anchored-edit-autopatch.ts`](../../../lib/harness-lens/clients/anchored-edit-autopatch.ts)). Legacy `oldText` autopatch remains for non-harness agents that still use Pi edit.
|
|
20
|
+
7. **Executor subprocess bundle** — `kinds.executor.extension_bundle: executor` loads `--no-extensions` plus curated `-e` modules only: `subagent-governance.ts`, `harness-anchored-edit.ts`, `harness-lens.ts` ([`resolveExtensionBundlePaths`](../../../lib/agents-policy.mjs)). Avoids loading the full `.pi/extensions` tree (parent orchestration, run-context phase hooks) while still providing hash-anchored read/edit and lens format-on-result.
|
|
21
|
+
8. **Builtin suppression** — Executor subprocesses use `--no-builtin-tools` + tool allowlist ([`agents.policy.yaml`](../agents.policy.yaml) via `noBuiltinTools` when `extension_bundle` or full extensions apply).
|
|
22
|
+
9. **Executor policy** (prompt + practice-map): batching discipline, post-edit verification before `submit_executor_handoff`, structural refactor via `sg -p` → anchored edit — **no** `replace_symbol` Pi tools.
|
|
23
|
+
10. **Remove** `grep`/`find` from executor tool policy; use `bash` + `sg` for code search.
|
|
24
|
+
|
|
25
|
+
## Consequences
|
|
26
|
+
|
|
27
|
+
### Positive
|
|
28
|
+
|
|
29
|
+
- More stable edits across multi-step executor and steer repair loops.
|
|
30
|
+
- Single anchored edit surface; no Pi text-match shim on the hot path.
|
|
31
|
+
|
|
32
|
+
### Negative
|
|
33
|
+
|
|
34
|
+
- Models must learn anchor `§` protocol.
|
|
35
|
+
- Vendored Dirac code must be kept in sync for security fixes (small surface).
|
|
36
|
+
|
|
37
|
+
## References
|
|
38
|
+
|
|
39
|
+
- [practice-map.md](../practice-map.md) — Executor edit discipline
|
|
40
|
+
- [ADR 0045](0045-harness-lens-minimal-contract.md) — lens vs sg vs Sentrux
|
|
41
|
+
- [ADR 0044](0044-harness-steer-loop.md) — repair mode uses same edit rules
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# ADR 0052: ls-lint naming lifecycle
|
|
2
|
+
|
|
3
|
+
- **Status:** Accepted
|
|
4
|
+
- **Date:** 2026-05-26
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
|
|
8
|
+
Harness projects need deterministic **filesystem naming** fitness functions alongside Sentrux (code architecture). [ls-lint](https://ls-lint.org/) validates file and directory names from `.ls-lint.yml`. The harness must keep naming rules aligned when conventions evolve — not only on initial setup.
|
|
9
|
+
|
|
10
|
+
## Decision
|
|
11
|
+
|
|
12
|
+
1. **Canonical source:** [`.pi/harness/ls-lint/naming.manifest.json`](../../ls-lint/naming.manifest.json) — `global_rules`, `scoped_rules`, `ignores`.
|
|
13
|
+
2. **Generated artifact:** `.ls-lint.yml` at repo root — committed to git; managed block between `harness:managed:start/end` markers.
|
|
14
|
+
3. **Bootstrap (idempotent):** `node "$UP_PKG/.pi/scripts/harness-ls-lint-bootstrap.mjs"` — seeds manifest when missing, runs sync without `--force` when unchanged.
|
|
15
|
+
4. **Re-sync:** `node "$UP_PKG/.pi/scripts/ls-lint-rules-sync.mjs" --force` or `harness-ls-lint-bootstrap.mjs --force`.
|
|
16
|
+
5. **Pi command:** `/harness-ls-lint-sync` via `ls-lint-rules-sync.ts` extension.
|
|
17
|
+
6. **When to sync:**
|
|
18
|
+
- `/harness-setup` Step 4.3 (after ls-lint CLI install in Step 2.9)
|
|
19
|
+
- After editing `naming.manifest.json`
|
|
20
|
+
- On `agent_end` when harness phase is `plan` or `merge`, or `harness-naming-changed`
|
|
21
|
+
- `harness-verify.mjs` fails if manifest hash ≠ last sync (`--check`)
|
|
22
|
+
7. **Custom rules:** YAML outside the managed block is preserved on sync.
|
|
23
|
+
8. **Skill:** `harness-ls-lint-setup` documents bootstrap vs steward vs sync vs observation.
|
|
24
|
+
9. **Intent evolution:** `harness/ls-lint-steward` proposes JSON Merge Patches via `submit_ls_lint_manifest_proposal` → `artifacts/ls-lint-manifest-proposal.yaml`. Chair applies manifest edits; never silent auto-merge from directory trees.
|
|
25
|
+
10. **Observation vs intent:** `/harness-run` + `/harness-review` run `harness-ls-lint-cli.mjs` → `artifacts/ls-lint-signal.yaml`. Violations after execute → steer/repair. Manifest changes → steward + ADR when material.
|
|
26
|
+
|
|
27
|
+
## Consequences
|
|
28
|
+
|
|
29
|
+
### Positive
|
|
30
|
+
|
|
31
|
+
- Filename drift is caught before merge with millisecond lint cost.
|
|
32
|
+
- Complements Sentrux without conflating path naming with import-layer architecture.
|
|
33
|
+
|
|
34
|
+
### Negative
|
|
35
|
+
|
|
36
|
+
- Strict global kebab-case may require scoped rules or ignores for legacy third-party trees (handled via `ignores` and `scoped_rules`).
|
|
37
|
+
|
|
38
|
+
## References
|
|
39
|
+
|
|
40
|
+
- ADR 0009 (Sentrux rules lifecycle — parallel pattern)
|
|
41
|
+
- `.pi/agents/harness/ls-lint-steward.md`, `.pi/prompts/harness-ls-lint-steward.md`
|
|
42
|
+
- `.pi/harness/specs/ls-lint-manifest-proposal.schema.json`, `ls-lint-signal.schema.json`
|
|
43
|
+
- `.pi/scripts/harness-ls-lint-bootstrap.mjs`, `ls-lint-rules-sync.mjs`, `harness-ls-lint-cli.mjs`
|
|
44
|
+
- `.agents/skills/harness-ls-lint-setup/SKILL.md`
|
|
45
|
+
- `.pi/extensions/ls-lint-rules-sync.ts`
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# ADR 0052: Sentrux structured repair (OSS diagnostics, no MCP/Pro)
|
|
2
|
+
|
|
3
|
+
- **Status:** Accepted
|
|
4
|
+
- **Date:** 2026-05-27
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
|
|
8
|
+
Sentrux OSS `check` / `gate` already compute a full `HealthReport` internally, but the free CLI prints violations and a quality line while dropping rich lists (god files, hotspots, complex functions). Sentrux Pro exposes the same shape via MCP `health`. Ultimate-pi harness needs **actionable “what to fix”** for steer/executor without Pro, MCP, or duplicate scans per review phase.
|
|
9
|
+
|
|
10
|
+
ADR 0006/0009 cover dual-layer trust and manifest lifecycle; ADR 0044 covers steer via `repair-brief.yaml`. Prior `sentrux-signal.yaml` (v1.0.0) was too thin for repair routing.
|
|
11
|
+
|
|
12
|
+
## Decision
|
|
13
|
+
|
|
14
|
+
1. **Single scan per run** — Parent runs `harness-sentrux-report.mjs` once (check + gate capture → `artifacts/sentrux-report.json`). Review reuses artifacts unless missing or `HARNESS_SENTRUX_RESCAN=1`.
|
|
15
|
+
2. **OSS synthesis** — `harness-sentrux-diagnostics.mjs` builds Pro-shaped `artifacts/sentrux-diagnostics.json` from the report (+ optional git churn, graphify refs). `bottleneck_inferred: true` when not from upstream JSON.
|
|
16
|
+
3. **Signal v1.1.0** — `sentrux-signal.yaml` adds `quality_signal`, `violation_count`, `report_path`, `diagnostics_path`, `degraded_reasons`.
|
|
17
|
+
4. **Repair advisor subagent** — `harness/sentrux-repair-advisor` (read-only, no bash) submits `artifacts/sentrux-repair-plan.yaml` via `submit_sentrux_repair_plan`. Spawned in `/harness-review` **Phase 1b** before benchmark evaluator when violations or gate degradation exist.
|
|
18
|
+
5. **Steer merge** — `synthesizeRepairBrief` prepends `[sentrux:…]` directives from the repair plan into `repair-brief.yaml`.
|
|
19
|
+
6. **Upstream optional** — Report script probes `sentrux check --format json`; when available, prefer parsed JSON over stdout heuristics. Track upstream contribution separately (`raw/sentrux-upstream-json-format.md`).
|
|
20
|
+
|
|
21
|
+
## Consequences
|
|
22
|
+
|
|
23
|
+
### Positive
|
|
24
|
+
|
|
25
|
+
- Pro-style repair context without Pro/MCP.
|
|
26
|
+
- One CLI scan per run; review/advisor read paths only.
|
|
27
|
+
- Clear separation: steward = manifest intent; repair advisor = code fixes.
|
|
28
|
+
|
|
29
|
+
### Negative
|
|
30
|
+
|
|
31
|
+
- Stdout parsers must track CLI formatting changes until upstream JSON ships.
|
|
32
|
+
- Inferred diagnostics are weaker than native HealthReport serialization.
|
|
33
|
+
|
|
34
|
+
## References
|
|
35
|
+
|
|
36
|
+
- [ADR 0006](0006-sentrux-dual-layer.md), [ADR 0009](0009-sentrux-rules-lifecycle.md), [ADR 0044](0044-harness-steer-loop.md)
|
|
37
|
+
- `.pi/scripts/harness-sentrux-report.mjs`, `harness-sentrux-diagnostics.mjs`
|
|
38
|
+
- `.pi/agents/harness/sentrux-repair-advisor.md`
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# ADR 0053: Plan-phase task clarification gate
|
|
2
|
+
|
|
3
|
+
- **Status:** Accepted
|
|
4
|
+
- **Date:** 2026-05-26
|
|
5
|
+
- **Deciders:** ultimate-pi harness team
|
|
6
|
+
|
|
7
|
+
## Context
|
|
8
|
+
|
|
9
|
+
`/harness-plan` began with Phase 1 reconnaissance (graphify, ccc, optional planning-context subprocess) before the user’s intent was unambiguous. That burned tokens and subagent time on the wrong problem. `ask_user` appeared only after expensive work (Phase 3.5 forks, debate, approval). Decompose §1.1 duplicated problem clarification too late.
|
|
10
|
+
|
|
11
|
+
## Decision
|
|
12
|
+
|
|
13
|
+
Insert **Phase 0 — Task clarification** before full planning:
|
|
14
|
+
|
|
15
|
+
1. Parent writes `artifacts/task-clarification.yaml` with a canonical `clarified_task`, scope boundaries, draft acceptance checks, and empty `unresolved_questions` when `status: ready`.
|
|
16
|
+
2. Codebase reads and web-retrieval are **allowed** during Phase 0 when they help disambiguate the task; the boundary is **phase scope** (no planning subagents, no `planning-context.yaml` or downstream plan artifacts), not a tool ban.
|
|
17
|
+
3. Enforce readiness via `harness_artifact_ready`, `write_harness_yaml` / `merge_harness_yaml` write-order, spawn topology, and `validatePlanApprovalReadiness`.
|
|
18
|
+
4. Phase 1 inherits Phase 0 `grounding` / `evidence_refs` and sets `planning-context.task_ref` to the clarification artifact.
|
|
19
|
+
|
|
20
|
+
## Consequences
|
|
21
|
+
|
|
22
|
+
### Positive
|
|
23
|
+
|
|
24
|
+
- Ambiguity resolved before reconnaissance, decomposition, research, and debate.
|
|
25
|
+
- Single task contract artifact for spawn context and scope checks (`task_summary` syncs on gate pass).
|
|
26
|
+
- Prompt-only bypass closed by write-order and spawn guards.
|
|
27
|
+
|
|
28
|
+
### Negative / trade-offs
|
|
29
|
+
|
|
30
|
+
- Extra `ask_user` latency on vague tasks (intentional).
|
|
31
|
+
- Overlap between Phase 0 investigation and Phase 1 recon unless orchestrator deduplicates via `grounding`.
|
|
32
|
+
- Three status vocabularies (`task-clarification.status`, `plan-phase-status`, `last_outcome`) — document which applies when.
|
|
33
|
+
|
|
34
|
+
## References
|
|
35
|
+
|
|
36
|
+
- [practice-map.md](../practice-map.md) — Phase 0 / 0a rows
|
|
37
|
+
- [.pi/prompts/harness-plan.md](../../../prompts/harness-plan.md)
|
|
38
|
+
- [.pi/lib/plan-task-clarification.ts](../../../lib/plan-task-clarification.ts)
|
|
39
|
+
- [.pi/harness/specs/plan-task-clarification.schema.json](../specs/plan-task-clarification.schema.json)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# ADR 0054: Harness-native ask_user with Glimpse presenters
|
|
2
|
+
|
|
3
|
+
- **Status:** Accepted
|
|
4
|
+
- **Date:** 2026-05-27
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
|
|
8
|
+
Harness orchestrators need structured human decisions (`ask_user`) during setup, Phase 0 task clarification, and governance forks. Terminal-only prompts are hard to scan for multi-dimensional forks. [@alexleekt/pi-ask-user-glimpse](https://www.npmjs.com/package/@alexleekt/pi-ask-user-glimpse) ships a rich WebView UI, but installing it as a second Pi extension would duplicate tool registration and couple harness policy to upstream extension lifecycle.
|
|
9
|
+
|
|
10
|
+
## Decision
|
|
11
|
+
|
|
12
|
+
1. **Single tool registration** — [`.pi/extensions/harness-ask-user.ts`](../../../extensions/harness-ask-user.ts) registers `ask_user` and delegates to [`runAskUser`](../../../lib/ask-user/index.ts).
|
|
13
|
+
2. **Domain module** — [`.pi/lib/ask-user/`](../../../lib/ask-user/): `types`, `schema`, `validate`, `format`, `policy`, `merge-task-clarification`, `core/questionnaire`.
|
|
14
|
+
3. **Presenter stack** (UI only) — `presenters/tui.ts`, `presenters/headless.ts`, `presenters/glimpse.ts`, routed by `presenters/select.ts`.
|
|
15
|
+
4. **Glimpse as npm dependency** — pinned in [`.pi/npm/package.json`](../../../npm/package.json) (`@alexleekt/pi-ask-user-glimpse`, `glimpseui`). Harness-owned payload builder + parser in `contracts/`; no import of glimpse’s private `tool/ask-user.ts`.
|
|
16
|
+
5. **Response shape** — `AskResponse` includes `kind: "questionnaire"` with `questionnaireDetails[]` (aligned with glimpse, not a parallel `answers` array).
|
|
17
|
+
6. **Routing** — `HARNESS_ASK_USER_UI=auto|tui|glimpse|headless`. `displayMode: "inline"` always uses TUI. Glimpse failure degrades to TUI with `details.ui_degraded: true`. Non-interactive sessions short-circuit via `isHarnessNonInteractive()`.
|
|
18
|
+
7. **Plan approval** — remains on `approve_plan` only; `isPlanApprovalAskUser` in `policy.ts` rejects mistaken plan-approval-shaped `ask_user` calls.
|
|
19
|
+
8. **Formatting** — only [`format.ts`](../../../lib/ask-user/format.ts) emits tool `content` text; presenters return structured `DialogResult`.
|
|
20
|
+
|
|
21
|
+
## Consequences
|
|
22
|
+
|
|
23
|
+
### Positive
|
|
24
|
+
|
|
25
|
+
- One `ask_user` contract for agents; swappable UI without policy forks.
|
|
26
|
+
- Questionnaire mode supports Phase 0 multi-fork clarification in one tool call.
|
|
27
|
+
- WSL/CI can force TUI or headless without removing glimpse for desktop users.
|
|
28
|
+
|
|
29
|
+
### Negative
|
|
30
|
+
|
|
31
|
+
- Glimpse bundle adds weight to `.pi/npm` installs (~3.5 MB web assets).
|
|
32
|
+
- `timeout` applies to TUI/headless only in v1; glimpse relies on user Cancel.
|
|
33
|
+
- `approve_plan` still uses TUI inline flow (v1.5: shared presenter + plan markdown context).
|
|
34
|
+
|
|
35
|
+
## References
|
|
36
|
+
|
|
37
|
+
- ADR 0053 (task clarification gate)
|
|
38
|
+
- `.agents/skills/harness-decisions/SKILL.md`
|
|
39
|
+
- `test/harness-ask-user.test.mjs`
|
|
40
|
+
- `.pi/lib/ask-user/merge-task-clarification.ts`
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# ADR 0055: Auto-commit co-author lifecycle
|
|
2
|
+
|
|
3
|
+
- **Status:** Accepted
|
|
4
|
+
- **Date:** 2026-05-27
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
|
|
8
|
+
Harness agents and `/harness-auto` frequently commit after review. Attribution should credit **pi-mono** (or a project-configured bot) via GitHub `Co-authored-by` trailers. Message shape should be consistent and configurable for external repos installing `ultimate-pi` via npm.
|
|
9
|
+
|
|
10
|
+
Prior state: `.pi/auto-commit.json` existed with `coAuthor` and `scopeDefault`, but agents used ad-hoc `git commit -m` (e.g. `release.md` hardcoded trailers). No deterministic formatter or skill contract.
|
|
11
|
+
|
|
12
|
+
## Decision
|
|
13
|
+
|
|
14
|
+
1. **Canonical config:** `.pi/auto-commit.json` at project root (seeded from package template on bootstrap).
|
|
15
|
+
2. **Merge:** Project file deep-merges over `$UP_PKG/.pi/auto-commit.json`; project `coAuthor` **fully replaces** package co-author fields after merge (no forced pi-mono when project overrides).
|
|
16
|
+
3. **CLI:** `harness-git-commit.mjs` — format message, append trailer idempotently, `git commit -F` (argv spawn, no shell), supports `--amend`, `--dry-run`, `--print-message`, `--root`.
|
|
17
|
+
4. **Bootstrap:** `harness-auto-commit-bootstrap.mjs` seeds project config when missing; personalizes `message.scopeDefault`.
|
|
18
|
+
5. **Skill:** `harness-git-commit` — agents must use CLI; raw `git commit` forbidden in skill text.
|
|
19
|
+
6. **Enforcement:** Skill + prompts + `harness-verify` contract only — **no** `commit-msg` git hook (v1).
|
|
20
|
+
7. **Schema:** `.pi/harness/specs/auto-commit.schema.json` for validation and seeding.
|
|
21
|
+
|
|
22
|
+
## Consequences
|
|
23
|
+
|
|
24
|
+
### Positive
|
|
25
|
+
|
|
26
|
+
- One path for agent commits with configurable conventional-commit templates.
|
|
27
|
+
- External projects customize format and co-author without forking the package.
|
|
28
|
+
|
|
29
|
+
### Negative
|
|
30
|
+
|
|
31
|
+
- Bypass remains possible (raw git, subagents, gstack `/ship`, humans).
|
|
32
|
+
- Submodule commits at nested roots do not pick up project config unless `--root` points at owner repo.
|
|
33
|
+
- Squash merges on GitHub may drop co-authors — documented limitation.
|
|
34
|
+
|
|
35
|
+
## References
|
|
36
|
+
|
|
37
|
+
- `.pi/auto-commit.json`, `.pi/lib/harness-auto-commit-config.mjs`
|
|
38
|
+
- `.pi/scripts/harness-git-commit.mjs`, `harness-auto-commit-bootstrap.mjs`
|
|
39
|
+
- `.agents/skills/harness-git-commit/SKILL.md`
|
|
40
|
+
- ADR 0052 (parallel bootstrap/sync pattern for ls-lint)
|
|
@@ -36,6 +36,13 @@ Team-shared ADRs for the ultimate-pi harness live under `.pi/harness/docs/adrs/`
|
|
|
36
36
|
| [0047](0047-agt-layered-security.md) | AGT layered security (rings, prompt defense, CI) | Accepted |
|
|
37
37
|
| [0048](0048-tool-call-hook-order.md) | tool_call hook interaction matrix | Accepted |
|
|
38
38
|
| [0049](0049-agents-policy-manifest.md) | agents.policy.yaml SSOT + native discovery | Accepted |
|
|
39
|
+
| [0050](0050-agentic-web-retrieval-stack.md) | Agentic Web Retrieval Stack (WRS) | Accepted |
|
|
40
|
+
| [0051](0051-hash-anchored-executor-edits.md) | Hash-anchored read/edit (Dirac-inspired) | Accepted |
|
|
41
|
+
| [0052](0052-sentrux-structured-repair.md) | Sentrux structured repair (OSS diagnostics) | Accepted |
|
|
42
|
+
| [0052](0052-ls-lint-naming-lifecycle.md) | ls-lint naming lifecycle | Accepted |
|
|
43
|
+
| [0053](0053-plan-task-clarification-gate.md) | Plan-phase task clarification gate | Accepted |
|
|
44
|
+
| [0054](0054-harness-native-ask-user.md) | Harness-native ask_user + Glimpse presenters | Accepted |
|
|
45
|
+
| [0055](0055-auto-commit-coauthor-lifecycle.md) | Auto-commit co-author + message format lifecycle | Accepted |
|
|
39
46
|
|
|
40
47
|
## Practice map
|
|
41
48
|
|