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.
Files changed (147) hide show
  1. package/.agents/skills/harness-decisions/SKILL.md +68 -2
  2. package/.agents/skills/harness-git-commit/SKILL.md +72 -0
  3. package/.agents/skills/harness-governor/SKILL.md +2 -2
  4. package/.agents/skills/harness-ls-lint-setup/SKILL.md +59 -0
  5. package/.agents/skills/harness-plan/SKILL.md +13 -11
  6. package/.agents/skills/harness-review/SKILL.md +1 -1
  7. package/.agents/skills/harness-sentrux-repair/SKILL.md +48 -0
  8. package/.agents/skills/sentrux/SKILL.md +4 -2
  9. package/.agents/skills/wiki-save/SKILL.md +1 -1
  10. package/.pi/PACKAGING.md +6 -0
  11. package/.pi/SYSTEM.md +21 -3
  12. package/.pi/agents/harness/ls-lint-steward.md +49 -0
  13. package/.pi/agents/harness/planning/decompose.md +4 -4
  14. package/.pi/agents/harness/reviewing/evaluator.md +1 -1
  15. package/.pi/agents/harness/running/executor.md +43 -2
  16. package/.pi/agents/harness/sentrux-repair-advisor.md +50 -0
  17. package/.pi/agents/pi-pi/prompt-expert.md +17 -2
  18. package/.pi/auto-commit.json +9 -2
  19. package/.pi/extensions/debate-orchestrator.ts +3 -0
  20. package/.pi/extensions/harness-anchored-edit.ts +139 -0
  21. package/.pi/extensions/harness-ask-user.ts +13 -34
  22. package/.pi/extensions/harness-debate-tools.ts +43 -4
  23. package/.pi/extensions/harness-live-widget.ts +28 -19
  24. package/.pi/extensions/harness-run-context.ts +278 -115
  25. package/.pi/extensions/harness-web-tools.ts +598 -471
  26. package/.pi/extensions/ls-lint-rules-sync.ts +103 -0
  27. package/.pi/extensions/observation-bus.ts +4 -0
  28. package/.pi/extensions/policy-gate.ts +270 -229
  29. package/.pi/extensions/sentrux-rules-sync.ts +2 -0
  30. package/.pi/extensions/soundboard.ts +48 -48
  31. package/.pi/harness/README.md +4 -0
  32. package/.pi/harness/agents.manifest.json +15 -7
  33. package/.pi/harness/agents.policy.yaml +47 -81
  34. package/.pi/harness/docs/adrs/0051-hash-anchored-executor-edits.md +41 -0
  35. package/.pi/harness/docs/adrs/0052-ls-lint-naming-lifecycle.md +45 -0
  36. package/.pi/harness/docs/adrs/0052-sentrux-structured-repair.md +38 -0
  37. package/.pi/harness/docs/adrs/0053-plan-task-clarification-gate.md +39 -0
  38. package/.pi/harness/docs/adrs/0054-harness-native-ask-user.md +40 -0
  39. package/.pi/harness/docs/adrs/0055-auto-commit-coauthor-lifecycle.md +40 -0
  40. package/.pi/harness/docs/adrs/README.md +7 -0
  41. package/.pi/harness/docs/practice-map.md +21 -5
  42. package/.pi/harness/evals/smoke/ls-lint-stub.json +10 -0
  43. package/.pi/harness/evolution/self-healing-rules.json +16 -0
  44. package/.pi/harness/ls-lint/naming.manifest.json +128 -0
  45. package/.pi/harness/sentrux/architecture.manifest.json +1 -1
  46. package/.pi/harness/specs/auto-commit.schema.json +63 -0
  47. package/.pi/harness/specs/ls-lint-manifest-proposal.schema.json +80 -0
  48. package/.pi/harness/specs/ls-lint-signal.schema.json +47 -0
  49. package/.pi/harness/specs/naming-manifest.schema.json +54 -0
  50. package/.pi/harness/specs/plan-task-clarification.schema.json +88 -0
  51. package/.pi/harness/specs/sentrux-diagnostics.schema.json +173 -0
  52. package/.pi/harness/specs/sentrux-repair-plan.schema.json +133 -0
  53. package/.pi/harness/specs/sentrux-report.schema.json +119 -0
  54. package/.pi/harness/specs/sentrux-signal.schema.json +34 -1
  55. package/.pi/lib/agents-policy.d.mts +26 -47
  56. package/.pi/lib/agents-policy.mjs +84 -29
  57. package/.pi/lib/agents-policy.ts +1 -0
  58. package/.pi/lib/agt/build-evaluation-context.ts +136 -64
  59. package/.pi/lib/ask-user/constants.mjs +3 -0
  60. package/.pi/lib/ask-user/constants.ts +4 -0
  61. package/.pi/lib/ask-user/contracts/glimpse-parse.ts +56 -0
  62. package/.pi/lib/ask-user/contracts/glimpse-payload-build.ts +58 -0
  63. package/.pi/lib/ask-user/contracts/glimpse-payload.ts +38 -0
  64. package/.pi/lib/ask-user/core/questionnaire.ts +74 -0
  65. package/.pi/lib/ask-user/dialog.ts +2 -314
  66. package/.pi/lib/ask-user/fallback.ts +2 -78
  67. package/.pi/lib/ask-user/format.ts +85 -0
  68. package/.pi/lib/ask-user/glimpseui.d.ts +10 -0
  69. package/.pi/lib/ask-user/index.ts +114 -0
  70. package/.pi/lib/ask-user/merge-task-clarification.ts +98 -0
  71. package/.pi/lib/ask-user/policy.mjs +43 -0
  72. package/.pi/lib/ask-user/policy.ts +104 -0
  73. package/.pi/lib/ask-user/presenters/glimpse.ts +130 -0
  74. package/.pi/lib/ask-user/presenters/headless.ts +131 -0
  75. package/.pi/lib/ask-user/presenters/select.ts +60 -0
  76. package/.pi/lib/ask-user/presenters/tui.ts +373 -0
  77. package/.pi/lib/ask-user/presenters/types.ts +13 -0
  78. package/.pi/lib/ask-user/render.ts +40 -9
  79. package/.pi/lib/ask-user/schema.ts +66 -13
  80. package/.pi/lib/ask-user/types.ts +60 -3
  81. package/.pi/lib/ask-user/validate-core.mjs +193 -7
  82. package/.pi/lib/ask-user/validate.ts +53 -34
  83. package/.pi/lib/harness-anchored-edit/.hash_anchors +1721 -0
  84. package/.pi/lib/harness-anchored-edit/anchor-state.ts +320 -0
  85. package/.pi/lib/harness-anchored-edit/apply-anchored-edits.ts +161 -0
  86. package/.pi/lib/harness-anchored-edit/edit-executor.ts +146 -0
  87. package/.pi/lib/harness-anchored-edit/index.ts +9 -0
  88. package/.pi/lib/harness-anchored-edit/line-protocol.ts +38 -0
  89. package/.pi/lib/harness-anchored-edit/package.json +3 -0
  90. package/.pi/lib/harness-anchored-edit/settings.ts +1 -0
  91. package/.pi/lib/harness-anchored-edit/task-id.ts +8 -0
  92. package/.pi/lib/harness-anchored-edit/types.ts +19 -0
  93. package/.pi/lib/harness-artifact-gate.ts +75 -21
  94. package/.pi/lib/harness-auto-commit-config.mjs +321 -0
  95. package/.pi/lib/harness-lens/clients/anchored-edit-autopatch.ts +158 -0
  96. package/.pi/lib/harness-lens/clients/lsp/client.ts +62 -39
  97. package/.pi/lib/harness-lens/clients/tool-policy.ts +73 -181
  98. package/.pi/lib/harness-lens/index.ts +246 -96
  99. package/.pi/lib/harness-lens/tools/lsp-navigation.ts +10 -8
  100. package/.pi/lib/harness-repair-brief.ts +84 -25
  101. package/.pi/lib/harness-run-context.ts +42 -52
  102. package/.pi/lib/harness-sentrux-parse.mjs +272 -0
  103. package/.pi/lib/harness-sentrux-root.mjs +78 -0
  104. package/.pi/lib/harness-slash-completions.ts +116 -0
  105. package/.pi/lib/harness-spawn-topology.ts +121 -87
  106. package/.pi/lib/harness-subagent-submit-registry.ts +10 -0
  107. package/.pi/lib/harness-subagents-bridge.ts +11 -6
  108. package/.pi/lib/harness-ui-state.ts +95 -48
  109. package/.pi/lib/plan-approval/dialog.ts +5 -0
  110. package/.pi/lib/plan-approval/validate.ts +1 -1
  111. package/.pi/lib/plan-approval-readiness.ts +32 -0
  112. package/.pi/lib/plan-debate-gate.ts +154 -114
  113. package/.pi/lib/plan-task-clarification.ts +158 -0
  114. package/.pi/prompts/harness-auto.md +2 -2
  115. package/.pi/prompts/harness-ls-lint-steward.md +43 -0
  116. package/.pi/prompts/harness-plan.md +58 -8
  117. package/.pi/prompts/harness-review.md +40 -6
  118. package/.pi/prompts/harness-run.md +33 -11
  119. package/.pi/prompts/harness-setup.md +72 -3
  120. package/.pi/prompts/harness-steer.md +3 -2
  121. package/.pi/prompts/wiki-save.md +5 -4
  122. package/.pi/scripts/README.md +8 -0
  123. package/.pi/scripts/generate-agents-policy-yaml.mjs +14 -2
  124. package/.pi/scripts/harness-anchored-edit-smoke.mjs +45 -0
  125. package/.pi/scripts/harness-auto-commit-bootstrap.mjs +96 -0
  126. package/.pi/scripts/harness-cli-verify.sh +47 -0
  127. package/.pi/scripts/harness-git-churn.mjs +77 -0
  128. package/.pi/scripts/harness-git-commit.mjs +173 -0
  129. package/.pi/scripts/harness-ls-lint-bootstrap.mjs +142 -0
  130. package/.pi/scripts/harness-ls-lint-cli.mjs +184 -0
  131. package/.pi/scripts/harness-seed-project-contracts.mjs +47 -0
  132. package/.pi/scripts/harness-sentrux-diagnostics.mjs +230 -0
  133. package/.pi/scripts/harness-sentrux-report.mjs +256 -0
  134. package/.pi/scripts/harness-verify.mjs +347 -117
  135. package/.pi/scripts/ls-lint-rules-sync.mjs +265 -0
  136. package/.pi/scripts/run-tests.mjs +65 -0
  137. package/.pi/settings.example.json +1 -0
  138. package/.sentrux/rules.toml +1 -1
  139. package/AGENTS.md +1 -0
  140. package/CHANGELOG.md +31 -0
  141. package/README.md +13 -4
  142. package/THIRD_PARTY_NOTICES.md +7 -0
  143. package/package.json +8 -3
  144. package/vendor/pi-subagents/src/agents.ts +5 -0
  145. package/vendor/pi-subagents/src/subagents.ts +22 -3
  146. package/vendor/pi-vcc/src/hooks/before-compact.ts +86 -60
  147. package/.pi/scripts/release.sh +0 -338
@@ -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.19.0",
5
- "generated_at": "2026-05-26T06:39:19.250Z",
6
- "policy_sha256": "f0eb41bc6a877a237087e87762ce11908e93755a42d58f19d6573665b198665f",
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": "0d9f5e3e8ab162149cac8f08e159a7b2150a11f53ebe7021e72f8277fa004d0c"
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": "219c9307567acc95a9c1b1340f899fac860406fb2c2e84f51b4a8c3ba3a0e2ec"
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": "5d6d34654d5c223e5549de9b7b0277b4e28745b2409545ecf3034bd0789c3fa3"
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": "944c7221b7bf8e15cd8cf324c3d5ae135c643c6387d8f611cf9128f9ea922963"
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/sentrux-bootstrap:
83
+ harness/ls-lint-steward:
117
84
  kind: planner
118
85
  tools_add:
119
- - bash
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