ultimate-pi 0.20.0 → 0.22.1

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 (149) hide show
  1. package/.agents/skills/harness-context/SKILL.md +3 -3
  2. package/.agents/skills/harness-debate-plan/SKILL.md +2 -2
  3. package/.agents/skills/harness-decisions/SKILL.md +68 -2
  4. package/.agents/skills/harness-eval/SKILL.md +1 -1
  5. package/.agents/skills/harness-git-commit/SKILL.md +72 -0
  6. package/.agents/skills/harness-governor/SKILL.md +6 -6
  7. package/.agents/skills/harness-ls-lint-setup/SKILL.md +59 -0
  8. package/.agents/skills/harness-orchestration/SKILL.md +4 -4
  9. package/.agents/skills/harness-plan/SKILL.md +14 -12
  10. package/.agents/skills/harness-review/SKILL.md +3 -3
  11. package/.agents/skills/harness-sentrux-repair/SKILL.md +48 -0
  12. package/.agents/skills/harness-sentrux-setup/SKILL.md +2 -2
  13. package/.agents/skills/harness-spec/SKILL.md +1 -1
  14. package/.agents/skills/harness-steer/SKILL.md +2 -2
  15. package/.agents/skills/posthog-analyst/SKILL.md +1 -1
  16. package/.agents/skills/sentrux/SKILL.md +6 -4
  17. package/.agents/skills/web-retrieval/SKILL.md +1 -1
  18. package/.agents/skills/wiki-save/SKILL.md +1 -1
  19. package/.pi/PACKAGING.md +6 -0
  20. package/.pi/SYSTEM.md +21 -3
  21. package/.pi/agents/harness/ls-lint-steward.md +49 -0
  22. package/.pi/agents/harness/planning/decompose.md +5 -5
  23. package/.pi/agents/harness/planning/execution-plan-author.md +1 -1
  24. package/.pi/agents/harness/planning/hypothesis-validator.md +1 -1
  25. package/.pi/agents/harness/planning/hypothesis.md +1 -1
  26. package/.pi/agents/harness/planning/plan-adversary.md +1 -1
  27. package/.pi/agents/harness/planning/plan-evaluator.md +2 -2
  28. package/.pi/agents/harness/planning/plan-synthesizer.md +2 -2
  29. package/.pi/agents/harness/planning/review-integrator.md +1 -1
  30. package/.pi/agents/harness/planning/sprint-contract-auditor.md +5 -5
  31. package/.pi/agents/harness/reviewing/evaluator.md +1 -1
  32. package/.pi/agents/harness/running/executor.md +2 -2
  33. package/.pi/agents/harness/sentrux-repair-advisor.md +50 -0
  34. package/.pi/agents/harness/sentrux-steward.md +2 -2
  35. package/.pi/agents/pi-pi/prompt-expert.md +17 -2
  36. package/.pi/auto-commit.json +9 -2
  37. package/.pi/extensions/debate-orchestrator.ts +3 -0
  38. package/.pi/extensions/harness-anchored-edit.ts +7 -9
  39. package/.pi/extensions/harness-ask-user.ts +13 -34
  40. package/.pi/extensions/harness-debate-tools.ts +43 -4
  41. package/.pi/extensions/harness-live-widget.ts +28 -19
  42. package/.pi/extensions/harness-run-context.ts +278 -115
  43. package/.pi/extensions/harness-web-tools.ts +598 -471
  44. package/.pi/extensions/ls-lint-rules-sync.ts +103 -0
  45. package/.pi/extensions/observation-bus.ts +4 -0
  46. package/.pi/extensions/policy-gate.ts +270 -229
  47. package/.pi/extensions/sentrux-rules-sync.ts +2 -0
  48. package/.pi/extensions/soundboard.ts +48 -48
  49. package/.pi/harness/README.md +4 -0
  50. package/.pi/harness/agents.manifest.json +24 -16
  51. package/.pi/harness/agents.policy.yaml +49 -82
  52. package/.pi/harness/docs/adrs/0052-ls-lint-naming-lifecycle.md +45 -0
  53. package/.pi/harness/docs/adrs/0052-sentrux-structured-repair.md +38 -0
  54. package/.pi/harness/docs/adrs/0053-plan-task-clarification-gate.md +39 -0
  55. package/.pi/harness/docs/adrs/0054-harness-native-ask-user.md +40 -0
  56. package/.pi/harness/docs/adrs/0055-auto-commit-coauthor-lifecycle.md +40 -0
  57. package/.pi/harness/docs/adrs/README.md +5 -0
  58. package/.pi/harness/docs/practice-map.md +10 -5
  59. package/.pi/harness/evals/smoke/ls-lint-stub.json +10 -0
  60. package/.pi/harness/evolution/self-healing-rules.json +16 -0
  61. package/.pi/harness/ls-lint/naming.manifest.json +128 -0
  62. package/.pi/harness/sentrux/architecture.manifest.json +1 -1
  63. package/.pi/harness/specs/auto-commit.schema.json +63 -0
  64. package/.pi/harness/specs/ls-lint-manifest-proposal.schema.json +80 -0
  65. package/.pi/harness/specs/ls-lint-signal.schema.json +47 -0
  66. package/.pi/harness/specs/naming-manifest.schema.json +54 -0
  67. package/.pi/harness/specs/plan-task-clarification.schema.json +88 -0
  68. package/.pi/harness/specs/sentrux-diagnostics.schema.json +173 -0
  69. package/.pi/harness/specs/sentrux-repair-plan.schema.json +133 -0
  70. package/.pi/harness/specs/sentrux-report.schema.json +119 -0
  71. package/.pi/harness/specs/sentrux-signal.schema.json +34 -1
  72. package/.pi/lib/agents-policy.d.mts +26 -51
  73. package/.pi/lib/agents-policy.mjs +41 -28
  74. package/.pi/lib/agt/build-evaluation-context.ts +136 -64
  75. package/.pi/lib/ask-user/constants.mjs +3 -0
  76. package/.pi/lib/ask-user/constants.ts +4 -0
  77. package/.pi/lib/ask-user/contracts/glimpse-parse.ts +56 -0
  78. package/.pi/lib/ask-user/contracts/glimpse-payload-build.ts +58 -0
  79. package/.pi/lib/ask-user/contracts/glimpse-payload.ts +38 -0
  80. package/.pi/lib/ask-user/core/questionnaire.ts +74 -0
  81. package/.pi/lib/ask-user/dialog.ts +2 -314
  82. package/.pi/lib/ask-user/fallback.ts +2 -78
  83. package/.pi/lib/ask-user/format.ts +85 -0
  84. package/.pi/lib/ask-user/glimpseui.d.ts +10 -0
  85. package/.pi/lib/ask-user/index.ts +114 -0
  86. package/.pi/lib/ask-user/merge-task-clarification.ts +98 -0
  87. package/.pi/lib/ask-user/policy.mjs +43 -0
  88. package/.pi/lib/ask-user/policy.ts +104 -0
  89. package/.pi/lib/ask-user/presenters/glimpse.ts +130 -0
  90. package/.pi/lib/ask-user/presenters/headless.ts +131 -0
  91. package/.pi/lib/ask-user/presenters/select.ts +60 -0
  92. package/.pi/lib/ask-user/presenters/tui.ts +373 -0
  93. package/.pi/lib/ask-user/presenters/types.ts +13 -0
  94. package/.pi/lib/ask-user/render.ts +40 -9
  95. package/.pi/lib/ask-user/schema.ts +66 -13
  96. package/.pi/lib/ask-user/types.ts +60 -3
  97. package/.pi/lib/ask-user/validate-core.mjs +193 -7
  98. package/.pi/lib/ask-user/validate.ts +53 -34
  99. package/.pi/lib/harness-anchored-edit/package.json +3 -0
  100. package/.pi/lib/harness-artifact-gate.ts +75 -21
  101. package/.pi/lib/harness-auto-commit-config.mjs +321 -0
  102. package/.pi/lib/harness-lens/clients/lsp/client.ts +62 -39
  103. package/.pi/lib/harness-lens/clients/tool-policy.ts +73 -181
  104. package/.pi/lib/harness-lens/index.ts +241 -108
  105. package/.pi/lib/harness-lens/tools/lsp-navigation.ts +10 -8
  106. package/.pi/lib/harness-repair-brief.ts +84 -25
  107. package/.pi/lib/harness-run-context.ts +42 -52
  108. package/.pi/lib/harness-sentrux-parse.mjs +272 -0
  109. package/.pi/lib/harness-sentrux-root.mjs +78 -0
  110. package/.pi/lib/harness-slash-completions.ts +116 -0
  111. package/.pi/lib/harness-spawn-topology.ts +121 -87
  112. package/.pi/lib/harness-subagent-submit-registry.ts +10 -0
  113. package/.pi/lib/harness-subagents-bridge.ts +4 -1
  114. package/.pi/lib/harness-ui-state.ts +95 -48
  115. package/.pi/lib/plan-approval/dialog.ts +5 -0
  116. package/.pi/lib/plan-approval/validate.ts +1 -1
  117. package/.pi/lib/plan-approval-readiness.ts +32 -0
  118. package/.pi/lib/plan-debate-gate.ts +154 -114
  119. package/.pi/lib/plan-task-clarification.ts +158 -0
  120. package/.pi/prompts/harness-auto.md +2 -2
  121. package/.pi/prompts/harness-ls-lint-steward.md +43 -0
  122. package/.pi/prompts/harness-plan.md +63 -13
  123. package/.pi/prompts/harness-review.md +44 -10
  124. package/.pi/prompts/harness-run.md +35 -13
  125. package/.pi/prompts/harness-sentrux-steward.md +2 -2
  126. package/.pi/prompts/harness-setup.md +74 -5
  127. package/.pi/prompts/harness-steer.md +6 -5
  128. package/.pi/prompts/wiki-save.md +5 -4
  129. package/.pi/scripts/README.md +8 -0
  130. package/.pi/scripts/generate-agents-policy-yaml.mjs +14 -2
  131. package/.pi/scripts/harness-auto-commit-bootstrap.mjs +96 -0
  132. package/.pi/scripts/harness-cli-verify.sh +47 -0
  133. package/.pi/scripts/harness-git-churn.mjs +77 -0
  134. package/.pi/scripts/harness-git-commit.mjs +173 -0
  135. package/.pi/scripts/harness-ls-lint-bootstrap.mjs +142 -0
  136. package/.pi/scripts/harness-ls-lint-cli.mjs +184 -0
  137. package/.pi/scripts/harness-seed-project-contracts.mjs +47 -0
  138. package/.pi/scripts/harness-sentrux-diagnostics.mjs +230 -0
  139. package/.pi/scripts/harness-sentrux-report.mjs +256 -0
  140. package/.pi/scripts/harness-verify.mjs +361 -125
  141. package/.pi/scripts/ls-lint-rules-sync.mjs +265 -0
  142. package/.pi/scripts/run-tests.mjs +1 -0
  143. package/.pi/settings.example.json +1 -0
  144. package/.sentrux/rules.toml +1 -1
  145. package/AGENTS.md +2 -0
  146. package/CHANGELOG.md +32 -0
  147. package/README.md +13 -4
  148. package/package.json +13 -6
  149. package/vendor/pi-vcc/src/hooks/before-compact.ts +86 -60
@@ -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.1",
5
- "generated_at": "2026-05-26T07:37:49.163Z",
6
- "policy_sha256": "5a1e71f380df7dde8f6d1f33b366da8bba191689476a6440b3bcdbd776dc617a",
4
+ "package_version": "0.22.0",
5
+ "generated_at": "2026-05-27T12:07:19.624Z",
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,13 +49,21 @@
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": "abbb43da45a2c9c080cd2043384d481a143acaf440e52b657493425218cb951f"
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": "3c9722806338f680db3d165e633a877e087c1485ad74c2b38781d7ba989b48f0"
63
+ },
56
64
  "harness/sentrux-steward": {
57
65
  "path": ".pi/agents/harness/sentrux-steward.md",
58
- "sha256": "d806cbf2c2e211c6b4c95e35893bc250c8a0fab6fae92190766eab16cd091d51"
66
+ "sha256": "019740bd4313426edaa36f7fa96471088731abe616282a6e5109e9c538ae34eb"
59
67
  },
60
68
  "harness/trace-librarian": {
61
69
  "path": ".pi/agents/harness/trace-librarian.md",
@@ -87,7 +95,7 @@
87
95
  },
88
96
  "harness/running/executor": {
89
97
  "path": ".pi/agents/harness/running/executor.md",
90
- "sha256": "1b8aa6e05ffacc8550569465d47cc8525902b53431e36b1c0f973ca633eab450"
98
+ "sha256": "e8710179def62a9adaa63ba5b05c3f36dee95da6fd751ef34be773bbee65a5c2"
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,19 +111,19 @@
103
111
  },
104
112
  "harness/planning/decompose": {
105
113
  "path": ".pi/agents/harness/planning/decompose.md",
106
- "sha256": "944c7221b7bf8e15cd8cf324c3d5ae135c643c6387d8f611cf9128f9ea922963"
114
+ "sha256": "35965f8f8eaa19caee72de1b708178f5ce7bba185f25bed28b9b2ff66c51eaed"
107
115
  },
108
116
  "harness/planning/execution-plan-author": {
109
117
  "path": ".pi/agents/harness/planning/execution-plan-author.md",
110
- "sha256": "3b83edca1eb393941e04213c5cabe0e4b180e52df59169ba24904341a369ead5"
118
+ "sha256": "f0251ac5fb423dda3d6b0b4cff1f63a8e5adfa40806b99454a649c1b0fe3adae"
111
119
  },
112
120
  "harness/planning/hypothesis-validator": {
113
121
  "path": ".pi/agents/harness/planning/hypothesis-validator.md",
114
- "sha256": "ee68aa5c04b903320116cfa21cea8f130199fd21e1fd1a8a747830bf53920fdb"
122
+ "sha256": "70d755da14e146755932c2cb3eb9b828ccd6406b4962d61baeba27c38d9f73dc"
115
123
  },
116
124
  "harness/planning/hypothesis": {
117
125
  "path": ".pi/agents/harness/planning/hypothesis.md",
118
- "sha256": "c974f5381aa562589942e8d52b48bdace6663e10caed6bf5f2fb9ce11d84b0bc"
126
+ "sha256": "5dac1020bc1d5a4100150959d52d983a4860210aa9cbda9120214191c2a17f1d"
119
127
  },
120
128
  "harness/planning/implementation-researcher": {
121
129
  "path": ".pi/agents/harness/planning/implementation-researcher.md",
@@ -123,15 +131,15 @@
123
131
  },
124
132
  "harness/planning/plan-adversary": {
125
133
  "path": ".pi/agents/harness/planning/plan-adversary.md",
126
- "sha256": "305cfa6cd0d4e6493a2dad2f01d8cb0b0dddc06df11f871746f6da7124c9d16b"
134
+ "sha256": "0c9abc088ced31705598baff143df992d435df751b01a9faad9d4af94df16c5a"
127
135
  },
128
136
  "harness/planning/plan-evaluator": {
129
137
  "path": ".pi/agents/harness/planning/plan-evaluator.md",
130
- "sha256": "1a6f465f4d400bcf32b9e82a1032ae789354f264af31c8d358b2a0dde7df81bf"
138
+ "sha256": "f85aba0adbbc7e726a51bfe2d6aa857ab39c8240cd08f06493bc1883ff387c5e"
131
139
  },
132
140
  "harness/planning/plan-synthesizer": {
133
141
  "path": ".pi/agents/harness/planning/plan-synthesizer.md",
134
- "sha256": "5bc3ec109179790c196df1328d362c1485cd5ff9295c31c3de93c050330295da"
142
+ "sha256": "3508126385d338b03f583aaa1f5d75f1cd1fcac8559fed52cd7db11ba1205536"
135
143
  },
136
144
  "harness/planning/planning-context": {
137
145
  "path": ".pi/agents/harness/planning/planning-context.md",
@@ -139,11 +147,11 @@
139
147
  },
140
148
  "harness/planning/review-integrator": {
141
149
  "path": ".pi/agents/harness/planning/review-integrator.md",
142
- "sha256": "3f60c41768cad24150718b4a415b9636b0df6892195986a90fc77e2d0a6be537"
150
+ "sha256": "ea810e3ecf50afe16cf70d12ca3107af94f2272434a72acc5f206bdf7ee89699"
143
151
  },
144
152
  "harness/planning/sprint-contract-auditor": {
145
153
  "path": ".pi/agents/harness/planning/sprint-contract-auditor.md",
146
- "sha256": "402c585168c5510b5f22837d2fb157726b928fa59108a8580437ac6ac08d04f5"
154
+ "sha256": "615feafa48481af0a94b3d6ea9903d58b532575447f5482e60c65e6eb780bfc0"
147
155
  },
148
156
  "harness/planning/stack-researcher": {
149
157
  "path": ".pi/agents/harness/planning/stack-researcher.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:
@@ -22,10 +17,11 @@ kinds:
22
17
  - write
23
18
  - edit
24
19
  - bash
20
+ - grep
21
+ - find
25
22
  - ls
26
- # Subprocess bundle (governance + anchored read/edit + lens) — not full .pi/extensions (parent phase hooks).
23
+ extensions: true
27
24
  extension_bundle: executor
28
- extensions: false
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,6 +117,36 @@ 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:
@@ -171,7 +181,6 @@ agents:
171
181
  harness/planning/decompose:
172
182
  kind: planner
173
183
  tools_add:
174
- - bash
175
184
  - submit_decomposition_brief
176
185
  - submit_human_required
177
186
  extensions: false
@@ -196,50 +205,14 @@ agents:
196
205
  harness/planning/hypothesis:
197
206
  kind: planner
198
207
  tools_add:
199
- - bash
200
208
  - submit_hypothesis_brief
201
209
  extensions: false
202
210
  max_turns: 14
203
211
  thinking: medium
204
212
  submit_tool: submit_hypothesis_brief
205
- harness/web-retrieval/web-query-expander:
206
- kind: other
207
- extensions: false
208
- max_turns: 8
209
- thinking: low
210
- harness/web-retrieval/web-query-expander-fast:
211
- kind: other
212
- extensions: false
213
- max_turns: 5
214
- thinking: off
215
- harness/web-retrieval/web-gap-analyzer:
216
- kind: other
217
- extensions: false
218
- max_turns: 8
219
- thinking: low
220
- harness/web-retrieval/web-answerer:
221
- kind: other
222
- extensions: false
223
- max_turns: 12
224
- thinking: medium
225
- harness/web-retrieval/web-summarizer:
226
- kind: other
227
- extensions: false
228
- max_turns: 6
229
- thinking: low
230
- harness/web-retrieval/web-criteria-verifier:
231
- kind: other
232
- extensions: false
233
- max_turns: 14
234
- thinking: medium
235
213
  harness/planning/implementation-researcher:
236
214
  kind: planner
237
215
  tools_add:
238
- - bash
239
- - web_search
240
- - web_fetch
241
- - web_find_similar
242
- - web_contents
243
216
  - submit_implementation_research
244
217
  extensions: false
245
218
  max_turns: 14
@@ -271,7 +244,6 @@ agents:
271
244
  harness/planning/planning-context:
272
245
  kind: planner
273
246
  tools_add:
274
- - bash
275
247
  - submit_planning_context
276
248
  extensions: false
277
249
  max_turns: 12
@@ -296,11 +268,6 @@ agents:
296
268
  harness/planning/stack-researcher:
297
269
  kind: planner
298
270
  tools_add:
299
- - bash
300
- - web_search
301
- - web_fetch
302
- - web_find_similar
303
- - web_contents
304
271
  - submit_stack_brief
305
272
  extensions: false
306
273
  max_turns: 16
@@ -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)
@@ -38,6 +38,11 @@ Team-shared ADRs for the ultimate-pi harness live under `.pi/harness/docs/adrs/`
38
38
  | [0049](0049-agents-policy-manifest.md) | agents.policy.yaml SSOT + native discovery | Accepted |
39
39
  | [0050](0050-agentic-web-retrieval-stack.md) | Agentic Web Retrieval Stack (WRS) | Accepted |
40
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 |
41
46
 
42
47
  ## Practice map
43
48
 
@@ -23,7 +23,7 @@ See also: [ADRs](adrs/README.md), [ADR 0040](adrs/0040-practice-grounded-orchest
23
23
  1. **Parallelism law** — Parallel `subagent` `tasks` only when outputs are independent inputs to a later merge (implementation ∥ stack research; inspector ∥ adversary in `parallel_probes`). Never parallelize decompose ∥ hypothesis.
24
24
  2. **Two-pizza cap per batch** — Max 2 research lanes, max 1 optional `planning-context` subagent, max 1 executor, max 1 debate lane agent per `subagent` call (plan-verify may use 2 probes + integrator in separate batches).
25
25
  3. **No redundant thinkers** — If artifact X exists, downstream agents read it; they do not re-derive (e.g. decompose after `planning-context.yaml`).
26
- 4. **Sequential dependency chain** — planning context → problem framing / decompose → hypothesis → research → synthesis/author → DAG → plan-verify → approve → execute → review → (steer)* → policy.
26
+ 4. **Sequential dependency chain** — task clarification → planning context → problem framing / decompose → hypothesis → research → synthesis/author → DAG → plan-verify → approve → execute → review → (steer)* → policy.
27
27
  5. **Plan-verify (agent-native)** — For `fast`/`standard`, parallel probes then integrator; parent is chair, not participant. Threaded debate remains for `full` until parity.
28
28
  6. **Tool intelligence** — Parent chooses graphify, sg, ccc; subprocesses optional. **Path-first:** disk is source of truth; tool args are pointers (ADR 0043).
29
29
 
@@ -31,8 +31,9 @@ See also: [ADRs](adrs/README.md), [ADR 0040](adrs/0040-practice-grounded-orchest
31
31
 
32
32
  | Phase | Practice | Agent translation | Actor | Spawn |
33
33
  |-------|----------|---------------------|-------|-------|
34
- | 0 | Tooling / fast feedback | Pre-index once | Parent + `ccc` | Automatic |
35
- | 1 | Reconnaissance before WBS | **ContextPack** on disk | Parent tools or optional `planning-context` | No default subprocess |
34
+ | 0 | Task clarification | Task contract on disk; code + web OK | Parent + `ask_user` | No subprocess |
35
+ | 0a | Tooling / fast feedback | Pre-index once | Parent + `ccc` | Automatic |
36
+ | 1 | Reconnaissance before WBS | **ContextPack** on disk | Parent tools or optional `planning-context` | After task-clarification gate |
36
37
  | 2a | Problem framing / lakes | Lake outcomes, not ticket tree | `decompose` or synthesizer section | Sequential after context gate |
37
38
  | 2b | Hypothesis-driven approach | Falsifiable claim grounded in framing | `hypothesis` or synthesizer | After `artifacts/decomposition.yaml` |
38
39
  | 3.5 | Spike / external research | Paths in research brief | Researchers optional | Artifacts required |
@@ -41,6 +42,8 @@ See also: [ADRs](adrs/README.md), [ADR 0040](adrs/0040-practice-grounded-orchest
41
42
  | 4c | Deterministic quality gate | Script, not LLM | `validate-plan-dag.mjs` | Parent; hard stop |
42
43
  | 4d | Tailor process to risk | Probe depth, not meeting count | `harness_plan_debate_eligibility` | Pre plan-verify |
43
44
  | 4e | Architectural intent | Fitness-function spec | `harness/sentrux-steward` optional | When structural risk |
45
+ | 4e″ | Structural repair plan | OSS diagnostics → actions | `harness/sentrux-repair-advisor` | `/harness-review` when violations/degraded |
46
+ | 4e′ | Naming intent | Filename convention spec | `harness/ls-lint-steward` optional | New paths/extensions |
44
47
  | 5 | Plan-verify (Review Gate) | Parallel probes + integrator | Debate cast / probes | `parallel_probes` or threaded |
45
48
  | 6 | Baseline + approve | Path-only `approve_plan` | Parent | `approve_plan`, `create_plan` |
46
49
 
@@ -69,9 +72,9 @@ See also: [ADRs](adrs/README.md), [ADR 0040](adrs/0040-practice-grounded-orchest
69
72
  | Step | Practice | Agent translation | Actor |
70
73
  |------|----------|-------------------|-------|
71
74
  | Gate | Change control | `plan_ready` required | Parent |
72
- | Pre-work | Fitness baseline | `sentrux gate --save` | Parent |
75
+ | Pre-work | Fitness baseline | `sentrux gate --save` + ls-lint pre-check | Parent |
73
76
  | Work | Single implementer | `executor_strategy` | `harness/running/executor` |
74
- | Post-work | Observation | `sentrux check` / signal artifact | Parent |
77
+ | Post-work | Observation | `harness-sentrux-report.mjs` + diagnostics; ls-lint signal | Parent |
75
78
  | Handoff | Generator–evaluator | `submit_executor_handoff` | Executor |
76
79
  | Next | Always verify | **`/harness-review`** (not replan on blocked) | Parent routing |
77
80
 
@@ -91,6 +94,7 @@ See also: [ADRs](adrs/README.md), [ADR 0040](adrs/0040-practice-grounded-orchest
91
94
  | Phase | Practice | Agent translation | Actor |
92
95
  |-------|----------|-------------------|-------|
93
96
  | 1 | Automated QC + fitness | Deterministic first | Parent scripts |
97
+ | 1b | Structural repair plan | OSS diagnostics → actions | `sentrux-repair-advisor` |
94
98
  | 2 | Measure vs plan | Benchmark on disk | `evaluator` benchmark |
95
99
  | 3 | Policy audit | Verdict (no fail-fast skip) | `evaluator` verdict |
96
100
  | 4 | Red team | Tiered: full attempt 1, lite 2+ steer | `adversary` |
@@ -111,6 +115,7 @@ See also: [ADRs](adrs/README.md), [ADR 0040](adrs/0040-practice-grounded-orchest
111
115
 
112
116
  ## Anti-patterns
113
117
 
118
+ - **Do not** write `planning-context.yaml` or spawn planning subagents before `artifacts/task-clarification.yaml` is `ready` (enforced in `write_harness_yaml`, spawn topology, `approve_plan`).
114
119
  - **Do not** spawn `decompose` and `hypothesis` in the same parallel `tasks` batch.
115
120
  - **Do not** run `graphify query` in `decompose` when planning-context coverage is ok (ADR 0041).
116
121
  - **Do not** parallelize threaded debate lanes in one batch (except `parallel_probes` inspector ∥ adversary per ADR 0042).