create-agent-rig 0.10.0 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -14,6 +14,49 @@ second recorded departure; its own entry states the direction and the reason,
14
14
  and this paragraph deliberately does not restate them — a numbering rule with
15
15
  two copies of its exceptions is the shape 0.8.0 exists to remove.
16
16
 
17
+ ## 0.10.1
18
+
19
+ **A fixes-only patch on 0.10.0.** Every entry corrects existing behaviour or
20
+ states a rule the rulebook already follows; nothing is added to what `create`,
21
+ `init` or `upgrade` install beyond the corrected files, and no agent, skill,
22
+ hook or routing row is new.
23
+
24
+ ### Fixed
25
+
26
+ - **`upgrade` no longer crashes on a directory where a rig-owned file
27
+ belongs.** A tracked path that is a directory or another non-regular entry
28
+ is reported as a conflict with a reason and left untouched, in `--dry-run`
29
+ and `--yes` alike, instead of ending in an `EISDIR` stack trace (RP-189).
30
+ - **`upgrade` re-checks a leftover `AGENTS.md.rig-new` before removing it.**
31
+ The file is removed only while it still holds exactly the rendered
32
+ `AGENTS.md` bytes, so one edited after the plan was shown is kept, one
33
+ removed in the meantime no longer crashes the run, and the closing notice
34
+ reports a removal only when one happened (RP-202).
35
+ - **`upgrade --dry-run` exits 1 where the real run refuses** a non-file at
36
+ `AGENTS.md.rig-new`, instead of 0 (RP-202).
37
+ - **The Stop gate's budget is measured on the monotonic clock.**
38
+ `gate-stop-dod` computed its shared deadline from the wall clock, so a clock
39
+ step lengthened or shortened it (RP-204).
40
+
41
+ ### Rulebook
42
+
43
+ - `workflow.md` states the review-findings rule as a Core section of its own:
44
+ a blocking finding closes by a fix the reviewer reads again, or by evidence
45
+ the reviewer can re-check that its premise is false — with or without the
46
+ opt-in workflow layer (RP-194).
47
+ - `check-premises` treats a claim about an external API, CLI or library as a
48
+ premise: backed by a four-part record (version, authoritative source, date,
49
+ quote or pointer), it holds or is `PREMISE FALSE`; without one it stays
50
+ `UNVERIFIABLE` (RP-194).
51
+
52
+ ### Generator repository (not a rig-facing change)
53
+
54
+ - `packages/cli/src/commands/integrations.ts` is a declared elevated path.
55
+ - `scripts/memory-conformance.mjs` names why a rig spawn failed — exit code or
56
+ signal plus the child's error code — instead of a bare "exit 1" (RP-188).
57
+ - `docs/decisions/agent-roles-1.0.md` records the 1.0 agent-role targets; it
58
+ is repository-local and not shipped.
59
+
17
60
  ## 0.10.0
18
61
 
19
62
  Platforms: the packed release candidate is accepted on Linux, Windows and
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-agent-rig",
3
- "version": "0.10.0",
3
+ "version": "0.10.1",
4
4
  "description": "Configure an agent operating system (rules, gates, hooks) for Claude Code and Codex in a new or existing repository — no application scaffolding",
5
5
  "keywords": [
6
6
  "agent",
@@ -149,23 +149,20 @@ async function writableOnDisk(repoDir, rel) {
149
149
  }
150
150
  return dest;
151
151
  }
152
- /**
153
- * The file's bytes, or `null` when it is genuinely **absent**.
154
- *
155
- * Only "not there" is absence. Any other failure — a permission, a directory
156
- * where a file should be, a path this command refuses to touch — is rethrown,
157
- * because "I could not read your file" must never become "so I wrote mine over
158
- * it": every caller of this treats `null` as grounds to install.
159
- */
160
152
  async function readIfPresent(repoDir, rel) {
153
+ const dest = await writableOnDisk(repoDir, rel);
154
+ let stat;
161
155
  try {
162
- return await readFile(await writableOnDisk(repoDir, rel));
156
+ stat = await lstat(dest);
163
157
  }
164
158
  catch (error) {
165
159
  if (error.code === 'ENOENT')
166
- return null;
160
+ return { kind: 'absent' };
167
161
  throw error;
168
162
  }
163
+ if (!stat.isFile())
164
+ return { kind: 'non-file' };
165
+ return { kind: 'file', bytes: await readFile(dest) };
169
166
  }
170
167
  /**
171
168
  * The bytes THIS release would render for AGENTS.md, for THIS project,
@@ -394,7 +391,18 @@ export async function planUpgrade(repoDir, options = {}) {
394
391
  // CLAUDE.md's CURRENT content when it holds the shim back.
395
392
  const currentBytesByRel = new Map();
396
393
  for (const file of files) {
397
- const currentBytes = await readIfPresent(repoDir, file.rel);
394
+ const currentFile = await readIfPresent(repoDir, file.rel);
395
+ if (currentFile.kind === 'non-file') {
396
+ actions.push({
397
+ rel: file.rel,
398
+ verdict: 'conflict',
399
+ reason: 'a directory or other non-regular entry exists where this rig-owned file belongs — ' +
400
+ 'move or remove it by hand; upgrade will leave it untouched',
401
+ templatePath: file.source,
402
+ });
403
+ continue;
404
+ }
405
+ const currentBytes = currentFile.kind === 'file' ? currentFile.bytes : null;
398
406
  if (currentBytes !== null)
399
407
  currentBytesByRel.set(file.rel, currentBytes);
400
408
  const recordedInManifest = manifest?.files[file.rel];
@@ -620,7 +628,8 @@ export async function planUpgrade(repoDir, options = {}) {
620
628
  nextFiles['CLAUDE.md'] = sha256(heldBytes);
621
629
  }
622
630
  // Round 5, blocker 3: the rescue file's status is decided HERE, once, at
623
- // plan time — never re-probed by `applyUpgrade`, so a dry run and a real
631
+ // plan time — never re-probed by `applyUpgrade` except to re-verify a
632
+ // `cleanup` before deleting (RP-192 item 4), so a dry run and a real
624
633
  // run report the identical status and every refusal is known before a
625
634
  // single byte is written. Round 4 cycle 4's blocker 3 was exactly the
626
635
  // alternative: probing the filesystem again inside `applyUpgrade`, AFTER
@@ -716,8 +725,9 @@ export async function planUpgrade(repoDir, options = {}) {
716
725
  */
717
726
  export async function applyUpgrade(repoDir, plan, options = {}) {
718
727
  const written = [];
728
+ let removedRescue = false;
719
729
  if (options.dryRun === true)
720
- return { written };
730
+ return { written, removedRescue };
721
731
  // Round 5, blocker 3: refused BEFORE any write at all — not merely before
722
732
  // the manifest write. Round 4 cycle 4 measured that probing the rescue
723
733
  // path AFTER the ordinary payload writes left files rewritten and the
@@ -755,12 +765,12 @@ export async function applyUpgrade(repoDir, plan, options = {}) {
755
765
  await writeFile(await writableOnDisk(repoDir, action.rel), content);
756
766
  written.push(action.rel);
757
767
  }
758
- // Round 5: no new filesystem probing here `plan.agentsRescue` already
759
- // says exactly what (if anything) this run does, decided before any write
760
- // above ever ran. `would-write` is the only status that writes; `identical`
761
- // and `differs` are both "leave it exactly as it is"; `cleanup` is the only
762
- // status that deletes; `unsafe` already returned above and `none` does
763
- // nothing at all — round 4 cycle 4's "must not affect upgrade" case.
768
+ // Round 5: `plan.agentsRescue` says what (if anything) this run may do,
769
+ // decided before any write above ever ran. `would-write` is the only status
770
+ // that writes; `identical` and `differs` are both "leave it exactly as it
771
+ // is"; `cleanup` is the only status that deletes, and the one that reads the
772
+ // file again before it does (below); `unsafe` already returned above and
773
+ // `none` does nothing at all — round 4 cycle 4's "must not affect upgrade" case.
764
774
  if (plan.agentsRescue.holdBack) {
765
775
  if (plan.agentsRescue.status === 'would-write') {
766
776
  const rendered = plan.contents.get('AGENTS.md');
@@ -774,9 +784,24 @@ export async function applyUpgrade(repoDir, plan, options = {}) {
774
784
  }
775
785
  }
776
786
  else if (plan.agentsRescue.status === 'cleanup') {
777
- const rescueDest = await writableOnDisk(repoDir, AGENTS_MD_RESCUE);
778
- await unlink(rescueDest);
787
+ // The one deletion here is re-verified at apply time, the way uninstall
788
+ // re-checks `recordedHash`: an interactive run applies after its prompt,
789
+ // so the leftover may have been edited or removed since it was matched.
790
+ const rendered = plan.contents.get('AGENTS.md');
791
+ const current = await readRescueFile(repoDir);
792
+ if (rendered !== undefined &&
793
+ current.kind === 'file' &&
794
+ current.bytes.equals(Buffer.from(rendered, 'utf8'))) {
795
+ try {
796
+ await unlink(await writableOnDisk(repoDir, AGENTS_MD_RESCUE));
797
+ removedRescue = true;
798
+ }
799
+ catch (error) {
800
+ if (error.code !== 'ENOENT')
801
+ throw error;
802
+ }
803
+ }
779
804
  }
780
805
  await writeManifest(repoDir, plan.manifest);
781
- return { written };
806
+ return { written, removedRescue };
782
807
  }
@@ -499,7 +499,8 @@ async function runUpgrade(rawArgs) {
499
499
  const notice = renderAgentsRescueNotice(plan.agentsRescue, true);
500
500
  if (notice !== null)
501
501
  process.stdout.write(notice);
502
- return 0;
502
+ // The same exit the real run gives: `applyUpgrade` refuses this status.
503
+ return plan.agentsRescue.holdBack && plan.agentsRescue.status === 'unsafe' ? 1 : 0;
503
504
  }
504
505
  // The plan above is the review step, so it has to be answered before
505
506
  // anything is written. On a terminal that is a question; off one it is a
@@ -562,7 +563,12 @@ async function runUpgrade(rawArgs) {
562
563
  // blockers 1/2) means genuinely nothing to add: an ordinary, readable,
563
564
  // customised AGENTS.md conflict, or unrelated clutter at the rescue path,
564
565
  // both print nothing here at all.
565
- const notice = renderAgentsRescueNotice(plan.agentsRescue, false);
566
+ // A `cleanup` the apply step did not carry out (the leftover changed or went
567
+ // away after the plan) reports nothing rather than a removal.
568
+ const rescue = plan.agentsRescue.status === 'cleanup' && !result.removedRescue
569
+ ? { holdBack: false, status: 'none' }
570
+ : plan.agentsRescue;
571
+ const notice = renderAgentsRescueNotice(rescue, false);
566
572
  if (notice !== null)
567
573
  process.stdout.write(notice);
568
574
  return 0;
@@ -91,13 +91,40 @@ At the **second** entry point this inverts for one case: a test is exactly what
91
91
  a behaviour claim, so reading it is the point. The rule above is about not letting a
92
92
  test's *name* stand in for what the code does; §4 says which artifacts count.
93
93
 
94
+ ### External premises
95
+
96
+ A claim about something this repository does not contain — an external API, a
97
+ CLI, a library — is a premise like any other, and §2 decides whether it is
98
+ load-bearing. "The provider accepts a `--json` flag" or "the SDK retries on 429"
99
+ changes what gets built if it is false. The code here cannot settle it, so this
100
+ is the one case where documentation is the evidence, and it is recorded in four
101
+ parts:
102
+
103
+ - **version** — the exact version this project uses (the lockfile, the installed
104
+ binary's own version output), not "latest";
105
+ - **source** — an authoritative one for that version: the vendor's reference
106
+ documentation, its changelog, or the tool's own `--help`;
107
+ - **date** — when you read it, because documentation changes under a fixed URL;
108
+ - **quote** or pointer — the sentence that says it, short enough to re-check, or
109
+ the exact section it sits in.
110
+
111
+ A complete record that supports the claim lets it hold. One that contradicts it
112
+ is `PREMISE FALSE`, and the work stops exactly as it does for a claim the code
113
+ contradicts. The four parts go in the report's `evidence`, and in the blocker's
114
+ `note` when there is one.
115
+
116
+ A claim missing any of the four stays `UNVERIFIABLE`: being widely believed, or
117
+ true of an earlier version, does not promote it to a fact. This skill adds no
118
+ network tooling — where the session cannot reach the source, the claim is
119
+ `UNVERIFIABLE` and travels as a labelled assumption, as §4 says.
120
+
94
121
  ## 4. The verdict
95
122
 
96
123
  | Verdict | When | What happens next |
97
124
  | --- | --- | --- |
98
125
  | `PREMISES HOLD` | every load-bearing claim checked out, or there were none | proceed to the Red step |
99
- | `PREMISE FALSE` | a load-bearing claim is contradicted by the code | **stop and report** |
100
- | `UNVERIFIABLE` | a load-bearing claim could not be decided from the code | report it as unverifiable, name what would decide it, and proceed only under a **labelled assumption** |
126
+ | `PREMISE FALSE` | a load-bearing claim is contradicted by the code — or, for an external premise, by its four-part record | **stop and report** |
127
+ | `UNVERIFIABLE` | a load-bearing claim could not be decided from the code — or, for an external premise, has no complete four-part record | report it as unverifiable, name what would decide it, and proceed only under a **labelled assumption** |
101
128
  | `UNMEASURED` | **second entry point only:** a sentence you wrote asserts behaviour, and nothing you can point at backs it | **delete the sentence, or turn it into a pointer to the test that proves it** — before the gate |
102
129
 
103
130
  🔴 **The edit belongs to the calling session, not to this skill.** It reports; the
@@ -223,7 +250,9 @@ is invisible to every gate downstream.
223
250
  - **It reads the code, so it only catches what the code can contradict.** A claim
224
251
  about runtime behaviour ("this times out in production"), about intent, or
225
252
  about a system this repository does not contain is `UNVERIFIABLE` here, not
226
- false — say so rather than guessing.
253
+ false — say so rather than guessing. For an external API, CLI or library the
254
+ way out is the four-part record "External premises" asks for, which can make
255
+ the claim hold or prove it false.
227
256
  - **Each entry point is one pass, at its own end of the task.** A premise that goes
228
257
  false *between* them — a merge lands, a dependency moves — is a staleness stop rule
229
258
  (`.claude/rules/autonomy.md`), not this skill. Neither pass watches the other's
@@ -264,7 +264,9 @@ function main() {
264
264
 
265
265
  const budget = budgetMs(process.env);
266
266
  if (budget.notice) process.stderr.write(`gate-stop-dod: ${budget.notice}\n`);
267
- const deadline = Date.now() + budget.ms;
267
+ // Elapsed time, so the monotonic clock: a step of the wall clock must neither
268
+ // lengthen nor shorten the budget.
269
+ const deadline = performance.now() + budget.ms;
268
270
 
269
271
  for (const command of usable) {
270
272
  // A 1 ms floor rather than a branch for "the budget is already gone": the
@@ -276,7 +278,7 @@ function main() {
276
278
  shell: true,
277
279
  encoding: 'utf8',
278
280
  stdio: ['ignore', 'pipe', 'pipe'],
279
- timeout: Math.max(1, deadline - Date.now()),
281
+ timeout: Math.max(1, Math.ceil(deadline - performance.now())),
280
282
  // Output volume is not a verdict — below this bound. Past it the child is
281
283
  // killed and its result is unknown, which the error branch treats as
282
284
  // unmeasured rather than as a failure or a pass. The old 1 MB default
@@ -50,6 +50,18 @@ A reviewer whose definition pins its model is never dispatched with a call-site
50
50
  dispatching session's, and `guard-subagent-model` refuses the override
51
51
  (`docs/decisions/subagent-routing.md`).
52
52
 
53
+ ## Review findings
54
+
55
+ A blocking finding — from `code-reviewer`, `security-scanner`,
56
+ `prose-reviewer`, or a review a repository rule names — is **resolved with
57
+ evidence, not argued away**. It closes one of two ways: the change is fixed
58
+ and the reviewer reads the fixed head, or the finding's premise is shown
59
+ false with something the reviewer can re-check — a `file:line`, a test name,
60
+ a command and its output. A reply that disagrees with neither is not a
61
+ resolution, and neither is softening the flagged sentence or dropping the
62
+ reviewer from the fan-out. This holds with or without the opt-in workflow
63
+ layer, whoever drives the fan-out.
64
+
53
65
  ## PR flow
54
66
 
55
67
  This applies **once the project has a remote and CI checks** — a freshly
@@ -122,8 +134,8 @@ travels one path to merge, in this order:
122
134
  the session itself drives the same fan-out** — dispatch each reviewer the
123
135
  table and the triggers above name, read every verdict, and resolve every
124
136
  blocking finding the same way `pr-ship` would; nothing about the review
125
- floor changes with or without the skill. Blocking findings are resolved,
126
- not argued with, either way.
137
+ floor changes with or without the skill. Blocking findings are resolved
138
+ as "Review findings" above says, either way.
127
139
 
128
140
  **A verdict is a block, not a sentence.** Every gate ends its report with one
129
141
  fenced `json` block of the shape `.claude/scripts/lib/verdict.mjs` defines
@@ -91,13 +91,40 @@ At the **second** entry point this inverts for one case: a test is exactly what
91
91
  a behaviour claim, so reading it is the point. The rule above is about not letting a
92
92
  test's *name* stand in for what the code does; §4 says which artifacts count.
93
93
 
94
+ ### External premises
95
+
96
+ A claim about something this repository does not contain — an external API, a
97
+ CLI, a library — is a premise like any other, and §2 decides whether it is
98
+ load-bearing. "The provider accepts a `--json` flag" or "the SDK retries on 429"
99
+ changes what gets built if it is false. The code here cannot settle it, so this
100
+ is the one case where documentation is the evidence, and it is recorded in four
101
+ parts:
102
+
103
+ - **version** — the exact version this project uses (the lockfile, the installed
104
+ binary's own version output), not "latest";
105
+ - **source** — an authoritative one for that version: the vendor's reference
106
+ documentation, its changelog, or the tool's own `--help`;
107
+ - **date** — when you read it, because documentation changes under a fixed URL;
108
+ - **quote** or pointer — the sentence that says it, short enough to re-check, or
109
+ the exact section it sits in.
110
+
111
+ A complete record that supports the claim lets it hold. One that contradicts it
112
+ is `PREMISE FALSE`, and the work stops exactly as it does for a claim the code
113
+ contradicts. The four parts go in the report's `evidence`, and in the blocker's
114
+ `note` when there is one.
115
+
116
+ A claim missing any of the four stays `UNVERIFIABLE`: being widely believed, or
117
+ true of an earlier version, does not promote it to a fact. This skill adds no
118
+ network tooling — where the session cannot reach the source, the claim is
119
+ `UNVERIFIABLE` and travels as a labelled assumption, as §4 says.
120
+
94
121
  ## 4. The verdict
95
122
 
96
123
  | Verdict | When | What happens next |
97
124
  | --- | --- | --- |
98
125
  | `PREMISES HOLD` | every load-bearing claim checked out, or there were none | proceed to the Red step |
99
- | `PREMISE FALSE` | a load-bearing claim is contradicted by the code | **stop and report** |
100
- | `UNVERIFIABLE` | a load-bearing claim could not be decided from the code | report it as unverifiable, name what would decide it, and proceed only under a **labelled assumption** |
126
+ | `PREMISE FALSE` | a load-bearing claim is contradicted by the code — or, for an external premise, by its four-part record | **stop and report** |
127
+ | `UNVERIFIABLE` | a load-bearing claim could not be decided from the code — or, for an external premise, has no complete four-part record | report it as unverifiable, name what would decide it, and proceed only under a **labelled assumption** |
101
128
  | `UNMEASURED` | **second entry point only:** a sentence you wrote asserts behaviour, and nothing you can point at backs it | **delete the sentence, or turn it into a pointer to the test that proves it** — before the gate |
102
129
 
103
130
  🔴 **The edit belongs to the calling session, not to this skill.** It reports; the
@@ -223,7 +250,9 @@ is invisible to every gate downstream.
223
250
  - **It reads the code, so it only catches what the code can contradict.** A claim
224
251
  about runtime behaviour ("this times out in production"), about intent, or
225
252
  about a system this repository does not contain is `UNVERIFIABLE` here, not
226
- false — say so rather than guessing.
253
+ false — say so rather than guessing. For an external API, CLI or library the
254
+ way out is the four-part record "External premises" asks for, which can make
255
+ the claim hold or prove it false.
227
256
  - **Each entry point is one pass, at its own end of the task.** A premise that goes
228
257
  false *between* them — a merge lands, a dependency moves — is a staleness stop rule
229
258
  (`.claude/rules/autonomy.md`), not this skill. Neither pass watches the other's
@@ -13,14 +13,16 @@
13
13
  "0.7.1",
14
14
  "0.8.0",
15
15
  "0.9.0",
16
- "0.9.1"
16
+ "0.9.1",
17
+ "0.10.0"
17
18
  ],
18
19
  "files": {
19
20
  ".agents/skills/check-premises/SKILL.md": {
20
21
  "since": "0.5.0",
21
22
  "hashes": [
22
23
  "e228eaebcd1dfa0e490f8f4260e349040bd742fdb6d2313698fd7925f8a7b058",
23
- "403f26470ec0a9c853aa69fe8a114fbc3dfb3bf6e6094eecb8a836f153aa1a37"
24
+ "403f26470ec0a9c853aa69fe8a114fbc3dfb3bf6e6094eecb8a836f153aa1a37",
25
+ "8295da3644136fbe0b22dcc97e9c2dad154f0a9d87fed374542bb712df24d9f4"
24
26
  ]
25
27
  },
26
28
  ".agents/skills/loop/SKILL.md": {
@@ -32,13 +34,15 @@
32
34
  "18f4300de4c4c7ea380d726fb109fa224da950ef0a4cea5015ab1d408b823be5",
33
35
  "0a1b6575f6df8139766c8e71ba7320e14d2a5a5ed8ab26b6b43f7a006153d37d",
34
36
  "a0d11ca1745095cc5b68777915161f16a6d1602c21f6d273f475d1d07c4b8546",
35
- "b47bdf0d7a2f6c5b2034b8f6d683ad2b3c83bd65d15baf7de9b58cc4689d0ab1"
37
+ "b47bdf0d7a2f6c5b2034b8f6d683ad2b3c83bd65d15baf7de9b58cc4689d0ab1",
38
+ "e48766714f4bceb5113c7036c380dfdbe07229feaf9b57fe4168660c5c90feb2"
36
39
  ]
37
40
  },
38
41
  ".agents/skills/new-invariant/SKILL.md": {
39
42
  "since": "0.5.0",
40
43
  "hashes": [
41
- "b15abfba29cd52b2fc29f30d63803bc0fc2741429c8faab21d2f907ee1ce0828"
44
+ "b15abfba29cd52b2fc29f30d63803bc0fc2741429c8faab21d2f907ee1ce0828",
45
+ "641aa59c25a7a15c56eeddc57baa26112289b8917434b2709484c925c64c54a4"
42
46
  ]
43
47
  },
44
48
  ".agents/skills/new-invariant/guard-invariant.example.mjs": {
@@ -66,7 +70,8 @@
66
70
  "a2fb0d03c65701af9d2d69cbcb2582ae573f097b1e1071eb2916e5e4f7832b37",
67
71
  "9616e4767942b2021e34ab7bb76eec9a5c280cc608a0756abb02743741d5fc8a",
68
72
  "a6340b95a03000b89fb27f5357cdd9c7ec12b714054b5334b61a30da600405e8",
69
- "dc1d9c02879e383448f2336ae6433f960f86e8f8efb4ab8ccf9a17a5f7f524c3"
73
+ "dc1d9c02879e383448f2336ae6433f960f86e8f8efb4ab8ccf9a17a5f7f524c3",
74
+ "75a5bc3e1aa3fdef96b59edc90a3cb4b996708710fe16f65038e0e21853df4e8"
70
75
  ]
71
76
  },
72
77
  ".agents/skills/ro-debug/SKILL.md": {
@@ -78,7 +83,8 @@
78
83
  ".agents/skills/worktree-task/SKILL.md": {
79
84
  "since": "0.5.0",
80
85
  "hashes": [
81
- "1eedb9b3429f2d032181606924815dd8befbe7a79ba209655858fcdac189793c"
86
+ "1eedb9b3429f2d032181606924815dd8befbe7a79ba209655858fcdac189793c",
87
+ "8fc6dbdd40b81e06d939c4bc2cf3e3c1ac7debd1acf8698e56a087a220404626"
82
88
  ]
83
89
  },
84
90
  ".claude/agents/cdk-diff-reviewer.md": {
@@ -98,7 +104,14 @@
98
104
  "ec403373ef6bc0575d61c6ca11f82792817b272221fad8317ef6c45388b52628",
99
105
  "f125cfbce848cdaa91fd81e961808b4dbde452287959ec2cf10b905ee3ede789",
100
106
  "8ede9297480c889ec6d6caf8d076e7d69111fb472933dcf5a48b9a8425fe50c2",
101
- "f12cb04871578eca3c9c36a1c2d60f5ae15a0e9094ecfc7c704c341756de4e3e"
107
+ "f12cb04871578eca3c9c36a1c2d60f5ae15a0e9094ecfc7c704c341756de4e3e",
108
+ "f260b1f2d60c57b96b2d735dbc7eb29890638ca9dedec467ff4784f6d8d8fab5"
109
+ ]
110
+ },
111
+ ".claude/agents/implementation-agent.md": {
112
+ "since": "0.10.0",
113
+ "hashes": [
114
+ "05ef7c2543d6a9ff177fa8cf514b2c6eaf581141d41b0f41f690d5685c00f56a"
102
115
  ]
103
116
  },
104
117
  ".claude/agents/prose-reviewer.md": {
@@ -108,7 +121,8 @@
108
121
  "0e4307cd9cf8ef723d79e98b1af46a34c6912a6aa925e2179d939cb83c8f2a44",
109
122
  "7e8eaa2b4af9d65e1d10bf50c32c1d138fb2f8b9ba6e6d0880cade0524324d9d",
110
123
  "ed1c05d3938c0b4f277f1bf4af8641460def830569049ff0697c9bda14518b78",
111
- "7aed3bfc955efc94bbeda3f866d25e2b253c88facaa2beed73939182a9f845b2"
124
+ "7aed3bfc955efc94bbeda3f866d25e2b253c88facaa2beed73939182a9f845b2",
125
+ "717160ca5917a4b2c4896214bd393039a364d22759bddb8e7d31c43a68398753"
112
126
  ]
113
127
  },
114
128
  ".claude/agents/security-scanner.md": {
@@ -117,14 +131,16 @@
117
131
  "43e5d59315483e369ad19f3070175f146e88deabd3a12dc09339ac4fac0f2aee",
118
132
  "e01467a38a0183be46ba45b05d44f663fbf4b139ceaecb91b5d096f3286a3fcd",
119
133
  "844e215af7d80bd85f62ca937c79bea59c8d8cd7c97353937ce62f7747eb9df7",
120
- "7c0bc189521955f2d126bac0ff97ab4fa252b05067692a5a3bb6cda232ddfaa3"
134
+ "7c0bc189521955f2d126bac0ff97ab4fa252b05067692a5a3bb6cda232ddfaa3",
135
+ "f456e508033dd7815d26f5e1057a3e85ed062ff31b51e992f4e063a5629b9b87"
121
136
  ]
122
137
  },
123
138
  ".claude/agents/test-writer.md": {
124
139
  "since": "0.2.0",
125
140
  "hashes": [
126
141
  "333feef12383dea51791ae4923c44ba542438de793f0792fb51d96aa15b8b1b8",
127
- "fce976938fdd1154641e405a557b67161daa34cf84de9ad35fa14287d13b7f9c"
142
+ "fce976938fdd1154641e405a557b67161daa34cf84de9ad35fa14287d13b7f9c",
143
+ "97d0550a3fb9fab00901f23c6270f9463eded0afce05a636f91d93e28bbd9d9d"
128
144
  ]
129
145
  },
130
146
  ".claude/hooks/block-no-verify.mjs": {
@@ -208,7 +224,8 @@
208
224
  "hashes": [
209
225
  "c472419f1076ea3707d640cd5246c0e69a94c55455f6648e2cbaf300a382c8df",
210
226
  "17c299ea4c6202745a3f8813aaef7711eb9030bf0a220cca77b58cac98c95940",
211
- "860a5d4ba02b59971f80bf79a9081f48f11022d46fe66b0470f0abc4ed9633e4"
227
+ "860a5d4ba02b59971f80bf79a9081f48f11022d46fe66b0470f0abc4ed9633e4",
228
+ "446d6d7c1914cf879e38c4bb6fcb454bcde95ee07a4cd2b421abd77253e58be8"
212
229
  ]
213
230
  },
214
231
  ".claude/hooks/lib/edit-input.mjs": {
@@ -253,7 +270,8 @@
253
270
  "530f63a4b29a5cc67867fa7b23575db81d42609ae401bfc4089b05194c586c21",
254
271
  "a7359408d56e6bdbf268019ad9193d5fbf4a872385a65ba08564204e6a8f5b5f",
255
272
  "619999500386b3d2867bbd4799f86a800fe7e168083c6e35fb2e629a2c926c5f",
256
- "532dc5cdffb1464fb68889628664b1e7e345272c806cf2ccb7a063c6a3a7f1bf"
273
+ "532dc5cdffb1464fb68889628664b1e7e345272c806cf2ccb7a063c6a3a7f1bf",
274
+ "be3b5b77fb97d883d053b08c1fbe715e300b5a073a3ce7a396e6e4f045a33d8a"
257
275
  ]
258
276
  },
259
277
  ".claude/rules/aws-cdk.md": {
@@ -272,7 +290,8 @@
272
290
  "389484f0846c3dd8207c0f41bd56409103fbcc7f58b94b1bf4bd1d81b5af0e87",
273
291
  "a2e10499a0bcd2cdc32f3986d27b59077c86e524d40323faabb2e5d78afc002c",
274
292
  "c94c33d7ccbd46f191948325dfc7f68ce13b0d3a9470215de1de3f06b1499111",
275
- "ce90c1e697fdd444ca3fe2203d7991645f2c284c413ae187e4d6d6c618af52c9"
293
+ "ce90c1e697fdd444ca3fe2203d7991645f2c284c413ae187e4d6d6c618af52c9",
294
+ "aa0afa471fe7e3d06a42c61e9e2fcb14b2791ecf805cc3638cb13d2ee8aa9827"
276
295
  ]
277
296
  },
278
297
  ".claude/rules/node-ts.md": {
@@ -289,7 +308,8 @@
289
308
  "dbe8025e10583e03fee5056e88aa6b73e4399453711d9156d82528a02d6e0402",
290
309
  "9e60d0300e856a9b3f81ab748bf2c0a9de27233ad0aa58a8c7141413fa0f3cae",
291
310
  "c8e9849a8fccd4e1e60b1ddc82937eb15aceb7f7c2afbd151b05e1bc966bfd2a",
292
- "aa34a1eab572964b328ffa0044e96acb3e1c31491df0183460f06e5e6bba3b76"
311
+ "aa34a1eab572964b328ffa0044e96acb3e1c31491df0183460f06e5e6bba3b76",
312
+ "17330550da4708a7dd58d066a4a4b2614ecfd36a3e73120f8a9edf410f36c9bb"
293
313
  ]
294
314
  },
295
315
  ".claude/scripts/decision-router.mjs": {
@@ -297,7 +317,8 @@
297
317
  "hashes": [
298
318
  "783b5b455a56c6a3e3723f3c6da861e0a945562acb686b86ab9d0e16dbd552a6",
299
319
  "c7a045d3687429c5047f09b4033ffffcecfede2edba736106f5e1048eb3cf27f",
300
- "8e9fe877949955e8f698701f969784b288bc95943c3bcea3bd4368db82e8e43e"
320
+ "8e9fe877949955e8f698701f969784b288bc95943c3bcea3bd4368db82e8e43e",
321
+ "6c1dcd297e1681d9b10ca452230bcad0a520be01e0ca949d82b75b74fb07153f"
301
322
  ]
302
323
  },
303
324
  ".claude/scripts/detect-missed-gate.mjs": {
@@ -305,14 +326,16 @@
305
326
  "hashes": [
306
327
  "bad5ce92a1c1f97ef2c25ebd216e945329e544337aa33e530631ed922ea8c495",
307
328
  "edcebe8ac78cf832a42e3b6fb70fe458a9fec4cb5f8b7b4cf276efc4f9c06a64",
308
- "120ee3b90497b9023528a7f8b4e7f48c30a578fad62d94d55d1d280240e5e3a2"
329
+ "120ee3b90497b9023528a7f8b4e7f48c30a578fad62d94d55d1d280240e5e3a2",
330
+ "7585531f8773e969f3dd14fa36385ebedafed4bba3ab2f9a74fbcb89b1f5612c"
309
331
  ]
310
332
  },
311
333
  ".claude/scripts/doctor.mjs": {
312
334
  "since": "0.6.0",
313
335
  "hashes": [
314
336
  "eb31d2726ab95d6b8fd091b1daf8a21f403a46c801590baf4fecee5c1bec64b9",
315
- "5154ad9abdcb37fea58b0da78fd71842c705774ffe48fd8050c302da17e73913"
337
+ "5154ad9abdcb37fea58b0da78fd71842c705774ffe48fd8050c302da17e73913",
338
+ "3cc6a663d104d6ee702b3131c2b6a18277e74a0f2b2380389c3e4d87f0c74d53"
316
339
  ]
317
340
  },
318
341
  ".claude/scripts/git-env.mjs": {
@@ -325,7 +348,8 @@
325
348
  ".claude/scripts/lib/claim-records.mjs": {
326
349
  "since": "0.7.0",
327
350
  "hashes": [
328
- "acb1d5702a826832977e7eb01b76c50cab19292528901f1b33693e561dbb0a24"
351
+ "acb1d5702a826832977e7eb01b76c50cab19292528901f1b33693e561dbb0a24",
352
+ "17101c99b7341dba7982570ac8b58bae6f97ddf346713c90d90e8ee484ff4c33"
329
353
  ]
330
354
  },
331
355
  ".claude/scripts/lib/gate-coverage.mjs": {
@@ -456,14 +480,16 @@
456
480
  ".claude/scripts/queue/state.mjs": {
457
481
  "since": "0.5.0",
458
482
  "hashes": [
459
- "ff7e7a46eb71989c2a7be7bc3f77922b49ad9071b2dec49787d8b7be087edb5b"
483
+ "ff7e7a46eb71989c2a7be7bc3f77922b49ad9071b2dec49787d8b7be087edb5b",
484
+ "ca1cb61ddac9f92a43aa4cc6ebb6d6bc66fa200de7989f785c059728e060d2bc"
460
485
  ]
461
486
  },
462
487
  ".claude/scripts/reconcile-external-prs.mjs": {
463
488
  "since": "0.3.0",
464
489
  "hashes": [
465
490
  "a326acd64ea19a50d093c91e711ad0234eb05c76d00066db5657c22f4355c190",
466
- "1b14ee0302932a40611011a57410d7f45d6c2d54799847b94f01f448de7c1827"
491
+ "1b14ee0302932a40611011a57410d7f45d6c2d54799847b94f01f448de7c1827",
492
+ "354c713747e16ce7df51e8230c73f38bf7164ad7abd18ec1caca3f8d8546c224"
467
493
  ]
468
494
  },
469
495
  ".claude/scripts/revalidate.mjs": {
@@ -472,7 +498,8 @@
472
498
  "32f847a2a3a5136cabcb42f6447da9f8cf98e2d20512212ee5201461128d7798",
473
499
  "b62348a27bcaa1d62a0e4ddd53873fab6cb75f9af8e8c69d24f6ce81c592c4e3",
474
500
  "b151045e8083c398e94571b35dc9568dfa0102abcb847cdf764f6f694914d53e",
475
- "f756b7ccc2a4459e58b2125408de1f91372cd6093bf6f4ed14e26dc2eb4190fc"
501
+ "f756b7ccc2a4459e58b2125408de1f91372cd6093bf6f4ed14e26dc2eb4190fc",
502
+ "00bddb533f9639be7da7124f08464ee7b8f78fca5cd1d4514adb608d0f4ae521"
476
503
  ]
477
504
  },
478
505
  ".claude/scripts/revalidation-report.mjs": {
@@ -528,7 +555,8 @@
528
555
  "713718fbb2cda132f05665b29b8f1108a6305729b5e7c789d2053d117c13e08e",
529
556
  "e588ab05bee707a099c80c9ea399008be31488e616f3db3c0598f66f3d1b3a52",
530
557
  "a180578d6e6de6a21900ff2f8a8ade2242170d16d2dd95574e5004435d870b9b",
531
- "44695f83e445c7da3257556a3decc70e79ef46d19da394d4d5dd4c9268c0b429"
558
+ "44695f83e445c7da3257556a3decc70e79ef46d19da394d4d5dd4c9268c0b429",
559
+ "a13952579f1752862133a5746f2c0e8696b9548c2c18eb6ff0bb6a54772cea3c"
532
560
  ]
533
561
  },
534
562
  ".claude/skills/check-premises/SKILL.md": {
@@ -536,7 +564,8 @@
536
564
  "hashes": [
537
565
  "d69396da276f748c89ca0284fcd606ce70da8a791defafe9c9b27ce5f8ffd29e",
538
566
  "e228eaebcd1dfa0e490f8f4260e349040bd742fdb6d2313698fd7925f8a7b058",
539
- "403f26470ec0a9c853aa69fe8a114fbc3dfb3bf6e6094eecb8a836f153aa1a37"
567
+ "403f26470ec0a9c853aa69fe8a114fbc3dfb3bf6e6094eecb8a836f153aa1a37",
568
+ "8295da3644136fbe0b22dcc97e9c2dad154f0a9d87fed374542bb712df24d9f4"
540
569
  ]
541
570
  },
542
571
  ".claude/skills/loop/SKILL.md": {
@@ -552,13 +581,15 @@
552
581
  "18f4300de4c4c7ea380d726fb109fa224da950ef0a4cea5015ab1d408b823be5",
553
582
  "0a1b6575f6df8139766c8e71ba7320e14d2a5a5ed8ab26b6b43f7a006153d37d",
554
583
  "a0d11ca1745095cc5b68777915161f16a6d1602c21f6d273f475d1d07c4b8546",
555
- "b47bdf0d7a2f6c5b2034b8f6d683ad2b3c83bd65d15baf7de9b58cc4689d0ab1"
584
+ "b47bdf0d7a2f6c5b2034b8f6d683ad2b3c83bd65d15baf7de9b58cc4689d0ab1",
585
+ "e48766714f4bceb5113c7036c380dfdbe07229feaf9b57fe4168660c5c90feb2"
556
586
  ]
557
587
  },
558
588
  ".claude/skills/new-invariant/SKILL.md": {
559
589
  "since": "0.3.0",
560
590
  "hashes": [
561
- "b15abfba29cd52b2fc29f30d63803bc0fc2741429c8faab21d2f907ee1ce0828"
591
+ "b15abfba29cd52b2fc29f30d63803bc0fc2741429c8faab21d2f907ee1ce0828",
592
+ "641aa59c25a7a15c56eeddc57baa26112289b8917434b2709484c925c64c54a4"
562
593
  ]
563
594
  },
564
595
  ".claude/skills/new-invariant/guard-invariant.example.mjs": {
@@ -589,7 +620,8 @@
589
620
  "a2fb0d03c65701af9d2d69cbcb2582ae573f097b1e1071eb2916e5e4f7832b37",
590
621
  "9616e4767942b2021e34ab7bb76eec9a5c280cc608a0756abb02743741d5fc8a",
591
622
  "a6340b95a03000b89fb27f5357cdd9c7ec12b714054b5334b61a30da600405e8",
592
- "dc1d9c02879e383448f2336ae6433f960f86e8f8efb4ab8ccf9a17a5f7f524c3"
623
+ "dc1d9c02879e383448f2336ae6433f960f86e8f8efb4ab8ccf9a17a5f7f524c3",
624
+ "75a5bc3e1aa3fdef96b59edc90a3cb4b996708710fe16f65038e0e21853df4e8"
593
625
  ]
594
626
  },
595
627
  ".claude/skills/ro-debug/SKILL.md": {
@@ -601,7 +633,8 @@
601
633
  ".claude/skills/worktree-task/SKILL.md": {
602
634
  "since": "0.3.0",
603
635
  "hashes": [
604
- "1eedb9b3429f2d032181606924815dd8befbe7a79ba209655858fcdac189793c"
636
+ "1eedb9b3429f2d032181606924815dd8befbe7a79ba209655858fcdac189793c",
637
+ "8fc6dbdd40b81e06d939c4bc2cf3e3c1ac7debd1acf8698e56a087a220404626"
605
638
  ]
606
639
  },
607
640
  ".codex/agents/cdk-diff-reviewer.toml": {
@@ -617,7 +650,14 @@
617
650
  "hashes": [
618
651
  "e0e3475404c95402f33d77ebb14001e289d26bb429205a0a73bdcef99b4a62c7",
619
652
  "9ec92775791907f068d85ba58489236bd2bee69a8d769554ac530e8eadd5e374",
620
- "180c182cc909cc0b6c06cfa286f528f22b77189eee49cac067fdaaf2920f8bae"
653
+ "180c182cc909cc0b6c06cfa286f528f22b77189eee49cac067fdaaf2920f8bae",
654
+ "29b4de4273097fc9e6c1c3e41c650fa20d95fa34b406365aabab62a6ae89b686"
655
+ ]
656
+ },
657
+ ".codex/agents/implementation-agent.toml": {
658
+ "since": "0.10.0",
659
+ "hashes": [
660
+ "9a508a74957cf00345d559f6c5d06a91695938193b50fb55b6231991805c1d7e"
621
661
  ]
622
662
  },
623
663
  ".codex/agents/prose-reviewer.toml": {
@@ -626,7 +666,8 @@
626
666
  "80b4631502d95c619ad060ce02cc8702b12574758ba7df8337ed63efa15d764d",
627
667
  "cfd516f72acdfd197c59ac3cbdd39d7b175976dbd3d9eef52825dfdc4f1e5b60",
628
668
  "8687eacf0ad707a4f887e0714e82fca23fd005fa9ec8824faedfe99ca46333e1",
629
- "7c37e4dbd94980bee16396d0d46d97c5079e295d3eed4b3ed8f98d701e57b10d"
669
+ "7c37e4dbd94980bee16396d0d46d97c5079e295d3eed4b3ed8f98d701e57b10d",
670
+ "ff1fc0f238d34140ef7b2b5ba4ee7971ee9899d55ab46f87263990f1dd820896"
630
671
  ]
631
672
  },
632
673
  ".codex/agents/security-scanner.toml": {
@@ -634,14 +675,16 @@
634
675
  "hashes": [
635
676
  "9ee408789f237a0b55aac6a2472682a08f8696e1d1ff4918ea72766ac8535499",
636
677
  "bc9aacca1ca3ed4ceac485f7cd1c6ff5a5405ac7be83419d6145499cc560ee91",
637
- "b529f02056948ff0ca179c96d9d47962c9c8064feccb68d3c970e7b1a2513fc9"
678
+ "b529f02056948ff0ca179c96d9d47962c9c8064feccb68d3c970e7b1a2513fc9",
679
+ "60f9c2d527bef281c5cf8e905db66199064c9436dbbe7a0e81c6391e189a06b6"
638
680
  ]
639
681
  },
640
682
  ".codex/agents/test-writer.toml": {
641
683
  "since": "0.5.0",
642
684
  "hashes": [
643
685
  "bb89d93f57d70885d98cfbe428caa524e9c00e1ce30da235ed3318c1ba3c9606",
644
- "ec9e61b2c16c97ed26d5bdda2b0f715a41b80c0af549d0f2bbb96d6ca4c4d8d7"
686
+ "ec9e61b2c16c97ed26d5bdda2b0f715a41b80c0af549d0f2bbb96d6ca4c4d8d7",
687
+ "770e0e338620ecff893e044defe0703f4b63281ca26de979f02453e2a0f04e21"
645
688
  ]
646
689
  },
647
690
  ".codex/config.toml": {
@@ -656,7 +699,8 @@
656
699
  "c676647d585ec87427545a391598706ecaa74dfe413a7e05877e336bf8942874",
657
700
  "89d999c068ef5b6e48913c15a165359e66b1f505b9f97c145d8c730cbf42d09a",
658
701
  "1fc2fc35b04fa4ad0859841af72f45695bc346d1a1a9b20ba5d971d48888a910",
659
- "fa9a34eb9f889910e55269b76172608b989d553583de38af34316a31f4ad570b"
702
+ "fa9a34eb9f889910e55269b76172608b989d553583de38af34316a31f4ad570b",
703
+ "f3eaf4a9a2c0af418a6ecf54b6d7d32065033909907ea237d51423c9129f44a7"
660
704
  ]
661
705
  },
662
706
  ".rig/revalidation.json": {
@@ -669,7 +713,8 @@
669
713
  "since": "0.5.0",
670
714
  "hashes": [
671
715
  "616ab573d3cf4b603bb4bfbc5e7631d17ebaa696af16474845fdaf35f41d0a97",
672
- "406c9a0a0e58e78788a10186b9e10b48f4ed215b6d68504a4fbb71e5ee506f85"
716
+ "406c9a0a0e58e78788a10186b9e10b48f4ed215b6d68504a4fbb71e5ee506f85",
717
+ "93f9b4ed7a49df9c83b74fd728fb3e0f83ff7c7e84f71f51d26c89b84cd091bd"
673
718
  ]
674
719
  },
675
720
  "CLAUDE.md": {
@@ -679,7 +724,8 @@
679
724
  "8a4f5fab7cbaf3ba2482035f7ddb3cf6e3a3a3313596d25a856506e970d55db7",
680
725
  "a247fdd1d198777f4963da42ccc10dfd9c372f4bb0488d2c0201a49d6bfd1910",
681
726
  "616ab573d3cf4b603bb4bfbc5e7631d17ebaa696af16474845fdaf35f41d0a97",
682
- "406c9a0a0e58e78788a10186b9e10b48f4ed215b6d68504a4fbb71e5ee506f85"
727
+ "406c9a0a0e58e78788a10186b9e10b48f4ed215b6d68504a4fbb71e5ee506f85",
728
+ "0fcaa12649bec7586fa0d38e1f8c213bf1fb2326f8debc8923f5085dcb4b9284"
683
729
  ]
684
730
  },
685
731
  "PLAN.md": {
@@ -688,7 +734,14 @@
688
734
  "fe7547b40c1ac0d6e2bcba5bf8ae887a03f338c95454a851475cdee1d2b4db31",
689
735
  "1691fba2791d7d893e366e4a18bc120d4e4a96213bebbfb2a28881e13de74389",
690
736
  "e927216c4f179bc42540544f5c70534ce69110dafc3c6fe9a970ac625ebe4678",
691
- "a33d02bcb9e38ac0dd3e689aa8b6637e77044eba5650803db2b6dc0483044d3d"
737
+ "a33d02bcb9e38ac0dd3e689aa8b6637e77044eba5650803db2b6dc0483044d3d",
738
+ "9f88d8d0937be83bf62420267f573ecb3db7c0c39a8469d0e4c6b68c9b8aa56a"
739
+ ]
740
+ },
741
+ "docs/decisions/agents-md-canonical.md": {
742
+ "since": "0.10.0",
743
+ "hashes": [
744
+ "cc5fd1853cb4519767d0fd8915cbcedafff827dccef00d3535b094ce35e67f26"
692
745
  ]
693
746
  },
694
747
  "docs/decisions/closing-a-task.md": {
@@ -702,7 +755,8 @@
702
755
  "hashes": [
703
756
  "30e55d866d9a2c7359e594181070c63b1974d9df36e000caf419229284303a2e",
704
757
  "ebf0ef61407944373c862d37e6a80d4965ece72304b931428c6b3fcc5d9527c4",
705
- "46b68f9130d16a96278e03d0ddb14d99b678c5a239e4667aa79733e632e67505"
758
+ "46b68f9130d16a96278e03d0ddb14d99b678c5a239e4667aa79733e632e67505",
759
+ "5f6bd89f1ad57a080bb717595e0c31eb7fdbec593ea21aceaa4d69daa6647c37"
706
760
  ]
707
761
  },
708
762
  "docs/decisions/content-blind-revalidation.md": {
@@ -726,7 +780,8 @@
726
780
  "docs/decisions/review-lanes.md": {
727
781
  "since": "0.5.0",
728
782
  "hashes": [
729
- "1ba78f5d928db0c288b4c3b818cdc25ae82c2524267d069030f9c71c4b38fd71"
783
+ "1ba78f5d928db0c288b4c3b818cdc25ae82c2524267d069030f9c71c4b38fd71",
784
+ "0935e4bee6a6c3c76cd28d8e924381f1d3fcc941953c70609c00a3461e7be480"
730
785
  ]
731
786
  },
732
787
  "docs/decisions/run-directory.md": {
@@ -735,6 +790,12 @@
735
790
  "6128953b794bb0a3e5b4586d11d9ab8af8d0c37c7e19f556254d0e92a632363b"
736
791
  ]
737
792
  },
793
+ "docs/decisions/session-start-wire-format.md": {
794
+ "since": "0.10.0",
795
+ "hashes": [
796
+ "f7352821e1fbc6a59f815233a038e68c64a01d6803381973bb39c3fcbf72d1c4"
797
+ ]
798
+ },
738
799
  "docs/decisions/spacing-rations-mechanisms.md": {
739
800
  "since": "0.5.0",
740
801
  "hashes": [
@@ -751,7 +812,8 @@
751
812
  "docs/decisions/subagent-routing.md": {
752
813
  "since": "0.9.0",
753
814
  "hashes": [
754
- "97bb882dd066a65a740780a836199ecef8887392c1ece02a92670ecf153988d3"
815
+ "97bb882dd066a65a740780a836199ecef8887392c1ece02a92670ecf153988d3",
816
+ "f4a458a8938f8517b997cd6f0a0036d4eba640cd1ff213683804e7c0e2d02d7a"
755
817
  ]
756
818
  },
757
819
  "docs/decisions/two-empty-endings.md": {
@@ -761,6 +823,12 @@
761
823
  "e771888074498adc2d52e1f50f222056fd95433c4bb9c7e8aa0f3a730da449bd"
762
824
  ]
763
825
  },
826
+ "docs/decisions/workflow-layer-split.md": {
827
+ "since": "0.10.0",
828
+ "hashes": [
829
+ "1006275e907e7083d5cfa331fa4844ac9ed7f738519f788af130e6c82e5d9465"
830
+ ]
831
+ },
764
832
  "journal/README.md": {
765
833
  "since": "0.5.0",
766
834
  "hashes": [
@@ -13,5 +13,6 @@
13
13
  "0.7.1": "52e879b6c103f6ba70493007b6a6466c57ea9824",
14
14
  "0.8.0": "870f9a3ecae2881908ece8ec3e2ac13f84f505f5",
15
15
  "0.9.0": "c27f391e7395accaf09354f255a07e1b9e4710c1",
16
- "0.9.1": "872f7f67f11761c17aad3cbbe26540862581795b"
16
+ "0.9.1": "872f7f67f11761c17aad3cbbe26540862581795b",
17
+ "0.10.0": "279fbf928b811b8ebc7ba2d1c4700ee943b7dab1"
17
18
  }