@hassangameryt/freeflow 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (301) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +2 -2
  3. package/.codex-plugin/plugin.json +4 -5
  4. package/README.md +141 -163
  5. package/capabilities/cognitive-routing/SKILL.md +387 -0
  6. package/capabilities/context-virtualization/SKILL.md +103 -0
  7. package/capabilities/conversation-history/SKILL.md +53 -0
  8. package/command-surface.json +6 -37
  9. package/hooks/freeflow-runtime-context.mjs +50 -541
  10. package/hooks/hooks.json +1 -26
  11. package/hooks/tests/check-runtime-context-hook.sh +114 -308
  12. package/package.json +27 -17
  13. package/pi-extension/dist/cognitive-routing/commands.js +96 -0
  14. package/pi-extension/dist/cognitive-routing/config.js +232 -0
  15. package/pi-extension/dist/cognitive-routing/controller.js +1292 -0
  16. package/pi-extension/dist/cognitive-routing/history.js +451 -0
  17. package/pi-extension/dist/cognitive-routing/host.js +188 -0
  18. package/pi-extension/dist/cognitive-routing/pi-routing-session.js +414 -0
  19. package/pi-extension/dist/cognitive-routing/pi-session-control.js +320 -0
  20. package/pi-extension/dist/cognitive-routing/runtime.js +43 -0
  21. package/pi-extension/dist/cognitive-routing/tool.js +212 -0
  22. package/pi-extension/dist/cognitive-routing/types.js +6 -0
  23. package/pi-extension/dist/context-virtualization/commands.js +89 -0
  24. package/pi-extension/dist/context-virtualization/projector.js +42 -0
  25. package/pi-extension/dist/context-virtualization/runtime.js +356 -0
  26. package/pi-extension/dist/context-virtualization/state.js +57 -0
  27. package/pi-extension/dist/context-virtualization/types.js +10 -0
  28. package/pi-extension/dist/conversation-history/passages.js +66 -0
  29. package/pi-extension/dist/conversation-history/ranking.js +105 -0
  30. package/pi-extension/dist/conversation-history/runtime.js +226 -0
  31. package/pi-extension/dist/conversation-history/search.js +56 -0
  32. package/pi-extension/dist/conversation-history/types.js +1 -0
  33. package/pi-extension/dist/freeflow-context/resolver.js +120 -0
  34. package/pi-extension/dist/freeflow-context/runtime.js +80 -0
  35. package/pi-extension/dist/freeflow-context/source-projector.js +95 -0
  36. package/pi-extension/dist/freeflow-context/tool.js +308 -0
  37. package/pi-extension/dist/freeflow-context/types.js +12 -0
  38. package/pi-extension/dist/freeflow-context/visibility.js +28 -0
  39. package/pi-extension/dist/index.js +564 -129
  40. package/pi-extension/dist/runtime/runtime-context.js +357 -470
  41. package/pi-extension/dist/runtime/runtime-identity.js +5 -0
  42. package/pi-extension/dist/settings/settings-tui.js +78 -0
  43. package/pi-extension/dist/settings/settings-ui.js +572 -826
  44. package/pi-extension/dist/ui/text-component.js +57 -0
  45. package/pi-extension/src/cognitive-routing/commands.ts +129 -0
  46. package/pi-extension/src/cognitive-routing/config.ts +303 -0
  47. package/pi-extension/src/cognitive-routing/controller.ts +1628 -0
  48. package/pi-extension/src/cognitive-routing/history.ts +650 -0
  49. package/pi-extension/src/cognitive-routing/host.ts +266 -0
  50. package/pi-extension/src/cognitive-routing/pi-routing-session.ts +538 -0
  51. package/pi-extension/src/cognitive-routing/pi-session-control.ts +444 -0
  52. package/pi-extension/src/cognitive-routing/runtime.ts +57 -0
  53. package/pi-extension/src/cognitive-routing/tool.ts +273 -0
  54. package/pi-extension/src/cognitive-routing/types.ts +89 -0
  55. package/pi-extension/src/context-virtualization/commands.ts +111 -0
  56. package/pi-extension/src/context-virtualization/projector.ts +62 -0
  57. package/pi-extension/src/context-virtualization/runtime.ts +406 -0
  58. package/pi-extension/src/context-virtualization/state.ts +79 -0
  59. package/pi-extension/src/context-virtualization/types.ts +92 -0
  60. package/pi-extension/src/conversation-history/passages.ts +81 -0
  61. package/pi-extension/src/conversation-history/ranking.ts +155 -0
  62. package/pi-extension/src/conversation-history/runtime.ts +250 -0
  63. package/pi-extension/src/conversation-history/search.ts +79 -0
  64. package/pi-extension/src/conversation-history/types.ts +31 -0
  65. package/pi-extension/src/freeflow-context/resolver.ts +139 -0
  66. package/pi-extension/src/freeflow-context/runtime.ts +100 -0
  67. package/pi-extension/src/freeflow-context/source-projector.ts +106 -0
  68. package/pi-extension/src/freeflow-context/tool.ts +360 -0
  69. package/pi-extension/src/freeflow-context/types.ts +70 -0
  70. package/pi-extension/src/freeflow-context/visibility.ts +53 -0
  71. package/pi-extension/src/index.ts +597 -135
  72. package/pi-extension/src/runtime/runtime-context.ts +373 -491
  73. package/pi-extension/src/runtime/runtime-identity.ts +8 -0
  74. package/pi-extension/src/settings/settings-tui.ts +93 -0
  75. package/pi-extension/src/settings/settings-ui.ts +679 -910
  76. package/pi-extension/src/ui/text-component.ts +66 -0
  77. package/pi-extension/tests/cognitive-routing/commands.test.js +134 -0
  78. package/pi-extension/tests/cognitive-routing/controller.test.js +1128 -0
  79. package/pi-extension/tests/cognitive-routing/extension-lifecycle.test.js +1142 -0
  80. package/pi-extension/tests/cognitive-routing/history.test.js +274 -0
  81. package/pi-extension/tests/cognitive-routing/host-fixture.js +4 -0
  82. package/pi-extension/tests/cognitive-routing/host-identity.test.js +63 -0
  83. package/pi-extension/tests/cognitive-routing/pi-normal-lifecycle.test.js +434 -0
  84. package/pi-extension/tests/cognitive-routing/pi-session-control.test.js +174 -0
  85. package/pi-extension/tests/cognitive-routing/pi-session-history.test.js +91 -0
  86. package/pi-extension/tests/cognitive-routing/profile-resolution.test.js +279 -0
  87. package/pi-extension/tests/cognitive-routing/tool.test.js +230 -0
  88. package/pi-extension/tests/context-virtualization/extension.test.js +749 -0
  89. package/pi-extension/tests/context-virtualization/projector.test.js +110 -0
  90. package/pi-extension/tests/context-virtualization/runtime.test.js +216 -0
  91. package/pi-extension/tests/conversation-history/runtime.test.js +98 -0
  92. package/pi-extension/tests/conversation-history/search.test.js +97 -0
  93. package/pi-extension/tests/integration/mode-free-core.test.js +218 -0
  94. package/pi-extension/tests/integration/pi-extension.test.js +532 -3701
  95. package/pi-extension/tests/integration/prompt-architecture.test.js +350 -0
  96. package/pi-extension/tests/integration/unaffected-regressions.test.js +411 -0
  97. package/runtime/prompts/cognitive-routing.md +10 -0
  98. package/runtime/prompts/context-virtualization.md +3 -0
  99. package/runtime/prompts/conversation-history.md +3 -0
  100. package/runtime/prompts/core.md +84 -0
  101. package/runtime/prompts/interaction-contract.md +11 -0
  102. package/skills/action-selection/SKILL.md +140 -0
  103. package/skills/action-selection/references/trajectory-stalls.md +71 -0
  104. package/skills/bypass/SKILL.md +109 -38
  105. package/skills/commit-work/SKILL.md +94 -55
  106. package/skills/commit-work/references/git-state-edges.md +94 -0
  107. package/skills/commit-work/references/simple-push.md +92 -0
  108. package/skills/commit-work/references/staging-decisions.md +79 -46
  109. package/skills/decision-gate/SKILL.md +80 -22
  110. package/skills/design-for-depth/SKILL.md +206 -60
  111. package/skills/design-for-depth/references/design-pressure-signals.md +108 -240
  112. package/skills/design-for-depth/references/interface-design-loop.md +77 -97
  113. package/skills/design-for-depth/references/module-and-dependency-design.md +147 -0
  114. package/skills/design-for-depth/references/software-design-philosophy.md +128 -174
  115. package/skills/design-for-depth/references/state-and-failure-boundaries.md +136 -0
  116. package/skills/diagnose-failure/SKILL.md +200 -48
  117. package/skills/diagnose-failure/references/diagnostic-loop-catalog.md +18 -6
  118. package/skills/diagnose-failure/references/{flaky-and-performance.md → flaky-and-performance-diagnosis.md} +13 -5
  119. package/skills/discuss/SKILL.md +119 -65
  120. package/skills/discuss/references/discussion-continuity.md +123 -0
  121. package/skills/evaluate-skill/SKILL.md +166 -52
  122. package/skills/evaluate-skill/references/{definition-schema.md → evaluation-definition-schema.md} +43 -3
  123. package/skills/evaluate-skill/references/evaluation-design.md +56 -30
  124. package/skills/evaluate-skill/references/execution-and-evidence.md +8 -3
  125. package/skills/evaluate-skill/references/review-and-revision.md +62 -21
  126. package/skills/evaluate-skill/scripts/lib/definitions.mjs +114 -3
  127. package/skills/evaluate-skill/scripts/lib/grade-interaction.mjs +156 -1
  128. package/skills/evaluate-skill/scripts/lib/grade.mjs +9 -1
  129. package/skills/evaluate-skill/scripts/lib/pi.mjs +147 -32
  130. package/skills/evaluate-skill/scripts/lib/rpc.mjs +4 -4
  131. package/skills/evaluate-skill/scripts/lib/runner.mjs +36 -14
  132. package/skills/evaluate-skill/scripts/lib/sandbox.mjs +92 -0
  133. package/skills/evaluate-skill/scripts/pi-guard.mjs +1 -1
  134. package/skills/evaluate-skill/scripts/pi-observer.mjs +66 -0
  135. package/skills/evaluate-skill/scripts/skill-eval.mjs +6 -5
  136. package/skills/execute-work/SKILL.md +99 -57
  137. package/skills/execute-work/references/code-practices.md +4 -4
  138. package/skills/execute-work/references/execute-work-edges.md +62 -0
  139. package/skills/finish-branch/SKILL.md +2 -2
  140. package/skills/finish-branch/references/integration-options.md +1 -1
  141. package/skills/handoff/SKILL.md +3 -3
  142. package/skills/launch-work/SKILL.md +1 -1
  143. package/skills/launch-work/references/launch-readiness.md +2 -2
  144. package/skills/migration-work/SKILL.md +2 -2
  145. package/skills/migration-work/references/migration-lifecycle.md +1 -1
  146. package/skills/release-work/SKILL.md +1 -1
  147. package/skills/release-work/references/release-evidence.md +1 -1
  148. package/skills/review-artifact/SKILL.md +129 -66
  149. package/skills/review-artifact/references/adjudicate-artifact-review.md +101 -0
  150. package/skills/review-artifact/references/independent-artifact-reviewer-contract.md +159 -0
  151. package/skills/review-work/SKILL.md +113 -68
  152. package/skills/review-work/references/adjudicate-work-review.md +97 -0
  153. package/skills/review-work/references/independent-work-reviewer-contract.md +139 -0
  154. package/skills/review-work/references/security-risk-lens.md +18 -16
  155. package/skills/setup-freeflow/SKILL.md +16 -17
  156. package/skills/setup-freeflow/references/activation-contract.md +24 -30
  157. package/skills/setup-freeflow/references/host-setup.md +6 -7
  158. package/skills/simplify-code/SKILL.md +97 -39
  159. package/skills/simplify-code/references/simplification-patterns.md +1 -1
  160. package/skills/tdd/SKILL.md +100 -53
  161. package/skills/tdd/references/test-design.md +3 -3
  162. package/skills/track-work/SKILL.md +195 -58
  163. package/skills/track-work/references/working-record-format.md +515 -0
  164. package/skills/track-work/scripts/lib/document.mjs +713 -0
  165. package/skills/track-work/scripts/lib/format.mjs +166 -0
  166. package/skills/track-work/scripts/lib/store.mjs +233 -0
  167. package/skills/track-work/scripts/lib/transitions.mjs +790 -0
  168. package/skills/track-work/scripts/lib/views.mjs +40 -0
  169. package/skills/track-work/scripts/working-record.mjs +316 -0
  170. package/skills/verify-work/SKILL.md +57 -19
  171. package/skills/verify-work/references/browser-runtime-evidence.md +2 -2
  172. package/skills/verify-work/references/integration-evidence.md +1 -7
  173. package/skills/verify-work/references/performance-evidence.md +2 -2
  174. package/skills/workflow/SKILL.md +137 -55
  175. package/skills/workflow/references/domain-skill-composition.md +26 -40
  176. package/skills/write-plan/SKILL.md +1 -1
  177. package/skills/write-skill/SKILL.md +218 -61
  178. package/skills/write-skill/references/activation-boundaries.md +63 -21
  179. package/skills/write-skill/references/agent-first-instructions.md +61 -27
  180. package/skills/write-skill/references/progressive-disclosure.md +97 -33
  181. package/skills/write-skill/references/skill-dependency-graphs.md +190 -0
  182. package/capabilities/output-router/SKILL.md +0 -206
  183. package/capabilities/output-router/references/safety-policy.md +0 -40
  184. package/capabilities/output-router/references/setup.md +0 -110
  185. package/pi-extension/dist/output-router/host-producer-identification.js +0 -232
  186. package/pi-extension/dist/output-router/native-safety-net.js +0 -216
  187. package/pi-extension/dist/output-router/observed-tool-routing.js +0 -122
  188. package/pi-extension/dist/output-router/renderers.js +0 -1023
  189. package/pi-extension/dist/output-router/router-tools.js +0 -554
  190. package/pi-extension/dist/output-router/schemas.js +0 -383
  191. package/pi-extension/dist/output-router/status.js +0 -744
  192. package/pi-extension/dist/output-router/utils.js +0 -502
  193. package/pi-extension/src/output-router/host-producer-identification.ts +0 -256
  194. package/pi-extension/src/output-router/native-safety-net.ts +0 -248
  195. package/pi-extension/src/output-router/observed-tool-routing.ts +0 -134
  196. package/pi-extension/src/output-router/renderers.ts +0 -1108
  197. package/pi-extension/src/output-router/router-tools.ts +0 -579
  198. package/pi-extension/src/output-router/schemas.ts +0 -387
  199. package/pi-extension/src/output-router/status.ts +0 -791
  200. package/pi-extension/src/output-router/utils.ts +0 -554
  201. package/pi-extension/tests/output-router/observed-producers.test.js +0 -132
  202. package/pi-extension/tests/output-router/search.test.js +0 -722
  203. package/router/dist/benchmarks/benchmark-harness.d.ts +0 -35
  204. package/router/dist/benchmarks/benchmark-harness.js +0 -92
  205. package/router/dist/benchmarks/benchmarks.d.ts +0 -109
  206. package/router/dist/benchmarks/benchmarks.js +0 -979
  207. package/router/dist/benchmarks/codex-qa-benchmarks.d.ts +0 -95
  208. package/router/dist/benchmarks/codex-qa-benchmarks.js +0 -500
  209. package/router/dist/benchmarks/command-benchmarks.d.ts +0 -143
  210. package/router/dist/benchmarks/command-benchmarks.js +0 -698
  211. package/router/dist/benchmarks/context-mode-normalized-benchmarks.d.ts +0 -82
  212. package/router/dist/benchmarks/context-mode-normalized-benchmarks.js +0 -773
  213. package/router/dist/benchmarks/context-mode-real-deep-benchmark.d.ts +0 -132
  214. package/router/dist/benchmarks/context-mode-real-deep-benchmark.js +0 -1380
  215. package/router/dist/benchmarks/context-saving-baseline.d.ts +0 -60
  216. package/router/dist/benchmarks/context-saving-baseline.js +0 -470
  217. package/router/dist/benchmarks/index-benchmarks.d.ts +0 -103
  218. package/router/dist/benchmarks/index-benchmarks.js +0 -862
  219. package/router/dist/benchmarks/storage-policy-benchmarks.d.ts +0 -101
  220. package/router/dist/benchmarks/storage-policy-benchmarks.js +0 -618
  221. package/router/dist/benchmarks/vault-index-benchmarks.d.ts +0 -56
  222. package/router/dist/benchmarks/vault-index-benchmarks.js +0 -322
  223. package/router/dist/config/config.d.ts +0 -103
  224. package/router/dist/config/config.js +0 -632
  225. package/router/dist/config/router-contract.d.ts +0 -10
  226. package/router/dist/config/router-contract.js +0 -54
  227. package/router/dist/config/schema.d.ts +0 -27
  228. package/router/dist/config/schema.js +0 -648
  229. package/router/dist/config/types.d.ts +0 -573
  230. package/router/dist/config/types.js +0 -41
  231. package/router/dist/evidence/bounded-evidence.d.ts +0 -40
  232. package/router/dist/evidence/bounded-evidence.js +0 -323
  233. package/router/dist/evidence/evidence-range-selector.d.ts +0 -24
  234. package/router/dist/evidence/evidence-range-selector.js +0 -232
  235. package/router/dist/evidence/evidence-search.d.ts +0 -27
  236. package/router/dist/evidence/evidence-search.js +0 -490
  237. package/router/dist/evidence/evidence.d.ts +0 -38
  238. package/router/dist/evidence/evidence.js +0 -200
  239. package/router/dist/evidence/failure-contracts.d.ts +0 -37
  240. package/router/dist/evidence/failure-contracts.js +0 -166
  241. package/router/dist/evidence/line-ranges.d.ts +0 -24
  242. package/router/dist/evidence/line-ranges.js +0 -22
  243. package/router/dist/experiments/local-index.d.ts +0 -64
  244. package/router/dist/experiments/local-index.js +0 -581
  245. package/router/dist/index.d.ts +0 -30
  246. package/router/dist/index.js +0 -32
  247. package/router/dist/local/local-traversal.d.ts +0 -18
  248. package/router/dist/local/local-traversal.js +0 -334
  249. package/router/dist/processing/engine.d.ts +0 -132
  250. package/router/dist/processing/engine.js +0 -533
  251. package/router/dist/processing/reducers.d.ts +0 -280
  252. package/router/dist/processing/reducers.js +0 -1673
  253. package/router/dist/processing/renderers.d.ts +0 -31
  254. package/router/dist/processing/renderers.js +0 -195
  255. package/router/dist/processing/scripts.d.ts +0 -91
  256. package/router/dist/processing/scripts.js +0 -386
  257. package/router/dist/repo/repo-traversal.d.ts +0 -18
  258. package/router/dist/repo/repo-traversal.js +0 -245
  259. package/router/dist/routing/observed-reducers.d.ts +0 -41
  260. package/router/dist/routing/observed-reducers.js +0 -661
  261. package/router/dist/routing/observed-routing.d.ts +0 -26
  262. package/router/dist/routing/observed-routing.js +0 -378
  263. package/router/dist/routing/parsers.d.ts +0 -16
  264. package/router/dist/routing/parsers.js +0 -521
  265. package/router/dist/routing/run-filters.d.ts +0 -60
  266. package/router/dist/routing/run-filters.js +0 -238
  267. package/router/dist/routing/run-reducers.d.ts +0 -49
  268. package/router/dist/routing/run-reducers.js +0 -122
  269. package/router/dist/sandbox/adapter-roots.d.ts +0 -46
  270. package/router/dist/sandbox/adapter-roots.js +0 -66
  271. package/router/dist/sandbox/eryx-python-adapter.d.ts +0 -13
  272. package/router/dist/sandbox/eryx-python-adapter.js +0 -868
  273. package/router/dist/sandbox/jq-wasm-adapter.d.ts +0 -9
  274. package/router/dist/sandbox/jq-wasm-adapter.js +0 -429
  275. package/router/dist/sandbox/quickjs-wasi-adapter.d.ts +0 -13
  276. package/router/dist/sandbox/quickjs-wasi-adapter.js +0 -384
  277. package/router/dist/sandbox/script-sandbox.d.ts +0 -134
  278. package/router/dist/sandbox/script-sandbox.js +0 -337
  279. package/router/dist/setup/script-transform-adapters.d.ts +0 -32
  280. package/router/dist/setup/script-transform-adapters.js +0 -278
  281. package/router/dist/tools/batch.d.ts +0 -33
  282. package/router/dist/tools/batch.js +0 -586
  283. package/router/dist/tools/run.d.ts +0 -62
  284. package/router/dist/tools/run.js +0 -1304
  285. package/router/dist/tools/search.d.ts +0 -66
  286. package/router/dist/tools/search.js +0 -1364
  287. package/router/dist/transform/engine.d.ts +0 -168
  288. package/router/dist/transform/engine.js +0 -2072
  289. package/router/dist/vault/vault-index.d.ts +0 -125
  290. package/router/dist/vault/vault-index.js +0 -416
  291. package/router/dist/vault/vault.d.ts +0 -138
  292. package/router/dist/vault/vault.js +0 -630
  293. package/runtime/interaction-contract.md +0 -16
  294. package/skills/discuss/references/checkpoints.md +0 -66
  295. package/skills/execute-work/references/execution-loop.md +0 -77
  296. package/skills/mode-contract/SKILL.md +0 -104
  297. package/skills/review-artifact/references/reviewer-prompt.md +0 -148
  298. package/skills/review-work/references/reviewer-prompt.md +0 -134
  299. package/skills/track-work/references/working-record-schema.md +0 -378
  300. package/skills/workflow/references/workflow-loop.md +0 -92
  301. /package/skills/handoff/references/{templates.md → handoff-templates.md} +0 -0
@@ -0,0 +1,40 @@
1
+ import { activeDecisionBlocks, blockLines, parseDocument, sectionContentLines } from "./document.mjs";
2
+
3
+ function trimTrailing(lines) {
4
+ const result = [...lines];
5
+ while (result.length && result[result.length - 1].trim() === "") result.pop();
6
+ return result;
7
+ }
8
+
9
+ function joinChunk(lines, newline) {
10
+ return trimTrailing(lines).join(newline);
11
+ }
12
+
13
+ export function renderFull(text) {
14
+ return text;
15
+ }
16
+
17
+ export function renderResume(text) {
18
+ const document = parseDocument(text);
19
+ const { newline } = document;
20
+ const context = document.sections["Current Context"];
21
+ const current = document.sections["Current Work"];
22
+ const future = document.sections["Future Work"];
23
+ const notes = document.sections.Notes;
24
+ const chunks = [
25
+ joinChunk(document.lines.slice(0, context.headingIndex), newline),
26
+ joinChunk(sectionContentLines(document, "Current Context"), newline),
27
+ ];
28
+
29
+ const decisions = activeDecisionBlocks(document);
30
+ if (decisions.length) {
31
+ chunks.push(
32
+ joinChunk(["## Active Decisions", "", ...decisions.flatMap((block) => blockLines(document, block))], newline),
33
+ );
34
+ }
35
+
36
+ chunks.push(joinChunk(document.lines.slice(current.headingIndex, current.end), newline));
37
+ chunks.push(joinChunk(document.lines.slice(future.headingIndex, future.end), newline));
38
+ chunks.push(joinChunk(document.lines.slice(notes.headingIndex, document.lines.length), newline));
39
+ return `${chunks.filter(Boolean).join(`${newline}${newline}`)}${newline}`;
40
+ }
@@ -0,0 +1,316 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { rm } from "node:fs/promises";
4
+ import { cwd } from "node:process";
5
+ import { dirname } from "node:path";
6
+ import { canonicalLines, joinLines, slugify, TASK_STATES } from "./lib/format.mjs";
7
+ import { parseDocument, validateDocument } from "./lib/document.mjs";
8
+ import { runTransition } from "./lib/transitions.mjs";
9
+ import {
10
+ createRecordPath,
11
+ displayPath,
12
+ readInput,
13
+ readRecord,
14
+ resolveRecordPath,
15
+ writeInitialAtomically,
16
+ } from "./lib/store.mjs";
17
+ import { renderFull, renderResume } from "./lib/views.mjs";
18
+
19
+ function usage() {
20
+ return [
21
+ "Usage:",
22
+ " working-record.mjs init --root <path> --name <task name> [--input <file|->]",
23
+ " working-record.mjs view resume|full --record <record.md>",
24
+ " working-record.mjs validate --record <record.md>",
25
+ " working-record.mjs <slice|checkpoint|decision|task> <operation> ...",
26
+ ].join("\n");
27
+ }
28
+
29
+ const COMMAND_HELP = new Map([
30
+ [
31
+ "slice",
32
+ [
33
+ "Usage: working-record.mjs slice <operation> ...",
34
+ "Operations: slice propose, slice start, slice start-direct, slice pause, slice resume, slice close, slice reopen.",
35
+ "Run working-record.mjs <group> <operation> --help for options and input fields.",
36
+ "Use --input - to read Markdown fragments from stdin.",
37
+ ].join("\n"),
38
+ ],
39
+ [
40
+ "checkpoint",
41
+ [
42
+ "Usage: working-record.mjs checkpoint <operation> ...",
43
+ "Operations: checkpoint propose, checkpoint activate, checkpoint defer, checkpoint resume, checkpoint close.",
44
+ "Run working-record.mjs <group> <operation> --help for options and input fields.",
45
+ "Use --input - to read Markdown fragments from stdin.",
46
+ ].join("\n"),
47
+ ],
48
+ [
49
+ "decision",
50
+ [
51
+ "Usage: working-record.mjs decision <operation> ...",
52
+ "Operations: decision add, decision supersede, decision retire.",
53
+ "Run working-record.mjs <group> <operation> --help for options and input fields.",
54
+ "Use --input - to read Markdown fragments from stdin.",
55
+ ].join("\n"),
56
+ ],
57
+ [
58
+ "task",
59
+ [
60
+ "Usage: working-record.mjs task <operation> ...",
61
+ "Operations: task set-state.",
62
+ "Run working-record.mjs <group> <operation> --help for options and input fields.",
63
+ ].join("\n"),
64
+ ],
65
+ [
66
+ "init",
67
+ "Usage: init --root <path> --name <task name> [--state <state>] [--input <file|->]\nInput: Goal and Next useful action required; the seven Current Context headings are accepted. Use --input - to read Markdown fragments from stdin.",
68
+ ],
69
+ ["view", "Usage: view resume|full --record <record.md>"],
70
+ ["validate", "Usage: validate --record <record.md>"],
71
+ [
72
+ "slice propose",
73
+ "Usage: slice propose --record <record.md> --title <title> --input <file|->\nInput: Intended result required; Type, Expected evidence, and Dependencies optional. Use --input - to read the fragment from stdin.",
74
+ ],
75
+ [
76
+ "slice start",
77
+ "Usage: slice start --record <record.md> --title <proposal title> --next-action <text> --input <file|->\nInput: Authority source, Scope, Expected evidence, Stop condition, and Starting state required. Use --input - to read the fragment from stdin.",
78
+ ],
79
+ [
80
+ "slice start-direct",
81
+ "Usage: slice start-direct --record <record.md> --title <title> --next-action <text> --input <file|->\nInput: Intended result, Authority source, Scope, Expected evidence, Stop condition, and Starting state required; Future Work is unchanged. Use --input - to read the fragment from stdin.",
82
+ ],
83
+ [
84
+ "slice pause",
85
+ "Usage: slice pause --record <record.md> --reason <reason> --resume-when <condition> --next-action <text>",
86
+ ],
87
+ ["slice resume", "Usage: slice resume --record <record.md> --resolution <source> --next-action <text>"],
88
+ [
89
+ "slice close",
90
+ "Usage: slice close --record <record.md> --state <completed|blocked|abandoned> --next-action <text> --input <file|->\nInput: Result, Evidence and limits, and Task effect required. Use --input - to read the fragment from stdin.",
91
+ ],
92
+ [
93
+ "slice reopen",
94
+ "Usage: slice reopen --record <record.md> --id <S-NNN> --next-action <text> --input <file|->\nInput: fresh Authority source, Scope, Expected evidence, Stop condition, and Starting state required. Use --input - to read the fragment from stdin.",
95
+ ],
96
+ [
97
+ "checkpoint propose",
98
+ "Usage: checkpoint propose --record <record.md> --title <title> --input <file|->\nInput: Type, Condition, and Applies to required. Use --input - to read the fragment from stdin.",
99
+ ],
100
+ [
101
+ "checkpoint activate",
102
+ "Usage: checkpoint activate --record <record.md> --title <proposal title> [--next-action <text>]",
103
+ ],
104
+ ["checkpoint defer", "Usage: checkpoint defer --record <record.md> --id <C-NNN> [--next-action <text>]"],
105
+ ["checkpoint resume", "Usage: checkpoint resume --record <record.md> --id <C-NNN> [--next-action <text>]"],
106
+ [
107
+ "checkpoint close",
108
+ "Usage: checkpoint close --record <record.md> --id <C-NNN> --state <completed|cancelled|replaced> [--next-action <text>] --input <file|->\nInput: Result and Task effect required; Evidence optional; Reason required for cancelled or replaced; Replaced by required for replaced. Use --input - to read the fragment from stdin.",
109
+ ],
110
+ [
111
+ "decision add",
112
+ "Usage: decision add --record <record.md> --title <title> --input <file|->\nInput: Decision, Established by, Rationale, Consequences, and Revisit when required; Source references optional. Use --input - to read the fragment from stdin.",
113
+ ],
114
+ [
115
+ "decision supersede",
116
+ "Usage: decision supersede --record <record.md> --id <D-NNN> --title <title> --input <file|->\nInput: Decision, Established by, Rationale, Consequences, and Revisit when required; Source references optional. Use --input - to read the fragment from stdin.",
117
+ ],
118
+ ["decision retire", "Usage: decision retire --record <record.md> --id <D-NNN> --reason <reason>"],
119
+ [
120
+ "task set-state",
121
+ "Usage: task set-state --record <record.md> --state <active|paused|completed|abandoned> --next-action <text>",
122
+ ],
123
+ ]);
124
+
125
+ function commandHelp(command, operation) {
126
+ return `${COMMAND_HELP.get([command, operation].filter(Boolean).join(" ")) ?? COMMAND_HELP.get(command) ?? usage()}\n`;
127
+ }
128
+
129
+ class CliError extends Error {
130
+ constructor(message, exitCode = 1) {
131
+ super(message);
132
+ this.name = "CliError";
133
+ this.exitCode = exitCode;
134
+ }
135
+ }
136
+
137
+ function parseOptions(args) {
138
+ const options = {};
139
+ const positionals = [];
140
+ for (let index = 0; index < args.length; index += 1) {
141
+ const token = args[index];
142
+ if (!token.startsWith("--")) {
143
+ positionals.push(token);
144
+ continue;
145
+ }
146
+ if (options[token] !== undefined) throw new CliError(`Duplicate option: ${token}`);
147
+ if (token === "--help") {
148
+ options[token] = true;
149
+ continue;
150
+ }
151
+ const value = args[index + 1];
152
+ if (value === undefined || value.startsWith("--")) throw new CliError(`Missing value for ${token}`);
153
+ options[token] = value;
154
+ index += 1;
155
+ }
156
+ return { options, positionals };
157
+ }
158
+
159
+ function allowedOptions(command, operation) {
160
+ const common = new Set(["--root", "--record", "--input", "--help"]);
161
+ const withNextAction = new Set([...common, "--next-action"]);
162
+ if (command === "init") return new Set(["--root", "--name", "--state", "--input", "--help"]);
163
+ if (command === "view") return new Set(["--root", "--record", "--view", "--help"]);
164
+ if (command === "validate") return new Set(["--root", "--record", "--help"]);
165
+ if (command === "slice") {
166
+ if (operation === "propose") return new Set([...common, "--title"]);
167
+ if (operation === "start" || operation === "start-direct") return new Set([...withNextAction, "--title"]);
168
+ if (operation === "pause") return new Set([...withNextAction, "--reason", "--resume-when"]);
169
+ if (operation === "resume") return new Set([...withNextAction, "--resolution"]);
170
+ if (operation === "close") return new Set([...withNextAction, "--state"]);
171
+ if (operation === "reopen") return new Set([...withNextAction, "--id", "--title"]);
172
+ }
173
+ if (command === "checkpoint") {
174
+ if (operation === "propose") return new Set([...common, "--title"]);
175
+ if (operation === "activate") return new Set([...withNextAction, "--title"]);
176
+ if (operation === "defer" || operation === "resume") return new Set([...withNextAction, "--id"]);
177
+ if (operation === "close") return new Set([...withNextAction, "--id", "--state"]);
178
+ }
179
+ if (command === "decision") {
180
+ if (operation === "add") return new Set([...common, "--title"]);
181
+ if (operation === "supersede") return new Set([...common, "--id", "--title"]);
182
+ if (operation === "retire") return new Set(["--root", "--record", "--id", "--reason", "--input", "--help"]);
183
+ }
184
+ if (command === "task" && operation === "set-state")
185
+ return new Set(["--root", "--record", "--state", "--next-action", "--help"]);
186
+ return null;
187
+ }
188
+
189
+ function validateCommandOptions(command, operation, options) {
190
+ const allowed = allowedOptions(command, operation);
191
+ if (!allowed) throw new CliError(`Unknown command: ${command}${operation ? ` ${operation}` : ""}`);
192
+ for (const name of Object.keys(options)) {
193
+ if (!allowed.has(name))
194
+ throw new CliError(`Unknown option ${name} for ${command}${operation ? ` ${operation}` : ""}`);
195
+ }
196
+ }
197
+
198
+ function requireOption(options, name) {
199
+ const value = options[name];
200
+ if (!value) throw new CliError(`Missing required option: ${name}`);
201
+ return value;
202
+ }
203
+
204
+ function rootOption(options) {
205
+ return options["--root"] ?? cwd();
206
+ }
207
+
208
+ function initialContent(skeletonLines, input) {
209
+ if (!input.trim()) return joinLines(skeletonLines, "\n");
210
+ const inputLines = input.replace(/\r\n?/g, "\n").split("\n");
211
+ const targets = new Map();
212
+ const names = [
213
+ "Goal",
214
+ "What defines this task",
215
+ "Settled",
216
+ "Tentative",
217
+ "Open",
218
+ "Current direction",
219
+ "Boundaries",
220
+ "Next useful action",
221
+ ];
222
+ const allowed = new Set(names);
223
+ for (let index = 0; index < inputLines.length; index += 1) {
224
+ const levelThree = /^### (.+?)\s*$/.exec(inputLines[index]);
225
+ if (levelThree) {
226
+ const name = levelThree[1];
227
+ if (!allowed.has(name)) throw new CliError(`Unknown initialization heading: ${name}`);
228
+ if (targets.has(name)) throw new CliError(`Duplicate initialization heading: ${name}`);
229
+ const content = [];
230
+ for (let next = index + 1; next < inputLines.length; next += 1) {
231
+ if (/^### /.test(inputLines[next]) || /^## /.test(inputLines[next])) break;
232
+ content.push(inputLines[next]);
233
+ }
234
+ targets.set(name, content);
235
+ continue;
236
+ }
237
+ if (/^## /.test(inputLines[index])) throw new CliError(`Unknown initialization heading: ${inputLines[index]}`);
238
+ }
239
+ const output = [...skeletonLines];
240
+ for (const name of names) {
241
+ const content = targets.get(name);
242
+ if (!content) continue;
243
+ const headingIndex = output.findIndex((line) => line === `### ${name}`);
244
+ if (headingIndex < 0) continue;
245
+ let end = headingIndex + 1;
246
+ while (end < output.length && !/^### |^## /.test(output[end])) end += 1;
247
+ const trimmed = [...content];
248
+ while (trimmed.length && trimmed[0].trim() === "") trimmed.shift();
249
+ while (trimmed.length && trimmed[trimmed.length - 1].trim() === "") trimmed.pop();
250
+ output.splice(headingIndex + 1, end - headingIndex - 1, "", ...trimmed, "");
251
+ }
252
+ return joinLines(output, "\n");
253
+ }
254
+
255
+ async function initialize(options) {
256
+ const root = rootOption(options);
257
+ const name = requireOption(options, "--name");
258
+ const state = options["--state"] ?? "active";
259
+ if (!TASK_STATES.has(state)) throw new CliError(`Invalid task state: ${state}`);
260
+ const input = await readInput(options["--input"], cwd());
261
+ const text = initialContent(canonicalLines(name, state), input);
262
+ parseDocument(text);
263
+ const created = await createRecordPath(root, name, slugify(name));
264
+ try {
265
+ await writeInitialAtomically(root, created.path, text);
266
+ } catch (error) {
267
+ if (error?.exitCode !== 2) await rm(dirname(created.path), { recursive: true, force: true }).catch(() => undefined);
268
+ throw error;
269
+ }
270
+ return `${created.path}\n`;
271
+ }
272
+
273
+ async function readExisting(options) {
274
+ const root = rootOption(options);
275
+ const recordOption = requireOption(options, "--record");
276
+ const loaded = await readRecord(root, resolveRecordPath(root, recordOption));
277
+ return { root, ...loaded };
278
+ }
279
+
280
+ async function runCore(command, rest) {
281
+ const { options, positionals } = parseOptions(rest);
282
+ const operation = positionals[0];
283
+ if (options["--help"]) return commandHelp(command, operation);
284
+ validateCommandOptions(command, operation, options);
285
+ if (command === "init") return initialize(options);
286
+ if (command === "view") {
287
+ if (positionals.length > 1) throw new CliError("View accepts only resume or full");
288
+ const view = positionals[0] ?? options["--view"];
289
+ if (!view || !["resume", "full"].includes(view)) throw new CliError("View must be resume or full");
290
+ const loaded = await readExisting(options);
291
+ if (view === "full") return renderFull(loaded.text);
292
+ return renderResume(loaded.text);
293
+ }
294
+ if (command === "validate") {
295
+ if (positionals.length) throw new CliError("Validate does not accept positional arguments");
296
+ const loaded = await readExisting(options);
297
+ validateDocument(parseDocument(loaded.text));
298
+ return `valid\n${displayPath(loaded.root, loaded.path)}\n`;
299
+ }
300
+ if (positionals.length !== 1) throw new CliError(`Expected one operation for ${command}`);
301
+ const loaded = await readExisting(options);
302
+ const input = await readInput(options["--input"], cwd());
303
+ return runTransition(command, positionals, options, input, loaded);
304
+ }
305
+
306
+ try {
307
+ const [command, ...rest] = process.argv.slice(2);
308
+ if (!command || command === "--help" || command === "help") {
309
+ process.stdout.write(`${usage()}\n`);
310
+ } else {
311
+ process.stdout.write(await runCore(command, rest));
312
+ }
313
+ } catch (error) {
314
+ process.stderr.write(`Error: ${error.message}\n`);
315
+ process.exitCode = error.exitCode ?? 1;
316
+ }
@@ -7,11 +7,11 @@ description: Use when verifying work or a claim after implementation, tests, bui
7
7
 
8
8
  Determine whether fresh evidence supports a specific claim at the required observing boundary.
9
9
 
10
- Verification is factual: what ran, what happened, and what that result proves. The active agent owns verification and routes from its result. Reading or invoking this skill changes neither role nor authority; it creates no review judgment or permission to continue.
10
+ Verification is factual: what ran, what happened, and what that result proves. The active agent owns verification and routes from its result. Reading or invoking this skill changes neither role nor authority and creates no review judgment or permission to continue.
11
11
 
12
12
  ## Name The Claim
13
13
 
14
- State the claim before choosing the check. Include the behavior or property and the boundary where it must hold.
14
+ State the claim before choosing the check. Include the behavior or property and the boundary where it must hold. Keep this compact when both are obvious; do not let an available check silently narrow a broader claim.
15
15
 
16
16
  Claims may concern:
17
17
 
@@ -22,41 +22,56 @@ Claims may concern:
22
22
  - performance or resource bounds;
23
23
  - artifact completeness or repository state.
24
24
 
25
- Do not let an available check silently narrow a broader claim.
26
-
27
25
  ## Choose Evidence That Can Disagree
28
26
 
29
27
  Use the smallest direct evidence that can falsify the claim. Evidence must be fresh for the code, configuration, environment, and artifact being assessed.
30
28
 
29
+ Verification inherits the current authority envelope. Existing evidence may be inspected without a new run. Run a new active check only when that envelope covers it directly or as contained verification; otherwise return its purpose, expected evidence, and stop condition to [Workflow](../../skills/workflow/SKILL.md) and wait.
30
+
31
+ Verify Work owns the claim and required evidence boundary. When several covered observers can falsify the same claim, or the likely check is broad, use [Action Selection](../../skills/action-selection/SKILL.md) to choose and bound one environment interaction. It returns the observation; Verify Work interprets and classifies support. Skip it when one exact check is already selected.
32
+
33
+ Before running covered checks concurrently, compare what each may write or remove. Run checks serially when they share generated directories, caches, build outputs, package roots, fixture state, ports, databases, or intentional stale-artifact files. A concurrency-induced red signal is orchestration evidence, not automatically an implementation defect; reproduce it under a non-overlapping or serial schedule before changing production code.
34
+
31
35
  Passing tests do not prove behavior they do not exercise. A happy path does not prove failure handling. Source inspection does not prove runtime execution. A helper call does not prove registration, host dispatch, or installed-package behavior.
32
36
 
33
- Read [integration evidence](references/integration-evidence.md) for callback, host-lifecycle, installed-artifact, absence, or mutation-footprint claims. Read [browser runtime evidence](references/browser-runtime-evidence.md) for rendered, interactive, network, accessibility, console, or visual claims. Read [performance evidence](references/performance-evidence.md) for latency, throughput, memory, CPU, bundle, query, or resource claims.
37
+ Before selecting or running evidence:
38
+
39
+ - read [integration evidence](references/integration-evidence.md) when a claim depends on a registered callback or executor, host lifecycle, producer invocation, fallback protocol, installed package, or absence counter;
40
+ - read [browser runtime evidence](references/browser-runtime-evidence.md) when a claim depends on rendered UI, browser behavior, accessibility, client networking, console state, visual output, or browser runtime performance;
41
+ - read [performance evidence](references/performance-evidence.md) when verifying latency, throughput, memory, CPU, bundle, query, rendering, capacity, or resource-regression claims.
42
+
43
+ For browser-performance claims, read both Browser Runtime Evidence for runtime fidelity and Performance Evidence for workload, baseline, variance, and metrics.
34
44
 
35
45
  Review may judge whether evidence is sufficient, but review does not prove that behavior occurred.
36
46
 
37
47
  ## Run And Interpret
38
48
 
49
+ Once the selected check is authorized:
50
+
39
51
  1. Run the complete selected check.
40
52
  2. Read the relevant output, exit status, and lower-level evidence that can contradict a summary.
41
- 3. Confirm the intended success or failure path and observing boundary were exercised.
42
- 4. Compare the observation with the exact claim and source requirement.
43
- 5. Preserve contradictory evidence; do not rerun until an unfavorable result disappears.
44
- 6. State unavailable, stale, partial, or reduced-fidelity evidence honestly.
53
+ 3. Confirm the defined assertion and intended success or failure path were exercised.
54
+ 4. Confirm the observing boundary actually matched the claim.
55
+ 5. Compare the observation with the exact claim and source requirement.
56
+ 6. Preserve contradictory evidence; do not rerun until an unfavorable result disappears.
57
+ 7. State unavailable, stale, partial, or reduced-fidelity evidence honestly.
45
58
 
46
59
  Do not convert missing evidence into zero, safe, passed, or probably correct. If the user skips a check, respect that choice and leave the corresponding claim unverified.
47
60
 
48
- Do not change implementation, tests, checks, specs, policies, or acceptance merely to make the signal green. When the cause of a contradiction is unclear, report the contradiction rather than inventing one.
61
+ Do not change implementation, tests, checks, Specs, policies, or acceptance merely to make the signal green. When the cause of a contradiction is unclear, report the contradiction rather than inventing one.
49
62
 
50
63
  ## Classify The Result
51
64
 
52
65
  Keep check execution separate from claim support.
53
66
 
54
- **Check result:**
67
+ **Check result** is relative to the check's defined assertion—not whether the target operation happened to succeed or fail:
68
+
69
+ - **Passed:** the check executed validly and its defined assertion held.
70
+ - **Failed:** the check executed validly and its defined assertion did not hold.
71
+ - **Error:** the observing mechanism or check execution was invalid.
72
+ - **Unavailable:** the required check could not be attempted safely or reliably.
55
73
 
56
- - **Passed:** the check completed successfully.
57
- - **Failed:** the check completed and observed a failure.
58
- - **Error:** the check itself did not execute validly.
59
- - **Unavailable:** the required check could not be run.
74
+ A check can Pass while intentionally observing rejection, failure, rollback, or fail-closed behavior.
60
75
 
61
76
  **Claim result:**
62
77
 
@@ -65,11 +80,34 @@ Keep check execution separate from claim support.
65
80
  - **Inconclusive:** evidence exists but cannot establish or refute the claim at the required boundary.
66
81
  - **Unavailable:** the required evidence cannot currently be obtained safely or reliably.
67
82
 
68
- A passed check may still leave the claim inconclusive. A failed check may expose an implementation defect, an invalid check, an environment problem, or a source conflict; classify only what evidence supports.
83
+ A Passed check may still leave the claim Inconclusive. A Failed check may expose an implementation defect, an invalid expectation, an environment problem, or a source conflict; classify only what evidence supports.
84
+
85
+ When contradictory evidence is unexplained or failure repeats, read [Diagnose Failure](../../skills/diagnose-failure/SKILL.md). When evidence exposes a user-owned decision or source conflict, read [Decision Gate](../../skills/decision-gate/SKILL.md).
86
+
87
+ ## Return Evidence To Review
69
88
 
70
- When contradictory evidence is unexplained or failure repeats, read [Diagnose Failure](../diagnose-failure/SKILL.md). When evidence exposes a user-owned decision or source conflict, read [Decision Gate](../decision-gate/SKILL.md).
89
+ When verification answers a review **Needs evidence** item, preserve the original review-item pointer, claim, required observing boundary, available evidence and prior limit, and why the gap affects review judgment.
90
+
91
+ Return the verification result to the receiving agent for adjudication:
92
+
93
+ - **Supported:** the factual gap may be resolved; do not infer review Pass.
94
+ - **Contradicted:** the finding may be established, invalidated, or expose a source conflict; do not classify the review item here.
95
+ - **Inconclusive:** the review item remains Open when the gap is material.
96
+ - **Unavailable:** the review item remains Open and the observing limitation must remain explicit.
97
+
98
+ Verification does not revise the independent review report, adjudicate findings, authorize correction, or select follow-up review.
99
+
100
+ ## Report Proportionately
101
+
102
+ For one straightforward Supported claim with an obvious check and boundary, use the compact form:
103
+
104
+ ```text
105
+ Claim @ required boundary: Supported ([check result]) by [evidence].
106
+ Proves:
107
+ Does not prove:
108
+ ```
71
109
 
72
- ## Report
110
+ Use the full form when the result is Contradicted, Inconclusive, or Unavailable; several claims or boundaries are involved; evidence conflicts; the claim is consequential; or the result returns to review adjudication:
73
111
 
74
112
  ```text
75
113
  Claim:
@@ -82,4 +120,4 @@ Does not prove:
82
120
  Required next evidence:
83
121
  ```
84
122
 
85
- Omit `Required next evidence` when the claim is fully supported or contradicted. When the result changes or ends the current path, use [Workflow](../workflow/SKILL.md) to choose what follows.
123
+ When returning evidence for adjudication, prepend `Review item:` with the original item pointer. Omit `Required next evidence` when the claim is fully Supported or Contradicted. When the result changes or ends the current path, return it to [Workflow](../../skills/workflow/SKILL.md) to choose what follows.
@@ -1,6 +1,6 @@
1
1
  # Browser Runtime Evidence
2
2
 
3
- Read this when a claim depends on rendered UI, browser behavior, accessibility, client networking, console state, visual output, or browser performance.
3
+ Read this before selecting or running evidence when a claim depends on rendered UI, browser behavior, accessibility, client networking, console state, visual output, or browser runtime performance.
4
4
 
5
5
  Use the available browser or DevTools capability for the host. This reference defines evidence quality, not tool-specific commands.
6
6
 
@@ -52,4 +52,4 @@ Stop or downgrade the claim when:
52
52
  - only a nearby path, screenshot, or mocked page was tested;
53
53
  - browser evidence contradicts tests, specs, or accepted behavior.
54
54
 
55
- Read [Diagnose Failure](../../diagnose-failure/SKILL.md) for unexplained browser failures. Read [Decision Gate](../../decision-gate/SKILL.md) when browser evidence conflicts with accepted behavior or exposes a user-owned decision.
55
+ Read [Diagnose Failure](../../../skills/diagnose-failure/SKILL.md) for unexplained browser failures. Read [Decision Gate](../../../skills/decision-gate/SKILL.md) when browser evidence conflicts with accepted behavior or exposes a user-owned decision.
@@ -1,6 +1,6 @@
1
1
  # Integration Evidence
2
2
 
3
- Use this when a claim depends on a registered callback or executor, host lifecycle, producer invocation, fallback protocol, installed package, absence counter, or checks that may mutate shared state.
3
+ Read this before selecting or running evidence when a claim depends on a registered callback or executor, host lifecycle, producer invocation, fallback protocol, installed package, or absence counter.
4
4
 
5
5
  ## Match The Boundary
6
6
 
@@ -28,12 +28,6 @@ A zero value proves absence only when:
28
28
 
29
29
  Prefer an adversarial disproof: bypass the producer, forge or replay the event, call the helper directly, or resolve code from the checkout instead of the installed root. The proof should fail before downstream work when the claimed boundary was not crossed.
30
30
 
31
- ## Compare Mutation Footprints
32
-
33
- Before running checks concurrently, compare what each check may write or remove. Run checks serially when they share generated directories, caches, build outputs, package roots, fixture state, ports, databases, or intentional stale-artifact files.
34
-
35
- A concurrency-induced red signal is orchestration evidence, not automatically an implementation defect. Reproduce it under a non-overlapping or serial schedule before changing production code.
36
-
37
31
  ## Claim Map
38
32
 
39
33
  For sensitive or proof-bearing claims, record:
@@ -1,6 +1,6 @@
1
1
  # Performance Evidence
2
2
 
3
- Read this when verifying latency, throughput, memory, CPU, bundle, query, rendering, capacity, or resource-regression claims.
3
+ Read this before selecting or running evidence when verifying latency, throughput, memory, CPU, bundle, query, rendering, capacity, or resource-regression claims.
4
4
 
5
5
  A faster synthetic operation does not prove the reported path improved. Preserve correctness while measuring representative work.
6
6
 
@@ -54,4 +54,4 @@ Stop or downgrade the claim when:
54
54
  - only a nearby operation improved;
55
55
  - required production evidence is unavailable.
56
56
 
57
- Read [Diagnose Failure](../../diagnose-failure/SKILL.md) for unexplained regressions. Read [Decision Gate](../../decision-gate/SKILL.md) when the next step depends on a product, SLO, cost, or resource tradeoff owned by the user.
57
+ Read [Diagnose Failure](../../../skills/diagnose-failure/SKILL.md) for unexplained regressions. Read [Decision Gate](../../../skills/decision-gate/SKILL.md) when the next step depends on a product, SLO, cost, or resource tradeoff owned by the user.