@1aboveio/skills 1.0.10 → 1.0.11

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 (213) hide show
  1. package/.codex-plugin/plugin.json +1 -1
  2. package/.codex-plugin/resources.json +297 -216
  3. package/README.md +3 -3
  4. package/package.json +10 -8
  5. package/skills/app-dev/airflow/SKILL.md +1 -1
  6. package/skills/app-dev/android-foundation/SKILL.md +35 -37
  7. package/skills/app-dev/android-foundation/references/delivery-focus.md +4 -2
  8. package/skills/app-dev/android-foundation/references/feature-work.md +50 -0
  9. package/skills/app-dev/android-foundation/references/setup.md +24 -9
  10. package/skills/app-dev/android-foundation/references/workspace.md +81 -0
  11. package/skills/app-dev/android-foundation/scripts/workspace-runtime/bin/workspaces.mjs +52 -0
  12. package/skills/app-dev/android-foundation/scripts/workspace-runtime/native-workspace.mjs +239 -0
  13. package/skills/app-dev/android-foundation/scripts/workspace-runtime/workspace-lifecycle.mjs +2154 -0
  14. package/skills/app-dev/app-debug/SKILL.md +1 -1
  15. package/skills/app-dev/better-auth/SKILL.md +1 -1
  16. package/skills/app-dev/data-catalog/SKILL.md +1 -1
  17. package/skills/app-dev/data-quality/SKILL.md +1 -1
  18. package/skills/app-dev/ios-foundation/SKILL.md +15 -10
  19. package/skills/app-dev/ios-foundation/references/setup.md +25 -9
  20. package/skills/app-dev/ios-foundation/references/workspace.md +82 -0
  21. package/skills/app-dev/ios-foundation/scripts/workspace-runtime/bin/workspaces.mjs +52 -0
  22. package/skills/app-dev/ios-foundation/scripts/workspace-runtime/native-workspace.mjs +239 -0
  23. package/skills/app-dev/ios-foundation/scripts/workspace-runtime/workspace-lifecycle.mjs +2154 -0
  24. package/skills/app-dev/monorepo/SKILL.md +1 -1
  25. package/skills/app-dev/nextjs-fullstack/SKILL.md +1 -1
  26. package/skills/app-dev/prisma-setup/SKILL.md +1 -1
  27. package/skills/app-dev/pyspark/SKILL.md +1 -1
  28. package/skills/app-dev/python-backend/SKILL.md +1 -1
  29. package/skills/app-dev/shadcn/SKILL.md +1 -1
  30. package/skills/app-dev/zod-v4/SKILL.md +1 -1
  31. package/skills/cicd/cloud-build/SKILL.md +1 -1
  32. package/skills/cicd/cloud-debug/SKILL.md +1 -1
  33. package/skills/cicd/cloud-deploy/SKILL.md +1 -1
  34. package/skills/cicd/docker/SKILL.md +1 -1
  35. package/skills/cicd/github-actions/SKILL.md +1 -1
  36. package/skills/cicd/github-flow/SKILL.md +1 -1
  37. package/skills/cicd/google-cloud/SKILL.md +1 -1
  38. package/skills/cicd/mergify/SKILL.md +1 -1
  39. package/skills/cicd/podman/SKILL.md +1 -1
  40. package/skills/content/article-review/SKILL.md +1 -1
  41. package/skills/content/article-to-image/SKILL.md +1 -1
  42. package/skills/content/flowchart-svg/SKILL.md +1 -1
  43. package/skills/content/image-gen/SKILL.md +1 -1
  44. package/skills/content/mermaid/SKILL.md +1 -1
  45. package/skills/content/wechat-article-writer/SKILL.md +1 -1
  46. package/skills/content/wechat-publisher/SKILL.md +1 -1
  47. package/skills/content/wechat-search/SKILL.md +1 -1
  48. package/skills/content/xai-search/SKILL.md +1 -1
  49. package/skills/core/distill-writing/SKILL.md +3 -3
  50. package/skills/core/distill-writing/references/extraction.md +1 -1
  51. package/skills/core/doc-to-md/SKILL.md +1 -1
  52. package/skills/core/editorial-review/SKILL.md +82 -12
  53. package/skills/core/editorial-review/references/checklist.md +26 -1
  54. package/skills/core/house-style/SKILL.md +8 -3
  55. package/skills/core/house-style/references/analytical-reporting.md +123 -0
  56. package/skills/core/house-style/references/analytical-writing-patterns.md +79 -0
  57. package/skills/core/house-style/references/analytical-writing-research.md +129 -0
  58. package/skills/core/{write-doc → house-style}/references/bilingual.md +7 -5
  59. package/skills/core/house-style/references/definitions-and-metrics.md +86 -0
  60. package/skills/core/house-style/references/document-workflow.md +193 -0
  61. package/skills/core/house-style/references/initialization.md +66 -0
  62. package/skills/core/house-style/references/persistence.md +9 -4
  63. package/skills/core/house-style/references/rules.md +11 -4
  64. package/skills/core/house-style/scripts/init-guidance.mjs +213 -0
  65. package/skills/core/house-style/templates/analytical-report.md +54 -0
  66. package/skills/core/house-style/templates/gap-analysis.md +1 -1
  67. package/skills/core/plain-language/SKILL.md +2 -2
  68. package/skills/core/polish-cn/SKILL.md +9 -2
  69. package/skills/core/reg-parser/SKILL.md +3 -3
  70. package/skills/core/terminology/SKILL.md +8 -4
  71. package/skills/core/write-doc/SKILL.md +40 -151
  72. package/skills/core/write-report/SKILL.md +129 -0
  73. package/skills/core/{write-doc → write-report}/references/compliance-reports.md +4 -4
  74. package/skills/engineering/better-review/SKILL.md +37 -37
  75. package/skills/engineering/better-review/references/passes.md +35 -41
  76. package/skills/engineering/better-review/references/result.md +10 -9
  77. package/skills/engineering/e2e-test/SKILL.md +17 -17
  78. package/skills/engineering/e2e-test/references/authoring/playwright-config.md +11 -13
  79. package/skills/engineering/e2e-test/references/presentation-sweep.md +7 -7
  80. package/skills/engineering/e2e-test/references/reviewing.md +9 -11
  81. package/skills/engineering/e2e-test/references/route-manifest.md +1 -1
  82. package/skills/engineering/engineering/SKILL.md +124 -0
  83. package/skills/engineering/engineering/references/engineering-conventions.md +32 -0
  84. package/skills/engineering/engineering/references/feature-delivery.md +8 -0
  85. package/skills/engineering/engineering/references/init-scope.md +37 -0
  86. package/skills/engineering/engineering/scripts/init.mjs +160 -0
  87. package/skills/engineering/{contributing → engineering}/scripts/persist-conventions.mjs +1 -1
  88. package/skills/engineering/engineering-runtime/SKILL.md +1 -1
  89. package/skills/engineering/engineering-runtime/coherence/workflow.json +19 -19
  90. package/skills/engineering/engineering-runtime/scripts/workflow-policy.mjs +1 -1
  91. package/skills/engineering/ensure-coverage/SKILL.md +22 -109
  92. package/skills/engineering/ensure-coverage/references/breadth/coverage-ledger.md +7 -5
  93. package/skills/engineering/ensure-coverage/references/breadth/surface-baseline.md +4 -4
  94. package/skills/engineering/ensure-coverage/references/breadth/surface-discovery.md +3 -3
  95. package/skills/engineering/ensure-coverage/references/depth/characterization.md +4 -65
  96. package/skills/engineering/ensure-coverage/references/depth/grading.md +5 -7
  97. package/skills/engineering/ensure-coverage/references/depth/mock-policy.md +6 -12
  98. package/skills/engineering/ensure-coverage/references/enforcement/ci-contract.md +1 -1
  99. package/skills/engineering/ensure-coverage/references/presentation/axis.md +6 -6
  100. package/skills/engineering/ensure-coverage/references/process/audit-mode.md +7 -23
  101. package/skills/engineering/ensure-coverage/references/process/output-template.md +18 -133
  102. package/skills/engineering/ensure-coverage/references/process/test-strategy.md +7 -12
  103. package/skills/engineering/ensure-coverage/scripts/README.md +12 -4
  104. package/skills/engineering/golden-path/SKILL.md +1 -1
  105. package/skills/engineering/harness-runtime/SKILL.md +3 -1
  106. package/skills/engineering/harness-runtime/bin/workspaces.mjs +52 -0
  107. package/skills/engineering/harness-runtime/native-workspace.mjs +239 -0
  108. package/skills/engineering/harness-runtime/references/workspaces.md +78 -0
  109. package/skills/engineering/harness-runtime/workspace-lifecycle.mjs +2154 -0
  110. package/skills/engineering/resolve-issues/SKILL.md +40 -61
  111. package/skills/engineering/resolve-issues/references/ci.md +13 -3
  112. package/skills/engineering/resolve-issues/references/delivery-progress.md +4 -3
  113. package/skills/engineering/resolve-issues/references/done.md +11 -2
  114. package/skills/engineering/resolve-issues/references/expire.md +9 -2
  115. package/skills/engineering/resolve-issues/references/implementation.md +33 -17
  116. package/skills/engineering/resolve-issues/references/preflight.md +3 -1
  117. package/skills/engineering/resolve-issues/references/principles.md +52 -0
  118. package/skills/engineering/resolve-issues/references/review.md +25 -15
  119. package/skills/engineering/resolve-issues/references/task-plan.md +64 -27
  120. package/skills/engineering/resolve-issues/references/workspaces.md +164 -0
  121. package/skills/engineering/resolve-issues/scripts/cleanup-runs.mjs +185 -317
  122. package/skills/engineering/resolve-issues/scripts/next-actions.mjs +44 -7
  123. package/skills/engineering/resolve-issues/scripts/rehydrate.mjs +36 -2
  124. package/skills/engineering/resolve-issues/scripts/review-verdict.mjs +9 -8
  125. package/skills/engineering/resolve-issues/scripts/workspace-lifecycle.mjs +1 -0
  126. package/skills/engineering/resolve-release/SKILL.md +1 -1
  127. package/skills/engineering/rush-issues/SKILL.md +7 -5
  128. package/skills/engineering/rush-release/SKILL.md +1 -1
  129. package/skills/engineering/test-quality/SKILL.md +19 -4
  130. package/skills/engineering/test-quality/references/lint.md +1 -1
  131. package/skills/engineering/test-quality/references/principles.md +2 -2
  132. package/skills/engineering/test-quality/references/testing-conventions.md +1 -1
  133. package/skills/risk-compliance/compliance-audit/SKILL.md +4 -8
  134. package/skills/risk-compliance/compliance-audit/references/audience-and-reports.md +12 -0
  135. package/skills/risk-compliance/contract-compare/SKILL.md +17 -1
  136. package/skills/risk-compliance/contract-review/SKILL.md +6 -1
  137. package/skills/risk-compliance/contract-review/references/report-stage.md +17 -0
  138. package/skills/risk-compliance/doc-authenticity/SKILL.md +11 -1
  139. package/skills/risk-compliance/fraud-detection/LICENSE +3 -0
  140. package/skills/risk-compliance/fraud-detection/SKILL.md +148 -0
  141. package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/archetypes/first-party-fraud.md +3 -2
  142. package/skills/risk-compliance/fraud-detection/references/archetypes/third-party-fraud.md +47 -0
  143. package/skills/risk-compliance/fraud-detection/references/collection-payout-features.md +151 -0
  144. package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/contexts/bank-transfer.md +4 -3
  145. package/skills/risk-compliance/fraud-detection/references/contexts/card-payment.md +70 -0
  146. package/skills/risk-compliance/fraud-detection/references/contexts/payment-collection.md +34 -0
  147. package/skills/risk-compliance/fraud-detection/references/contexts/payout.md +34 -0
  148. package/skills/risk-compliance/fraud-detection/references/enrichment.md +74 -0
  149. package/skills/risk-compliance/fraud-detection/references/entities.md +48 -0
  150. package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/feature-engineering.md +69 -33
  151. package/skills/risk-compliance/fraud-detection/references/feature-sql.md +150 -0
  152. package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/report-rationale.md +4 -2
  153. package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/report-template.md +45 -23
  154. package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/review-checklist.md +60 -20
  155. package/skills/risk-compliance/fraud-detection/references/workflow.md +216 -0
  156. package/skills/risk-compliance/fraud-detection/release-check.mjs +95 -0
  157. package/skills/risk-compliance/payment-analysis/SKILL.md +36 -17
  158. package/skills/risk-compliance/payment-analysis/references/auth-rate-actions.md +2 -2
  159. package/skills/risk-compliance/payment-analysis/references/report-template.md +10 -2
  160. package/skills/risk-compliance/payment-analysis/references/visualization.md +11 -1
  161. package/skills/risk-compliance/portfolio-payment-analysis/LICENSE +3 -0
  162. package/skills/risk-compliance/portfolio-payment-analysis/SKILL.md +170 -0
  163. package/skills/risk-compliance/portfolio-payment-analysis/references/identity-and-reconciliation.md +46 -0
  164. package/skills/risk-compliance/portfolio-payment-analysis/references/metrics-and-reporting.md +170 -0
  165. package/skills/risk-compliance/portfolio-payment-analysis/references/risk-history.md +89 -0
  166. package/skills/risk-compliance/portfolio-payment-analysis/release-check.mjs +95 -0
  167. package/skills/risk-compliance/portfolio-payment-analysis/scripts/analyze.py +636 -0
  168. package/skills/risk-compliance/portfolio-payment-analysis/scripts/build_report.py +386 -0
  169. package/skills/risk-compliance/portfolio-payment-analysis/scripts/comparison_charts.py +425 -0
  170. package/skills/risk-compliance/portfolio-payment-analysis/scripts/csv_export.py +52 -0
  171. package/skills/risk-compliance/portfolio-payment-analysis/scripts/render.py +160 -0
  172. package/skills/risk-compliance/portfolio-payment-analysis/scripts/risk_history.py +435 -0
  173. package/skills/risk-compliance/similar-domain/SKILL.md +9 -4
  174. package/skills/risk-compliance/tld-detection/SKILL.md +124 -239
  175. package/skills/risk-compliance/tld-detection/agents/openai.yaml +1 -1
  176. package/skills/risk-compliance/tld-detection/references/clean.md +18 -51
  177. package/skills/risk-compliance/tld-detection/references/fx-conversion.md +56 -219
  178. package/skills/risk-compliance/tld-detection/references/metric-contract.md +109 -0
  179. package/skills/risk-compliance/tld-detection/references/pattern.md +99 -0
  180. package/skills/risk-compliance/tld-detection/references/report-template.md +49 -272
  181. package/skills/risk-compliance/tld-detection/scripts/detect_ladders.py +46 -13
  182. package/skills/risk-compliance/tld-detection/scripts/detect_patterns.py +346 -0
  183. package/skills/risk-compliance/tld-detection/scripts/detect_streams.py +51 -19
  184. package/skills/risk-compliance/tld-detection/scripts/profile_groups.py +109 -0
  185. package/skills/risk-compliance/tld-detection/scripts/render_charts.py +218 -0
  186. package/skills/risk-compliance/tld-detection/scripts/tld_common.py +243 -0
  187. package/skills/engineering/contributing/SKILL.md +0 -70
  188. package/skills/risk-compliance/fraud-analysis/SKILL.md +0 -114
  189. package/skills/risk-compliance/fraud-analysis/references/archetypes/third-party-fraud.md +0 -27
  190. package/skills/risk-compliance/fraud-analysis/references/contexts/card-payment.md +0 -30
  191. package/skills/risk-compliance/fraud-analysis/references/contexts/payment-collection.md +0 -20
  192. package/skills/risk-compliance/fraud-analysis/references/contexts/payout.md +0 -20
  193. package/skills/risk-compliance/fraud-analysis/references/workflow.md +0 -175
  194. package/skills/risk-compliance/tld-detection/references/chinese-polish.md +0 -55
  195. package/skills/risk-compliance/tld-detection/references/clustering.md +0 -235
  196. package/skills/risk-compliance/tld-detection/references/decision.md +0 -189
  197. package/skills/risk-compliance/tld-detection/references/streams.md +0 -141
  198. package/skills/risk-compliance/tld-detection/references/terminology.md +0 -95
  199. package/skills/risk-compliance/tld-detection/references/workflow.md +0 -95
  200. /package/skills/{engineering/contributing → core/write-report}/LICENSE +0 -0
  201. /package/skills/core/{write-doc → write-report}/references/reports/audit-report-template.md +0 -0
  202. /package/skills/core/{write-doc → write-report}/references/reports/external-assessment-template.md +0 -0
  203. /package/skills/core/{write-doc → write-report}/references/reports/management-report-template.md +0 -0
  204. /package/skills/core/{write-doc → write-report}/references/reports/vars-report-template.md +0 -0
  205. /package/skills/{engineering/contributing → core/write-report}/release-check.mjs +0 -0
  206. /package/skills/{risk-compliance/fraud-analysis → engineering/engineering}/LICENSE +0 -0
  207. /package/skills/engineering/{contributing → engineering}/references/tracker-conventions.md +0 -0
  208. /package/skills/{risk-compliance/fraud-analysis → engineering/engineering}/release-check.mjs +0 -0
  209. /package/skills/engineering/{contributing → engineering}/scripts/persist-conventions-core.mjs +0 -0
  210. /package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/archetypes/authorized-payment-scam.md +0 -0
  211. /package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/mechanisms/account-takeover.md +0 -0
  212. /package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/taxonomy.md +0 -0
  213. /package/skills/risk-compliance/{fraud-analysis → fraud-detection}/references/terminology.md +0 -0
@@ -8,16 +8,25 @@ dependencies:
8
8
  - better-review
9
9
  - golden-path
10
10
  - harness-runtime
11
- release-version: 0.44.1
11
+ release-version: 0.45.0
12
12
  ---
13
13
  **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
14
14
  # Resolve issues
15
15
 
16
+ Before substantive work, if `update_todo` is advertised in this turn, capture the
17
+ known objective with `update_todo({outcome:{objective:<objective>}})`; include only
18
+ known, useful criteria or boundaries. No checklist is required. The interface is
19
+ optional and must never be enabled as a precondition. Read the source requirements
20
+ as authoritative; later user corrections take precedence. A reminder is not
21
+ permission to continue. See [checkpoints](references/task-plan.md#checkpoints).
22
+
16
23
  ## Goal
17
24
 
18
- **Resolve the spec's issues autonomously, in the shortest wall-clock time, at the bar the spec
19
- already sets: every PR reviewed and green on required CI.** Make the decisions that get there;
20
- the principles are guidelines, and every rule serves the goal: when one would slow the run
25
+ **Deliver the spec's business outcomes autonomously, in the shortest wall-clock time, at the bar the spec
26
+ already sets: every PR reviewed and green on required CI.** A working end-to-end feature is progress;
27
+ more guards, tests, frameworks, or gates are not progress by themselves. Supporting work belongs only
28
+ when the outcome needs it, a binding requirement calls for it, or the change introduces a concrete defect.
29
+ Make the decisions that get there; the principles are guidelines, and every rule serves the goal: when one would slow the run
21
30
  without protecting the bar, take the faster path and record why in `decisions`. The bar is the
22
31
  human's criteria. The only constraints are the plan's [standingOrders](references/task-plan.md#standing-orders) and the
23
32
  invocation's settings (implementer pin, target, merge and scheduler mode); any other limit, wherever
@@ -31,49 +40,9 @@ what did not pass).
31
40
 
32
41
  ## Principles
33
42
 
34
- Guidelines, not restrictions; put them in every brief. When two pull apart, take the one that
35
- ships sooner at the same bar.
36
-
37
- 1. **Deliver when the agreed plan and required CI pass.**
38
- Example: the plan names the charge unit tests and typecheck; both pass and
39
- CI is green, so mark the PR ready. Do not also run the emulator journey
40
- "to be safe".
41
- 2. **Never add work the plan does not name.**
42
- Example: a check flaked: fix its cause (principle 11), and write no incident disposition, failure
43
- fingerprint, or review of either. A problem outside the unit goes to the
44
- [dropbox](references/dropbox.md). A choice (spec meaning, design, approach) is no
45
- failure: answer it, never retry it ([expire.md](references/expire.md#decide-before-you-defer)).
46
- 3. **Add a check only for a concrete doubt that could change delivery.**
47
- Example: "the fix changed refund rounding; if `refund.test.ts` fails, the
48
- code must change", so run it. "More coverage would be reassuring": skip.
49
- 4. **Reuse a passing result until what it tested changes.**
50
- Example: a commit that only rewords its message keeps every result. A
51
- fix to `refund.ts` reruns the refund tests, not the whole plan.
52
- 5. **Push early; CI is the full test.**
53
- Example: push each fix to the draft PR once its focused tests pass,
54
- without asking first and without running the full suite locally.
55
- 6. **Carry a HEAD pushed after a passing review; give every other new HEAD the tier `better-review`'s scope script picks.**
56
- Example: a CI fix or a merge of main after a pass: `--carry`, no
57
- reviewer. A P0/P1 fix: delta; one that rewrote most of the PR: full.
58
- 7. **Coordinate first.** On every completion notice, read fresh capacity and run `scripts/next-actions.mjs --run <run>`
59
- with the [live capacity arguments](references/implementation.md#live-capacity); do everything it prints
60
- before resuming your own work; keep a [heartbeat](references/expire.md#waits).
61
- Example: mid-way through an emulator debug, a notice says `impl-1322`
62
- finished; the script prints `start-review 1322` and `fill-slot 1323`, so
63
- start both, then return to the debug. On a new invocation, call it first with `--resume`.
64
- Only it decides the run is done: end a turn only when it prints nothing due, only `wait`, or `finish`.
65
- 8. **Run as much at once as the plan and live host capacity allow.** Start every `fill-slot` before your own work;
66
- never hold a ready unit back; link a unit only to what its change needs.
67
- Example: a slot is free while you debug CI: start the ready unit, then debug. Five slices need one helper: the first builds it, the rest depend on it.
68
- 9. **Record what remains once, in the issue that owns it.**
69
- Example: the release device campaign is still to run, so add one comment
70
- on the release issue and link it from the handback. Never report "device
71
- tests passed" from a unit build.
72
- 10. **Never block on the human.** After the approval, take the [automatic answer](references/preflight.md#never-block-on-the-human)
73
- wherever you could ask or wait, record it, and keep going; a later message changes course from there.
74
- 11. **Fix the root cause.** Find why a failure happens and fix that, in the plan or outside it ([expire.md](references/expire.md#infrastructure-failures));
75
- never only its symptom (a blind retry, a longer timeout, a skip, a guessed fix sent to CI: reproduce a failed journey
76
- with `proof.suite.local` first). Defer only a [human-only](references/expire.md#human-only) cause.
43
+ Read the [delivery principles](references/principles.md) before substantive work
44
+ and include them verbatim in every worker brief. They are guidelines, not
45
+ restrictions: when two pull apart, take the one that ships sooner at the same bar.
77
46
 
78
47
  `/rush-issues` runs this workflow with every answer defaulted ([shortcut mode](references/preflight.md#shortcut-mode)).
79
48
 
@@ -87,7 +56,8 @@ preflight: ready label -> model fills -> plan draft
87
56
  -> exploration -> size check (only scope or an open question holds a unit, with a split)
88
57
  -> one approval (implementer, target branch, merge mode, scheduler mode, plan)
89
58
  -> schedule runnable units within live host capacity:
90
- implement -> first coherent commit: draft PR (CI starts) once parents' PRs are open
59
+ prepare a unit's workspace when its first worker is admitted (never all units up front)
60
+ -> implement -> first coherent commit: draft PR (CI starts) once parents' PRs are open
91
61
  (stack, chain) or merged (wait) -> validate -> self-review -> fix and re-validate
92
62
  -> when a unit's code is done, for that unit:
93
63
  rebase on its parent (stack, chain) or the target (wait)
@@ -98,8 +68,8 @@ preflight: ready label -> model fills -> plan draft
98
68
  -> CI red: fix, push; after a passing review, carry it (no reviewer)
99
69
  -> review passed and CI green on one HEAD: mark ready
100
70
  -> autonomous: merge (through the queue; stack, chain: enqueue a line's deepest PR); supervised: hand back merge-ready
101
- -> after a merge, optional: read-only warehouse canary on that commit
102
- -> done: every PR merged (autonomous) or handed back merge-ready (supervised)
71
+ -> after a merge, clean that unit's workspace and resources (retained = report it); optional: read-only warehouse canary on that commit
72
+ -> done: every PR merged (autonomous) or handed back merge-ready (supervised), every delivered environment cleaned or retained with a reason
103
73
  ```
104
74
 
105
75
  Read each procedure right before its stage; never substitute your own.
@@ -111,6 +81,7 @@ Read each procedure right before its stage; never substitute your own.
111
81
  | Exploration (preflight step 4) | [references/exploration.md](references/exploration.md) |
112
82
  | Implementation loop and opening each PR | [references/implementation.md](references/implementation.md) |
113
83
  | Read-only warehouse canary | [references/canary.md](references/canary.md) |
84
+ | Owned workspaces: plan, prepare, cleanup, recover, inventory | [references/workspaces.md](references/workspaces.md) |
114
85
  | Independent review | [references/review.md](references/review.md) |
115
86
  | Routing small problems; posting them at the end | [references/dropbox.md](references/dropbox.md) |
116
87
  | CI, queue, and merge | [references/ci.md](references/ci.md) |
@@ -128,7 +99,7 @@ Read each procedure right before its stage; never substitute your own.
128
99
  ([Done](#done)); an infrastructure or external blocker becomes a tree issue the units wait on
129
100
  ([expire.md](references/expire.md#infrastructure-failures)); a unit that only waits on another unit is not
130
101
  started (`pending`), never `blocked`; what stays blocked ends deferred on its owning issue, never done.
131
- - **Your role.** Coordinate first ([principle 7](#principles)); between notices you may do bounded work
102
+ - **Your role.** Coordinate first ([principle 7](references/principles.md)); between notices you may do bounded work
132
103
  yourself: reproduce a failing browser or emulator journey, investigate an infrastructure failure, run a short
133
104
  check. Leave code changes to workers so your attention stays on scheduling, and record each worker as the
134
105
  unit's `workerKind` (`implement`, `fix`, `review`). Exploration continues the run's one explorer. After a context compaction, read this file in
@@ -159,7 +130,7 @@ infrastructure, and report verified behavior. Full acceptance and required CI st
159
130
  ## Every brief contains
160
131
 
161
132
  Use the full [brief checklist](references/delivery-progress.md#every-brief-contains),
162
- including the Goal and Principles verbatim, checkpoint history and result contract.
133
+ including the Goal and [Principles](references/principles.md) verbatim, checkpoint history and result contract.
163
134
  Treat a missing or unreadable result as incomplete; resume a dead spawn once in its workspace.
164
135
 
165
136
  ## Workflow
@@ -181,13 +152,15 @@ Follow [preflight.md](references/preflight.md):
181
152
  5. **Size check:** run `size-check.mjs` (exit 0; read `verdict`). On `hold` or `stop`, hold the listed
182
153
  units (their dependents wait, not started) and draft their splits (yours when none is drafted); on `exploration-unfinished`, continue the explorer.
183
154
  6. **Approval:** ask once for implementer, target, merge mode, scheduler mode, and plan;
184
- record the answers and create workspaces.
155
+ record the answers; plan each unit's branch, workspace, base, and lifecycle
156
+ intent, and prepare a workspace only when its first worker is admitted
157
+ ([workspaces.md](references/workspaces.md#prepare-at-admission-once)).
185
158
  In shortcut mode, take the defaults: on `hold` or `stop`, file the splits (never defer
186
159
  for size), accept recommended answers, and run the rest ([shortcut mode](references/preflight.md#shortcut-mode)).
187
160
 
188
161
  ### 2. Implement and open the PR
189
162
 
190
- Give each unit a branch, workspace, and implementer with its findings entry
163
+ Give each unit a branch, its prepared workspace, and an implementer with its findings entry
191
164
  and parents' contracts; state outcome and validation, not method. Refill
192
165
  slots at once. At a unit's first coherent commit its PR opens as a draft, so CI
193
166
  starts and the work is safe; later work goes to the same PR (in a Mergify stack
@@ -217,20 +190,26 @@ Enqueue through the queue's skill only when CI is green and the verdict is `pass
217
190
  on the same HEAD.
218
191
  After 2 cycles without progress ([expire.md](references/expire.md)), or a harness-reported stuck worker, take the failure kind's response
219
192
  ([expire.md](references/expire.md)).
193
+ A landed unit's workspace and resources are cleaned then, alongside independent units, never by age
194
+ ([workspaces.md](references/workspaces.md#cleanup-after-delivery-before-finish)).
220
195
 
221
196
  ## Task plan and board
222
197
 
223
198
  Keep the task plan as the only source of truth; only you update it
224
- ([task-plan.md](references/task-plan.md)). On Pi, bind or reload with
225
- `update_plan({workflow:{path:<absolute-plan-path>,revision:<persisted-planRevision>}})`;
226
- with no event this is read-only. Save transitions through `update_plan`'s
227
- `workflow` payload with the current revision; it persists the plan and
228
- refreshes the TUI. Never edit the bound plan directly.
229
- Render the board from the saved plan under that same `planRevision`.
199
+ ([task-plan.md](references/task-plan.md)). When `update_todo` is advertised, capture
200
+ the known outcome before substantive work and bind or reload the saved plan with
201
+ `update_todo({workflow:{path:<absolute-plan-path>,revision:<persisted-planRevision>},outcome:{objective:<objective>}})`.
202
+ Binding with no event is read-only for the plan. Save transitions through its
203
+ `workflow` payload with the current revision; never edit the bound plan directly.
204
+ When the tool is absent or disabled, use the existing file transition in
205
+ [task-plan.md](references/task-plan.md#other-harnesses-and-display). Never enable the
206
+ optional interface as a precondition. Render the board from the saved plan under
207
+ that same `planRevision`.
230
208
 
231
209
  ## Done
232
210
 
233
- First [settle blocked units](references/done.md#settle-blocked-units). Every PR is reviewed, green on its exact HEAD, and merged (`autonomous`) or
211
+ First [clean every delivered unit's environment](references/done.md#clean-before-handoff), then
212
+ [settle blocked units](references/done.md#settle-blocked-units). Every PR is reviewed, green on its exact HEAD, and merged (`autonomous`) or
234
213
  handed back merge-ready (`supervised`). For a blocked unit, hand back it, its
235
214
  dependents, and the merged units. Link each issue the run filed into the spec's tree, and each `excluded` rollup to close;
236
215
  hand back the draft from `<run>/splits/` only for a unit still held, and the link to the pending device record. Report one short record per unit:
@@ -97,9 +97,19 @@ provider shows that PR merged.
97
97
 
98
98
  ## After the merge
99
99
 
100
- Remove the unit workspace, then its review clone:
100
+ Clean that unit's workspace and resources, then finish it, in every scheduler
101
+ mode: `next-actions.mjs` prints `cleanup-workspace` until its cleanup settles.
102
+ First record the intent through the [checkpoint mechanism](task-plan.md#checkpoints) (`lifecycle.cleanup`
103
+ `{state: applying, headSha: <the unit's headSha>}`), then run:
101
104
 
102
105
  ```bash
103
- node <skill-base-dir>/scripts/cleanup-runs.mjs --merged <unit-workspace> --apply
104
- node <skill-base-dir>/scripts/cleanup-runs.mjs --merged <review-clone> --apply
106
+ node <skill-base-dir>/scripts/cleanup-runs.mjs cleanup --run <run> --unit <unit> \
107
+ --revision <saved planRevision> --apply --json
105
108
  ```
109
+
110
+ Persist its returned lifecycle ([workspaces.md](workspaces.md#cleanup-after-delivery-before-finish)).
111
+ It runs alongside independent units. `complete` settles the unit; `retained`
112
+ keeps the whole environment and reports it as **not cleaned**, with the
113
+ helper's reason, in the handoff. `pending` or `applying` cleanup blocks
114
+ `finish`. Only a proven cleanup removes a tree: no `--merged <path>` on its
115
+ own, and no deletion by age.
@@ -49,11 +49,12 @@ issue or automatic scheduler gate. They do not waive required validation.
49
49
  - the [immediate acceptance checkpoint](#delivery-progress), existing baseline (or none),
50
50
  and, for a continuation, the last result, remaining uncertainty and next distinguishing
51
51
  test; retain the same checkpoint/history when changing workers
52
- - the [Goal](../SKILL.md#goal) and [Principles](../SKILL.md#principles), verbatim (a reviewer gets review.md's two rules instead)
52
+ - the [Goal](../SKILL.md#goal) and [Principles](principles.md), verbatim (a reviewer gets review.md's two rules instead)
53
53
  - the result path, `<run>/results/<unit>-<label>.json` (`<label>`: kind and attempt, e.g. `fix-2`), with `unit` and `decisionNeeded` (null or a choice)
54
54
  - at the deadline: stop starting work, commit, and report
55
- - environment rules: write only inside the workspace (and the findings directory for the explorer),
56
- with tool caches and temp files there (`TMPDIR`, `npm_config_cache`, `UV_CACHE_DIR`); use the machine's
55
+ - environment rules: write only inside the workspace and its planned resources (and the findings directory for the explorer),
56
+ with private caches and temp files registered before use (`TMPDIR`, `npm_config_cache`, `UV_CACHE_DIR`);
57
+ reuse them through retries and return them to the cleanup owner ([workspaces](workspaces.md)); use the machine's
57
58
  installed JDK, Android SDK, system images, and browsers (`JAVA_HOME`, `ANDROID_HOME`) where they fit,
58
59
  or the repo's pinned Playwright image where the runner has no browser (`github-actions` runners.md);
59
60
  edit with the harness's tools, never a shell `apply_patch`
@@ -1,7 +1,7 @@
1
1
  # Done
2
2
 
3
- End a run in three steps, in order: settle blocked units, report, then close
4
- the run in the harness.
3
+ End a run in four steps, in order: clean each delivered unit's environment,
4
+ settle blocked units, report, then close the run in the harness.
5
5
 
6
6
  ## Settle blocked units
7
7
 
@@ -13,6 +13,15 @@ itself is not settled while `next-actions.mjs` prints `wait` or
13
13
  `retry-blocked` for it ([expire.md](expire.md#reason-codes)). End only when
14
14
  nothing is left to settle.
15
15
 
16
+ ## Clean before handoff
17
+
18
+ Clean every delivered unit's workspace and resources before the report, in every
19
+ scheduler mode ([workspaces.md](workspaces.md#cleanup-after-delivery-before-finish)).
20
+ Its `lifecycle.cleanup` is `complete`, or `retained` with the current `headSha`
21
+ and a reason; `pending` or `applying` blocks the handoff. Report each retained
22
+ environment as **not cleaned**, with its reason, and say so for every blocked,
23
+ cancelled, pending, or merge-ready handed-back unit that keeps its environment.
24
+
16
25
  ## Close the run
17
26
 
18
27
  After the report ([SKILL.md](../SKILL.md#done)):
@@ -2,6 +2,11 @@
2
2
 
3
3
  Expire an attempt at these limits. Never drop an expired unit from the spec.
4
4
 
5
+ These counters track progress toward the agreed outcome, not a reason to create
6
+ more work. Count only required checks and concrete defects that affect delivery;
7
+ do not keep an attempt alive by adding guards, tests, gates, or diagnostics that
8
+ the feature does not need.
9
+
5
10
  **Count progress, not attempts: expire after 2 cycles without progress, and
6
11
  never after a fixed number of cycles.** A fix cycle makes progress only when
7
12
  its count reaches a new low, below every earlier cycle of the attempt; a
@@ -277,8 +282,10 @@ merge waits for its proof.
277
282
 
278
283
  ## Infrastructure failures
279
284
 
280
- **Diagnose each infrastructure failure to its cause and fix it.** Never
281
- wait for someone else to diagnose it.
285
+ **Diagnose infrastructure that prevents an agreed required check or feature from
286
+ running, and fix its cause.** Do not use this section to harden healthy infrastructure,
287
+ repair unrelated debt, or create a new test platform for speculative assurance. Never
288
+ wait for someone else to diagnose a blocker the run can resolve.
282
289
 
283
290
  "The same failure" means the same command failing with the same error.
284
291
  Example: `./gradlew assembleDebug` fails with `Could not resolve
@@ -6,10 +6,15 @@ Give these to every implementer and fix worker, with SKILL.md's
6
6
  [Principles](../SKILL.md#principles). Each is a guideline toward the
7
7
  [Goal](../SKILL.md#goal), then an example.
8
8
 
9
- 1. **Done is the criteria passing at `proof.level` on the final HEAD.**
10
- Example: `proof.level` is `database`; the new repository test passes
11
- against the disposable PostgreSQL, so finish. No browser run on top.
12
- 2. **Add no criteria, checks, evidence, or work items the brief does not name.**
9
+ 1. **Done is the requested outcome working and its agreed criteria passing at `proof.level`.**
10
+ Example: the Charge layout persists per installation and the repository test passes
11
+ against disposable PostgreSQL, so finish. No browser run on top.
12
+ 2. **Keep the first working business flow in view.** Build the smallest complete path
13
+ through the existing system; do not build a general framework before its first use.
14
+ Supporting code or tests need a direct dependency, an agreed requirement, or a
15
+ concrete defect introduced by this change. Do not add speculative guards, retries,
16
+ fallbacks, coercions, or compatibility modes; retain the protections the supported
17
+ behavior actually needs. Never enlarge the criteria, CI gates, or evidence campaign.
13
18
  Example: you notice the export also lacks currency. Run `dropbox.mjs
14
19
  check` on it: `inDiff` false, so report it as a dropbox item; do not fix or test
15
20
  it in this unit. `inDiff` true means your change caused it: fix it.
@@ -32,22 +37,26 @@ After the approval, schedule runnable units continuously within
32
37
 
33
38
  ## Workspaces
34
39
 
35
- Give each unit its own branch and isolated Git workspace at
36
- `.resolve-issues/rush/<run-id>/units/<unit>/`, on the target or on its
37
- parent's branch in `stack` or `chain` mode. Keep it through implementation, fixes,
38
- and expiry; never wipe it on spawn death or timeout. Give a unit
39
- one workspace, one emulator profile (AVD), and at most one scratch copy,
40
- reused across retries and fixes; never one per attempt.
41
-
42
- On Pi, never run a Git-mutating sandboxed worker in a linked worktree: on the
43
- first such spawn pass `git_clone_workspace:true` with a dedicated
44
- `sandbox_dir`, record the clone as the workspace, and reuse it for retries.
45
- Use `sandbox:false` only when the caller accepts unrestricted writes.
40
+ Give each unit its own branch and one prepared workspace at
41
+ `.resolve-issues/rush/<run-id>/units/<unit>/`, on the target or on its parent's
42
+ branch in `stack` or `chain` mode ([workspaces.md](workspaces.md)). Keep it
43
+ through implementation, fixes, and expiry; never wipe it on spawn death or
44
+ timeout. Give a unit one workspace, one emulator profile (AVD), and at most one
45
+ scratch copy, planned as a resource and reused across retries and fixes; never
46
+ one per attempt.
47
+
48
+ Prepare it when the unit's first worker is admitted, and persist the helper's
49
+ ready identity before that worker starts ([workspaces.md](workspaces.md#prepare-at-admission-once)).
50
+ Every later worker reuses the same tree. A sandboxed Git-mutating worker gets an
51
+ independent clone prepared before its first spawn; after that, never pass
52
+ `git_clone_workspace:true` again, and use `sandbox:false` only when the caller
53
+ accepts unrestricted writes.
46
54
 
47
55
  ## Brief
48
56
 
49
57
  Add to SKILL.md's brief list: whole-spec context and neighboring unit
50
- boundaries, the branch, dependencies, and shared surfaces; "push the branch at
58
+ boundaries, the branch, the prepared workspace and its recorded resources,
59
+ dependencies, and shared surfaces; "push the branch at
51
60
  your first coherent commit and after each later one (in a Mergify stack
52
61
  repository, amend the one commit), and write its head SHA to
53
62
  `<run>/results/<unit>-head.json`; do not open the PR yourself" (the
@@ -108,8 +117,13 @@ transcript.
108
117
  - Prove `browser` and `emulator` levels with the existing end-to-end suite;
109
118
  with none, the unit builds the journey its proof needs
110
119
  ([expire.md](expire.md#proof-stays-with-its-unit)).
120
+ - Reuse existing tests that already prove an outcome. Add focused cases for the
121
+ changed behavior and material failures, at the lowest level that proves them for
122
+ real. Decide whether a new defensive branch belongs before writing a test for it;
123
+ do not make an invented fallback permanent by treating its test as a requirement.
111
124
  - Prove logic with unit, database, or component tests; keep journeys for what
112
- only they show.
125
+ only they show. A journey can satisfy several obligations it actually exercises;
126
+ a new branch does not automatically need another test layer.
113
127
  - When CI runs the unit's `browser` or `emulator` suite, CI proves it: push
114
128
  and read the journey's result on the pushed HEAD. CI confirms a fix; it
115
129
  never debugs one. After a failed journey, reproduce it with
@@ -148,6 +162,8 @@ transcript.
148
162
  ## Scheduling
149
163
 
150
164
  - Start runnable units together within [live host capacity](#live-capacity).
165
+ A printed `prepare-workspace` is work that admits the worker printed after it:
166
+ run it, persist the returned identity, then spawn.
151
167
  Separately, this machine runs one local emulator at a time unless its
152
168
  suite proves more is safe. Treat it as a queue the coordinator hands out,
153
169
  in arrival order: to emulator proof CI does not run and to failures only
@@ -352,7 +352,9 @@ Record each answer in `decisions`, sync the catalog, then:
352
352
  - Run the rest: mark held units `blocked` (`blockedReason: size-hold`) with the split path;
353
353
  their dependents stay not started (`pending`).
354
354
 
355
- Create the unit branches and workspaces, and start. From here on, ask nothing ([never block on the human](#never-block-on-the-human)).
355
+ Record the unit branches and workspace intents, then prepare each workspace only
356
+ when its first worker is admitted ([workspaces](workspaces.md#prepare-at-admission-once)).
357
+ From here on, ask nothing ([never block on the human](#never-block-on-the-human)).
356
358
 
357
359
  ### Environment checks
358
360
 
@@ -0,0 +1,52 @@
1
+ # Delivery principles
2
+
3
+ Guidelines, not restrictions; put them in every brief. When two pull apart, take the one that
4
+ ships sooner at the same bar.
5
+
6
+ 1. **Deliver when the requested behavior works and the agreed checks pass.**
7
+ Example: the cashier can submit the Charge, the plan's charge tests and typecheck
8
+ pass, and required CI is green, so mark the PR ready. Do not add another
9
+ journey or a hardening campaign "to be safe".
10
+ 2. **Keep supporting work tied to the outcome; never enlarge acceptance on your own.**
11
+ Add a guard, fallback, retry, compatibility path, abstraction, or test setup only
12
+ for a supported requirement, a concrete dependency, or a demonstrated defect.
13
+ Preserve necessary security, financial correctness, tenancy, data integrity, and
14
+ cleanup. Do not turn a feature into a coverage, CI, observability, framework,
15
+ or repository-cleanup project. A problem outside the unit goes to the
16
+ [dropbox](dropbox.md); do not fix it merely because you found it.
17
+ A choice (spec meaning, design, approach) is no failure: answer it, never retry
18
+ it ([expire.md](expire.md#decide-before-you-defer)).
19
+ 3. **Add a check only for a concrete doubt that could change delivery.**
20
+ Example: "the fix changed refund rounding; if `refund.test.ts` fails, the
21
+ code must change", so run it. "More coverage would be reassuring": skip.
22
+ 4. **Reuse a passing result until what it tested changes.**
23
+ Example: a commit that only rewords its message keeps every result. A
24
+ fix to `refund.ts` reruns the refund tests, not the whole plan.
25
+ 5. **Push early; CI is the full test.**
26
+ Example: push each fix to the draft PR once its focused tests pass,
27
+ without asking first and without running the full suite locally.
28
+ 6. **Carry a HEAD pushed after a passing review; give every other new HEAD the tier `better-review`'s scope script picks.**
29
+ Example: a CI fix or a merge of main after a pass: `--carry`, no
30
+ reviewer. A P0/P1 fix: delta; one that rewrote most of the PR: full.
31
+ 7. **Coordinate first.** On every completion notice, read fresh capacity and run `scripts/next-actions.mjs --run <run>`
32
+ with the [live capacity arguments](implementation.md#live-capacity); do everything it prints
33
+ before resuming your own work; keep a [heartbeat](expire.md#waits).
34
+ Example: mid-way through an emulator debug, a notice says `impl-1322`
35
+ finished; the script prints `start-review 1322` and `fill-slot 1323`, so
36
+ start both, then return to the debug. On a new invocation, call it first with `--resume`.
37
+ Only it decides the run is done: end a turn only when it prints nothing due, only `wait`, or `finish`.
38
+ 8. **Run as much at once as the plan and live host capacity allow.** Start every `fill-slot` before your own work;
39
+ never hold a ready unit back; link a unit only to what its change needs.
40
+ Example: a slot is free while you debug CI: start the ready unit, then debug. Five slices need one helper: the first builds it, the rest depend on it.
41
+ 9. **Record what remains once, in the issue that owns it.**
42
+ Example: the release device campaign is still to run, so add one comment
43
+ on the release issue and link it from the handback. Never report "device
44
+ tests passed" from a unit build.
45
+ 10. **Never block on the human.** After the approval, take the [automatic answer](preflight.md#never-block-on-the-human)
46
+ wherever you could ask or wait, record it, and keep going; a later message changes course from there.
47
+ 11. **Fix the cause of what actually blocks delivery.** Diagnose a failed agreed check or
48
+ a concrete defect introduced by the change; fix the cause, not a blind retry, longer
49
+ timeout, skip, or guessed CI fix. Reproduce a failed journey with `proof.suite.local`
50
+ first. Infrastructure repair follows [expire.md](expire.md#infrastructure-failures)
51
+ only when the required acceptance needs it; unrelated debt stays in the dropbox.
52
+ Defer a necessary fix only for the documented [human-only](expire.md#human-only) causes.
@@ -15,8 +15,10 @@ restate its rules in the brief beyond the two below.
15
15
  provides and builds on.
16
16
  - Have it compute its own merge-base with `origin/<targetBranch>`, or the
17
17
  parent's branch when stacked or chained.
18
- - Give each unit one review clone at `<run>/reviews/<unit>/`, reused every
19
- round by fetching the new HEAD; never a fresh clone or sandbox per round.
18
+ - Prepare each unit one review clone at `<run>/reviews/<unit>/clone`, recorded as
19
+ its `review` resource before the first reviewer is admitted, and reuse it every
20
+ round by fetching the new HEAD; never a fresh clone or sandbox per round
21
+ ([workspaces.md](workspaces.md#prepare-at-admission-once)).
20
22
  - Give it the result path and tell it to file no follow-up issues: give each
21
23
  P2 its `file` and `line`; you add them to the
22
24
  [dropbox](dropbox.md). It reports no P3. It changes no code and pushes nothing.
@@ -25,8 +27,9 @@ restate its rules in the brief beyond the two below.
25
27
  instead of rerunning them. Example: CI ran the 876-test suite green; the
26
28
  reviewer reads that run and runs only the changed files' tests.
27
29
  - Repeat two rules in every brief, as a safety net:
28
- - A blocker names what breaks and how, with a counterexample; without one
29
- it is P2 at most.
30
+ - A blocker names a concrete supported failure with a counterexample, or cites
31
+ an explicit unmet requirement or missing agreed required proof and its evidence.
32
+ A missing optional test or hypothetical improvement is P2 at most.
30
33
  - A check you cannot run is not a finding: record it as not run.
31
34
 
32
35
  ## Tier, then verdict
@@ -140,14 +143,21 @@ the PR author; `github-reviews.mjs` reads them and decides what blocks.
140
143
  stall guard reads every earlier `<unit>-r<K>.json` beside the prior and
141
144
  answers `review-again` when one is missing, so keep every round's file under that name.
142
145
 
143
- 3. Add the round's P2 to the dropbox, merge the
146
+ 3. **Before running the old fix or adding a new one, apply the same finding bar.**
147
+ Keep accepted criteria and binding checks fixed. A proposed fallback, compatibility
148
+ mode, harness, gate, or wider test campaign needs a concrete dependency or defect;
149
+ a reviewer preference alone does not authorize it. Return an unsupported request
150
+ for clarification or as a non-blocking follow-up, never silently downgrade a real
151
+ security, money, tenancy, or data-integrity defect.
152
+
153
+ Add the round's P2 to the dropbox, merge the
144
154
  [GitHub reviews](#github-reviews) into the file, then run the verdict
145
155
  script and follow its `verdict`, never the reviewer's prose (it exits 0 whenever it ran, 2 if it could not):
146
156
 
147
157
  ```bash
148
158
  node <skill-base-dir>/scripts/dropbox.mjs from-review --dropbox <run>/dropbox.json \
149
159
  --review <run>/reviews/<unit>-r<N>.json --pr <PR url> \
150
- --git <run>/reviews/<unit> --base <review base> &&
160
+ --git <run>/reviews/<unit>/clone --base <review base> &&
151
161
  node <skill-base-dir>/scripts/github-reviews.mjs merge --pr <owner/name#N> \
152
162
  --head <PR headSha> --review <run>/reviews/<unit>-r<N>.json &&
153
163
  node <skill-base-dir>/scripts/review-verdict.mjs \
@@ -190,17 +200,17 @@ Give the fix worker only the `fixBrief`, and act on its `action`:
190
200
 
191
201
  | `action` | When | Fix worker |
192
202
  |---|---|---|
193
- | `fix` | first blocking round | Fix each finding's `rule` at its one owner and close every row in its `paths`. |
194
- | `test-first` | a P0/P1 survived the last fix | On the escalation model, for each `recurring` finding, before changing code: name the rule it breaks, list every path that can break it (with this id's trigger from every earlier round), write one test per path, and see the open ones fail. Fix the rule at its one owner until every test passes. "Fixed" is every path's test passing. |
203
+ | `fix` | first blocking round | Make the smallest complete fix for each finding's `rule` and close every applicable row in its `paths`; do not require centralization. |
204
+ | `test-first` | a P0/P1 survived the last fix | On the escalation model, for each `recurring` finding, before changing code: name the broken rule and its concrete open paths, reuse sufficient tests and add focused cases for missing proof, and see the open cases fail. Fix the rule until the applicable cases pass. A table-driven test may cover several paths; no new architecture is required. |
195
205
  | `one-by-one` | the last fix introduced new P0/P1 | One fix worker per finding, in turn, each with the smallest change that closes every row of its `paths` at the rule's owner. |
196
206
 
197
- **Fix the rule, at its one owner, on every path.**
198
- Example: a stale-session finding is patched at sign-out, then at
199
- revalidation, then at resume, each with its own guard. The rule is "an old
200
- async completion never changes a newer session's credentials"; its owner is
201
- the credential store (clear only when the stored session matches the
202
- caller's); test every path that clears credentials against a same-person and
203
- a different-person new sign-in.
207
+ **Fix the broken rule on every applicable path, without requiring a refactor.**
208
+ A shared owner is useful when it makes the fix smaller and clearer; it is not a
209
+ prerequisite for closing the finding.
210
+ Example: for an old async completion overwriting a newer session, ensure every
211
+ credential-clearing path checks the relevant session identity. A shared store check
212
+ or focused handler checks can both resolve it; prove the supported same-person and
213
+ different-person sign-in cases without inventing unrelated event combinations.
204
214
 
205
215
  Have each fix worker run the checks its change affects and return the
206
216
  commands and results; push, and let CI run. Then pick the new HEAD's