create-agent-rig 0.6.1 → 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.
- package/CHANGELOG.md +143 -0
- package/package.json +3 -1
- package/templates/agent-os/stack/node-ts/.claude/rules/node-ts.md +2 -3
- package/templates/agent-os/universal/.agents/skills/loop/SKILL.md +122 -81
- package/templates/agent-os/universal/.agents/skills/pr-ship/SKILL.md +19 -12
- package/templates/agent-os/universal/.claude/hooks/block-no-verify.mjs +24 -8
- package/templates/agent-os/universal/.claude/hooks/gate-stop-dod.mjs +3 -6
- package/templates/agent-os/universal/.claude/hooks/guard-bash.mjs +67 -12
- package/templates/agent-os/universal/.claude/hooks/guard-core-purity.mjs +5 -9
- package/templates/agent-os/universal/.claude/hooks/guard-rulebook.mjs +20 -11
- package/templates/agent-os/universal/.claude/hooks/guard-secret-file.mjs +3 -7
- package/templates/agent-os/universal/.claude/hooks/guard-web-boundary.mjs +5 -9
- package/templates/agent-os/universal/.claude/hooks/inject-rules.mjs +3 -6
- package/templates/agent-os/universal/.claude/hooks/lib/hook-input.mjs +164 -0
- package/templates/agent-os/universal/.claude/rules/invariants.md +19 -0
- package/templates/agent-os/universal/.claude/scripts/lib/claim-records.mjs +800 -0
- package/templates/agent-os/universal/.claude/scripts/lib/revalidation-evidence.mjs +56 -0
- package/templates/agent-os/universal/.claude/scripts/lib/shell-tools.mjs +81 -0
- package/templates/agent-os/universal/.claude/scripts/preflight.mjs +19 -1
- package/templates/agent-os/universal/.claude/scripts/queue/core.mjs +17 -66
- package/templates/agent-os/universal/.claude/scripts/queue/github-issues.mjs +29 -7
- package/templates/agent-os/universal/.claude/scripts/queue/index.mjs +159 -23
- package/templates/agent-os/universal/.claude/scripts/queue/jira.mjs +61 -27
- package/templates/agent-os/universal/.claude/scripts/queue/plan-md.mjs +4 -2
- package/templates/agent-os/universal/.claude/scripts/revalidate.mjs +268 -48
- package/templates/agent-os/universal/.claude/scripts/revalidation-report.mjs +32 -15
- package/templates/agent-os/universal/.claude/scripts/run-state.mjs +180 -37
- package/templates/agent-os/universal/.claude/scripts/unattended-flag.mjs +33 -19
- package/templates/agent-os/universal/.claude/settings.json +1 -1
- package/templates/agent-os/universal/.claude/skills/loop/SKILL.md +122 -81
- package/templates/agent-os/universal/.claude/skills/pr-ship/SKILL.md +19 -12
- package/templates/agent-os/universal/.codex/hooks.json +17 -17
- package/templates/agent-os/universal/.rig/revalidation.json +10 -0
- package/templates/agent-os/universal/docs/decisions/codex-adapter.md +3 -2
- package/templates/agent-os/universal/docs/decisions/content-blind-revalidation.md +144 -0
- package/templates/agent-os/universal/docs/decisions/spacing-rations-mechanisms.md +15 -0
- package/templates/agent-os/universal/layers.json +6 -0
- package/templates/hash-history.json +71 -28
- package/templates/release-ledger.json +3 -1
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# Content-blind revalidation claims
|
|
2
|
+
|
|
3
|
+
Status: accepted
|
|
4
|
+
|
|
5
|
+
## Decision
|
|
6
|
+
|
|
7
|
+
SELECT, BEFORE_PR and BEFORE_CLOSE remain the only revalidation checkpoints.
|
|
8
|
+
They share one implementation and one durable baseline: a versioned JSON record
|
|
9
|
+
at `.rig/claims/<ticket>.json`.
|
|
10
|
+
|
|
11
|
+
The first successful SELECT creates the record and reports
|
|
12
|
+
`BASELINE_CREATED`. The task branch must add it to Git. An existing but
|
|
13
|
+
untracked record, or an absent tracked record, is `UNVERIFIABLE`; so is an
|
|
14
|
+
absent record on a resumed SELECT, BEFORE_PR or BEFORE_CLOSE. Each case stops
|
|
15
|
+
automatic progress. Pinned in the generator's
|
|
16
|
+
`test/template/content-blind-revalidation.test.ts` (absent in a generated rig)
|
|
17
|
+
› "creates a versioned content-blind claim and returns BASELINE_CREATED" and ›
|
|
18
|
+
"refuses to resume from an existing claim until Git tracks it", › "refuses a
|
|
19
|
+
deleted tracked claim in a fresh run without take-up markers", and › "refuses
|
|
20
|
+
to recreate a deleted untracked baseline with a %s" (parameterized over a
|
|
21
|
+
readable and a corrupt prior journal), plus
|
|
22
|
+
`test/template/queue-revalidation.test.ts` (absent in a generated rig) ›
|
|
23
|
+
"without a run directory it creates the durable baseline but no run evidence".
|
|
24
|
+
|
|
25
|
+
The record contains SHA-256 fingerprint sets, not source content:
|
|
26
|
+
|
|
27
|
+
- `scope` covers stable ticket scope, workflow state, dependency links and
|
|
28
|
+
configured paired repository facts. Workflow state is fingerprinted against
|
|
29
|
+
the state expected at each checkpoint. The first SELECT expects `open`.
|
|
30
|
+
A successful Jira or GitHub adapter `claim` then writes its observable state
|
|
31
|
+
(`in-progress`) into the same durable claim record as `workflowClaim`; only
|
|
32
|
+
that acknowledgement authorises the state at a resumed SELECT, BEFORE_PR or
|
|
33
|
+
BEFORE_CLOSE. The same state reached without the acknowledgement is external
|
|
34
|
+
drift and moves `scope`. PLAN.md remains `open` because its claim has no
|
|
35
|
+
observable workflow transition. A rollback or any other state also moves it.
|
|
36
|
+
- `commentary` covers comment identifiers and count. It is observed at SELECT
|
|
37
|
+
and BEFORE_PR and becomes hold-authoritative only at BEFORE_CLOSE.
|
|
38
|
+
|
|
39
|
+
Pinned in the generator suite (absent in a generated rig),
|
|
40
|
+
`test/template/content-blind-revalidation.test.ts` › "stays CURRENT
|
|
41
|
+
for marker-only movement and holds on changed scope", › "holds when the target
|
|
42
|
+
branch SHA moves without a tracker edit", › "adapters declare their observable
|
|
43
|
+
claimed workflow state", › "keeps a resumed SELECT current after the Jira
|
|
44
|
+
adapter records its own claim transition", › "GitHub claim records the durable
|
|
45
|
+
transition that makes in-progress CURRENT", › "holds claim:scope at resumed
|
|
46
|
+
SELECT for the same transition made outside the adapter", › "accepts an
|
|
47
|
+
in-progress transition performed by the Jira adapter claim operation", ›
|
|
48
|
+
"holds claim:scope when an external actor moves the item to the expected
|
|
49
|
+
claimed state", › "holds claim:scope when workflow state returns to open after
|
|
50
|
+
the Rig claim transition", and › "defers an added comment through SELECT and
|
|
51
|
+
BEFORE_PR, then holds at BEFORE_CLOSE".
|
|
52
|
+
|
|
53
|
+
`.rig/revalidation.json` is the versioned detection contract. Version 1 is a
|
|
54
|
+
pull model over run-state and journal evidence, with 24-hour accepted latency,
|
|
55
|
+
no push channel, and an explicit list of paired facts. Preflight stops when the
|
|
56
|
+
contract is absent or unsupported. Pinned in the generator suite (absent in a
|
|
57
|
+
generated rig),
|
|
58
|
+
`test/template/content-blind-revalidation.test.ts` › "preflight hard-refuses a
|
|
59
|
+
%s contract as no-detection-contract" and › "accepts the default
|
|
60
|
+
pull/run-state+journal/24h/no-push contract".
|
|
61
|
+
|
|
62
|
+
`updatedAt` take-up markers remain in run state and revalidation events for
|
|
63
|
+
compatibility and attribution. They do not decide drift, baseline creation or
|
|
64
|
+
checkpoint action. `.claude/runs/<run-id>/decisions.jsonl` and `events.jsonl`
|
|
65
|
+
remain append-only evidence for a particular run; the sibling `state.json` is a
|
|
66
|
+
mutable stop-state cache, and none of them is the cross-harness claim store.
|
|
67
|
+
Pinned in the generator suite (absent in a generated rig),
|
|
68
|
+
`test/template/queue-revalidation.test.ts` › "a moved marker stays
|
|
69
|
+
evidence-only while the tracked claim remains CURRENT". First sight versus
|
|
70
|
+
resume is reconstructed from SELECT events in the current and bounded sibling
|
|
71
|
+
run journals. An unreadable bounded journal cannot prove first sight and
|
|
72
|
+
therefore cannot authorise recreation of a missing claim. Neither can a scan
|
|
73
|
+
truncated by its entry or candidate cap: incompleteness is explicit and fails
|
|
74
|
+
closed rather than turning subset absence into first sight.
|
|
75
|
+
|
|
76
|
+
Every blocking detection has a stable content-blind id. A typed outcome names
|
|
77
|
+
that id, records whether action was required and clears only its matching
|
|
78
|
+
run-level hold. An outcome without a boolean `actionRequired` or legacy
|
|
79
|
+
`actionChanged` verdict is malformed and resolves nothing. Filesystem failures
|
|
80
|
+
are reduced to stable logical evidence before they enter a detection id, so
|
|
81
|
+
identical failures have identical ids across harness
|
|
82
|
+
checkouts. The report joins by detection id across runs and retains the
|
|
83
|
+
legacy same-run sequence join for older evidence. Pinned in the generator suite
|
|
84
|
+
(absent in a generated rig),
|
|
85
|
+
`test/template/content-blind-revalidation.test.ts` › "reuses a stable detection
|
|
86
|
+
id for the same drift at the same checkpoint", › "journals a typed resolution
|
|
87
|
+
through the existing outcome command", › "derives false-HOLD from result !=
|
|
88
|
+
CURRENT and actionRequired false, only after resolution", and › "joins a typed
|
|
89
|
+
resolution to its detection across run directories".
|
|
90
|
+
|
|
91
|
+
The run-state hold is a cache of that append-only evidence, not a deletion
|
|
92
|
+
escape hatch. Before selection, the same temporal resolver used by the report
|
|
93
|
+
reconstructs the newest unresolved blocking detection from the current run
|
|
94
|
+
journal when `state.json` has no hold. Revalidation-hold writers use the same
|
|
95
|
+
fail-closed state reader as selection, so a corrupt, symlinked or oversized
|
|
96
|
+
state file cannot be replaced while it may conceal another stop input. Contract
|
|
97
|
+
and paired-fact reads classify a pathname before opening it, stay anchored to
|
|
98
|
+
the opened file descriptor, and reject identity changes during validation.
|
|
99
|
+
Existing claim bytes are read through a bounded no-follow
|
|
100
|
+
descriptor and compared with the tracked Git object; first-baseline creation is
|
|
101
|
+
anchored to the validated claim-directory working directory so a pathname swap
|
|
102
|
+
cannot redirect the write outside the repository.
|
|
103
|
+
The directory's real path and filesystem identity are carried into the writer
|
|
104
|
+
and checked again with the persisted bytes before SELECT reports
|
|
105
|
+
`BASELINE_CREATED`; redirecting it elsewhere inside the repository is refused
|
|
106
|
+
too. Jira commentary declares whether its returned IDs cover `comment.total`;
|
|
107
|
+
an incomplete set is `UNVERIFIABLE`, never a hash of unseen IDs. GitHub CLI's
|
|
108
|
+
unpaginated `comments(first: 100)` window has no total beside it, so exactly 100
|
|
109
|
+
returned comments is also `UNVERIFIABLE`; fewer than the cap proves completion.
|
|
110
|
+
Pinned in the generator's
|
|
111
|
+
`test/template/content-blind-revalidation.test.ts` (absent in a generated rig)
|
|
112
|
+
› "stops with %s when the unresolved journal result is %s", › "%s refuses a
|
|
113
|
+
present %s state instead of replacing unknown stop inputs", › "does not accept
|
|
114
|
+
an external contract swapped in after containment validation", › "classifies a
|
|
115
|
+
contract symlink before attempting to open it", › "rejects a tracked claim %s
|
|
116
|
+
only in the worktree", and › "does not write a baseline outside
|
|
117
|
+
after the claim directory passes containment", plus › "keeps a detection
|
|
118
|
+
unresolved with %s state when its typed outcome has no boolean verdict", › "uses
|
|
119
|
+
the same id for the same missing-contract condition in two absolute roots", ›
|
|
120
|
+
"returns UNVERIFIABLE when the %s truncates prior SELECT evidence", › "refuses
|
|
121
|
+
SELECT when comment.total exceeds the returned comment ids", › "refuses SELECT
|
|
122
|
+
when the transport returns exactly its 100-comment window without a total", and
|
|
123
|
+
› "does not write through an in-repository claim-directory symlink swapped after
|
|
124
|
+
validation".
|
|
125
|
+
|
|
126
|
+
BEFORE_CLOSE proves the tracker state it observed; the later tracker transition
|
|
127
|
+
is a separate API operation. Without a tracker-supplied conditional transition
|
|
128
|
+
or transaction token, this mechanism cannot make those two remote operations
|
|
129
|
+
atomic. A future adapter may consume such a native primitive, but this decision
|
|
130
|
+
does not invent one or treat `updatedAt` as a substitute authority.
|
|
131
|
+
|
|
132
|
+
## Why
|
|
133
|
+
|
|
134
|
+
Tracker timestamps conflate scope edits, comments and workflow transitions.
|
|
135
|
+
They caused false holds on the rig's own writes and cannot survive a harness or
|
|
136
|
+
run boundary as a durable semantic claim. Content-blind sets preserve privacy,
|
|
137
|
+
make each kind of drift explicit and keep the existing checkpoint chain as the
|
|
138
|
+
single authority.
|
|
139
|
+
|
|
140
|
+
## Rollback
|
|
141
|
+
|
|
142
|
+
Revert the mechanism, contract and claim records together. Do not restore
|
|
143
|
+
`updatedAt` as a second authority beside claims: two engines can disagree at a
|
|
144
|
+
checkpoint, which makes neither result safe to automate.
|
|
@@ -116,6 +116,21 @@ with no refusal, and then **holds** the elevated item with `causes: ["spacing"]`
|
|
|
116
116
|
It holds because `core.mjs` is the layer that reads every unrecognised value
|
|
117
117
|
restrictively — the same layer that holds when `selectNext` is called directly.
|
|
118
118
|
|
|
119
|
+
## A board switch does not reset repository risk
|
|
120
|
+
|
|
121
|
+
`lastCompletedTier` is intentionally checkout-global, not board-scoped. Boards
|
|
122
|
+
partition ownership and selection; they do not partition the repository a merge
|
|
123
|
+
changes. If switching the selector chose a fresh tier slot, a run could land an
|
|
124
|
+
unreviewed mechanism from one board, switch to an independent queue, and land a
|
|
125
|
+
second mechanism in the same checkout — exactly the back-to-back chain the
|
|
126
|
+
ration exists to stop.
|
|
127
|
+
|
|
128
|
+
The selector therefore changes only the adapter options. The tier stays in the
|
|
129
|
+
one `.claude/queue.state.json` paired with the checkout's config, and the next
|
|
130
|
+
selection reads it whichever board is active. This is pinned in the generator's
|
|
131
|
+
`test/template/queue-board.test.ts` (absent in a generated rig) › "keeps
|
|
132
|
+
completed-tier spacing repository-global when the active board switches".
|
|
133
|
+
|
|
119
134
|
## What this does not fix
|
|
120
135
|
|
|
121
136
|
The livelock where *every* remaining item is elevated-by-mechanism still exists —
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
".claude/hooks/guard-secret-file.mjs",
|
|
18
18
|
".claude/hooks/guard-rulebook.mjs",
|
|
19
19
|
".claude/hooks/lib/edit-input.mjs",
|
|
20
|
+
".claude/hooks/lib/hook-input.mjs",
|
|
20
21
|
".claude/skills/pr-ship/SKILL.md",
|
|
21
22
|
".claude/skills/loop/SKILL.md",
|
|
22
23
|
".claude/skills/check-premises/SKILL.md",
|
|
@@ -46,9 +47,12 @@
|
|
|
46
47
|
".claude/scripts/revalidate.mjs",
|
|
47
48
|
".claude/scripts/revalidation-report.mjs",
|
|
48
49
|
".claude/scripts/lib/gate-coverage.mjs",
|
|
50
|
+
".claude/scripts/lib/claim-records.mjs",
|
|
51
|
+
".claude/scripts/lib/revalidation-evidence.mjs",
|
|
49
52
|
".claude/scripts/lib/revalidation-points.mjs",
|
|
50
53
|
".claude/scripts/lib/verdict.mjs",
|
|
51
54
|
".claude/scripts/lib/secrets.mjs",
|
|
55
|
+
".claude/scripts/lib/shell-tools.mjs",
|
|
52
56
|
".claude/scripts/queue/core.mjs",
|
|
53
57
|
".claude/scripts/queue/plan-md.mjs",
|
|
54
58
|
".claude/scripts/queue/github-issues.mjs",
|
|
@@ -59,12 +63,14 @@
|
|
|
59
63
|
".claude/scripts/queue/state.mjs",
|
|
60
64
|
".claude/scripts/queue/gate-rounds.mjs",
|
|
61
65
|
".claude/queue.json",
|
|
66
|
+
".rig/revalidation.json",
|
|
62
67
|
"PLAN.md",
|
|
63
68
|
"journal/README.md",
|
|
64
69
|
"docs/decisions/gate-coverage.md",
|
|
65
70
|
"docs/decisions/fail-open-guards.md",
|
|
66
71
|
"docs/decisions/codex-adapter.md",
|
|
67
72
|
"docs/decisions/closing-a-task.md",
|
|
73
|
+
"docs/decisions/content-blind-revalidation.md",
|
|
68
74
|
"docs/decisions/review-lanes.md",
|
|
69
75
|
"docs/decisions/run-directory.md",
|
|
70
76
|
"docs/decisions/spacing-rations-mechanisms.md",
|
|
@@ -6,7 +6,9 @@
|
|
|
6
6
|
"0.3.2",
|
|
7
7
|
"0.4.0",
|
|
8
8
|
"0.5.0",
|
|
9
|
-
"0.6.0"
|
|
9
|
+
"0.6.0",
|
|
10
|
+
"0.6.1",
|
|
11
|
+
"0.6.2"
|
|
10
12
|
],
|
|
11
13
|
"files": {
|
|
12
14
|
".agents/skills/check-premises/SKILL.md": {
|
|
@@ -20,7 +22,9 @@
|
|
|
20
22
|
"since": "0.5.0",
|
|
21
23
|
"hashes": [
|
|
22
24
|
"eb52ef41269018107534d8dc2f552c57698e1677a1e76b5e666b5d09c007cac0",
|
|
23
|
-
"47922b182915cb92696f851174f2e88c4ae8c67dc119ef39a3a597ef1300fab5"
|
|
25
|
+
"47922b182915cb92696f851174f2e88c4ae8c67dc119ef39a3a597ef1300fab5",
|
|
26
|
+
"57f6add0504db45e7577474f97705fe474310e4cd3310cdb348a2c64eabe88cd",
|
|
27
|
+
"18f4300de4c4c7ea380d726fb109fa224da950ef0a4cea5015ab1d408b823be5"
|
|
24
28
|
]
|
|
25
29
|
},
|
|
26
30
|
".agents/skills/new-invariant/SKILL.md": {
|
|
@@ -90,7 +94,8 @@
|
|
|
90
94
|
"hashes": [
|
|
91
95
|
"8d5762849afd328fdc1aabf053ad207f2e306e013665e3ff934b06cbb1bbda38",
|
|
92
96
|
"0e4307cd9cf8ef723d79e98b1af46a34c6912a6aa925e2179d939cb83c8f2a44",
|
|
93
|
-
"7e8eaa2b4af9d65e1d10bf50c32c1d138fb2f8b9ba6e6d0880cade0524324d9d"
|
|
97
|
+
"7e8eaa2b4af9d65e1d10bf50c32c1d138fb2f8b9ba6e6d0880cade0524324d9d",
|
|
98
|
+
"ed1c05d3938c0b4f277f1bf4af8641460def830569049ff0697c9bda14518b78"
|
|
94
99
|
]
|
|
95
100
|
},
|
|
96
101
|
".claude/agents/security-scanner.md": {
|
|
@@ -111,7 +116,8 @@
|
|
|
111
116
|
"since": "0.2.0",
|
|
112
117
|
"hashes": [
|
|
113
118
|
"c7c86de47b601dcb594ba8d8e23b5624ef8d47dafeddbc1aadd351c72e051d83",
|
|
114
|
-
"ece5a81db41bd48695a1a009239837b682d247baf6d19214eaa859a7519ab246"
|
|
119
|
+
"ece5a81db41bd48695a1a009239837b682d247baf6d19214eaa859a7519ab246",
|
|
120
|
+
"1646ed80de5268a886a2e861124cb3b871fa46df1857991a645667601f52253b"
|
|
115
121
|
]
|
|
116
122
|
},
|
|
117
123
|
".claude/hooks/dod-checks.json": {
|
|
@@ -126,54 +132,72 @@
|
|
|
126
132
|
"de1f331eaf93bad6ef0e1734789fd3c4ab07550a85ed2d8ff8888bc6f0bcfb0f",
|
|
127
133
|
"9fb8fad4d95756fb2424a97550aa85dfab0ca8dbcf91e6d0385263ba3b929135",
|
|
128
134
|
"7852205961cb1647b49de5f7e79820c1735b4be897adcf8f5bc3eeb49318ff78",
|
|
129
|
-
"33edb11904e5c4f88626b41c7e649b85d20957a11ff7e1062538917647c3e7f0"
|
|
135
|
+
"33edb11904e5c4f88626b41c7e649b85d20957a11ff7e1062538917647c3e7f0",
|
|
136
|
+
"19202a28355dac1d7a95d29411668cf970006b3044d89a772768ce21793931aa",
|
|
137
|
+
"d2af03ed141fadd0b1e69b230b9277e8f03169757a8e2a679767653ab7828d9a"
|
|
130
138
|
]
|
|
131
139
|
},
|
|
132
140
|
".claude/hooks/guard-bash.mjs": {
|
|
133
141
|
"since": "0.3.0",
|
|
134
142
|
"hashes": [
|
|
135
143
|
"4d396f412fc53094188b14348c5af4e79c7542a182630c20c4687d79899c5b0e",
|
|
136
|
-
"e7a513216ebbceaa7f11ec8fb611de8bb5d5925dfdfd75b779dcb7c0ee6e83cc"
|
|
144
|
+
"e7a513216ebbceaa7f11ec8fb611de8bb5d5925dfdfd75b779dcb7c0ee6e83cc",
|
|
145
|
+
"78047f42dda65076dd2cdb73ad530553db3d4a6f3ea7f0729590ac7286323cb1",
|
|
146
|
+
"5782d91c6c54155ad8bf3e107b6574b3ad4c97baa7be673a5ed252c70b387300"
|
|
137
147
|
]
|
|
138
148
|
},
|
|
139
149
|
".claude/hooks/guard-core-purity.mjs": {
|
|
140
150
|
"since": "0.2.0",
|
|
141
151
|
"hashes": [
|
|
142
152
|
"e36fbb92ee8395c6686fef582f29f2701747074b3b781bed42fe068f5c000bd7",
|
|
143
|
-
"282faa364c2d152808cd92ff7e39da26fd0549a5b2d0af9711d3453be2c666eb"
|
|
153
|
+
"282faa364c2d152808cd92ff7e39da26fd0549a5b2d0af9711d3453be2c666eb",
|
|
154
|
+
"4bdd9a38b1aa4050c109f7809ef924be4d411f5720b6030d57c5264ce3df556d"
|
|
144
155
|
]
|
|
145
156
|
},
|
|
146
157
|
".claude/hooks/guard-rulebook.mjs": {
|
|
147
158
|
"since": "0.6.0",
|
|
148
159
|
"hashes": [
|
|
149
|
-
"4524d715f2e41f4cfdd3d0f9c858817f913aaca5192bda97dff876b4d8c51f19"
|
|
160
|
+
"4524d715f2e41f4cfdd3d0f9c858817f913aaca5192bda97dff876b4d8c51f19",
|
|
161
|
+
"f9e3e4b7c22c4a64f521402419707ff382b05c8deb6310f62e5545db87f7cb4f",
|
|
162
|
+
"493ae58e54b055bd13ba992ee0dbfa2cb9ce9a3637ec345ab8d7cfff95831c60"
|
|
150
163
|
]
|
|
151
164
|
},
|
|
152
165
|
".claude/hooks/guard-secret-file.mjs": {
|
|
153
166
|
"since": "0.5.0",
|
|
154
167
|
"hashes": [
|
|
155
|
-
"f6b81cb7640924d2e56aced58e6b48f65df6638fb5a9099985fe5d673245c3ad"
|
|
168
|
+
"f6b81cb7640924d2e56aced58e6b48f65df6638fb5a9099985fe5d673245c3ad",
|
|
169
|
+
"8c333879dba1f2bf87bbb8e7b257ac51315a74a4cb45252408ca615e2a42d7b5",
|
|
170
|
+
"5bf2896ec5e5f94fab20b52cd22418a4392778b40744602a087e320eeca3f688"
|
|
156
171
|
]
|
|
157
172
|
},
|
|
158
173
|
".claude/hooks/guard-web-boundary.mjs": {
|
|
159
174
|
"since": "0.2.0",
|
|
160
175
|
"hashes": [
|
|
161
176
|
"93d4fa0fd1c18261cc8ef2b1ae2abe3a0200cc4b5a7b1d1d4ae433ca92c514b1",
|
|
162
|
-
"8deda7061122b69d72e708222ef2d38a971bb713269ec7fd1ca3440fe0a1150f"
|
|
177
|
+
"8deda7061122b69d72e708222ef2d38a971bb713269ec7fd1ca3440fe0a1150f",
|
|
178
|
+
"df325e672793e06b8315e64b59a329775d110fc166176074ff3bb8dea557c561"
|
|
163
179
|
]
|
|
164
180
|
},
|
|
165
181
|
".claude/hooks/inject-rules.mjs": {
|
|
166
182
|
"since": "0.2.0",
|
|
167
183
|
"hashes": [
|
|
168
184
|
"c472419f1076ea3707d640cd5246c0e69a94c55455f6648e2cbaf300a382c8df",
|
|
169
|
-
"17c299ea4c6202745a3f8813aaef7711eb9030bf0a220cca77b58cac98c95940"
|
|
185
|
+
"17c299ea4c6202745a3f8813aaef7711eb9030bf0a220cca77b58cac98c95940",
|
|
186
|
+
"860a5d4ba02b59971f80bf79a9081f48f11022d46fe66b0470f0abc4ed9633e4"
|
|
170
187
|
]
|
|
171
188
|
},
|
|
172
189
|
".claude/hooks/lib/edit-input.mjs": {
|
|
173
190
|
"since": "0.5.0",
|
|
174
191
|
"hashes": [
|
|
175
192
|
"4f836bc3ff75a868ffe035b179ac9e7dc1ad7715d520677ff9f6aa5bfdb200eb",
|
|
176
|
-
"0c191d326a7bb0bbfc110e2210f44b4aa39276e8db3779aaa4545cffd4e11863"
|
|
193
|
+
"0c191d326a7bb0bbfc110e2210f44b4aa39276e8db3779aaa4545cffd4e11863",
|
|
194
|
+
"572c671f8f2cad190fe2f144071954ac4d3b1357cab80a19bad584dd3b3768c8"
|
|
195
|
+
]
|
|
196
|
+
},
|
|
197
|
+
".claude/hooks/lib/hook-input.mjs": {
|
|
198
|
+
"since": "0.6.2",
|
|
199
|
+
"hashes": [
|
|
200
|
+
"c40320d90e9585a52026e074e399b6883a0dfed704115b28e8da4dea284cf85f"
|
|
177
201
|
]
|
|
178
202
|
},
|
|
179
203
|
".claude/queue.json": {
|
|
@@ -194,7 +218,8 @@
|
|
|
194
218
|
"c3aa6ea4487adf6d542174f491bf469d8f8563ec7c8c4de63fcd82d6a5ca4fba",
|
|
195
219
|
"ce2104ce697d3e5ed9210e85fe0daeb66b432a36868493f06fec54073a5fff31",
|
|
196
220
|
"530f63a4b29a5cc67867fa7b23575db81d42609ae401bfc4089b05194c586c21",
|
|
197
|
-
"a7359408d56e6bdbf268019ad9193d5fbf4a872385a65ba08564204e6a8f5b5f"
|
|
221
|
+
"a7359408d56e6bdbf268019ad9193d5fbf4a872385a65ba08564204e6a8f5b5f",
|
|
222
|
+
"619999500386b3d2867bbd4799f86a800fe7e168083c6e35fb2e629a2c926c5f"
|
|
198
223
|
]
|
|
199
224
|
},
|
|
200
225
|
".claude/rules/aws-cdk.md": {
|
|
@@ -211,7 +236,8 @@
|
|
|
211
236
|
"b24bbf3e596033719eff463d317ba1e933d0661e48bfa8eafba8d6dca1453a59",
|
|
212
237
|
"518d9b3d7cbae50f30c86d33b2b4bbea11ab3ba6cfef270876e92604b2af5f50",
|
|
213
238
|
"389484f0846c3dd8207c0f41bd56409103fbcc7f58b94b1bf4bd1d81b5af0e87",
|
|
214
|
-
"a2e10499a0bcd2cdc32f3986d27b59077c86e524d40323faabb2e5d78afc002c"
|
|
239
|
+
"a2e10499a0bcd2cdc32f3986d27b59077c86e524d40323faabb2e5d78afc002c",
|
|
240
|
+
"c94c33d7ccbd46f191948325dfc7f68ce13b0d3a9470215de1de3f06b1499111"
|
|
215
241
|
]
|
|
216
242
|
},
|
|
217
243
|
".claude/rules/node-ts.md": {
|
|
@@ -233,7 +259,8 @@
|
|
|
233
259
|
"since": "0.5.0",
|
|
234
260
|
"hashes": [
|
|
235
261
|
"783b5b455a56c6a3e3723f3c6da861e0a945562acb686b86ab9d0e16dbd552a6",
|
|
236
|
-
"c7a045d3687429c5047f09b4033ffffcecfede2edba736106f5e1048eb3cf27f"
|
|
262
|
+
"c7a045d3687429c5047f09b4033ffffcecfede2edba736106f5e1048eb3cf27f",
|
|
263
|
+
"8e9fe877949955e8f698701f969784b288bc95943c3bcea3bd4368db82e8e43e"
|
|
237
264
|
]
|
|
238
265
|
},
|
|
239
266
|
".claude/scripts/detect-missed-gate.mjs": {
|
|
@@ -247,13 +274,15 @@
|
|
|
247
274
|
".claude/scripts/doctor.mjs": {
|
|
248
275
|
"since": "0.6.0",
|
|
249
276
|
"hashes": [
|
|
250
|
-
"eb31d2726ab95d6b8fd091b1daf8a21f403a46c801590baf4fecee5c1bec64b9"
|
|
277
|
+
"eb31d2726ab95d6b8fd091b1daf8a21f403a46c801590baf4fecee5c1bec64b9",
|
|
278
|
+
"5154ad9abdcb37fea58b0da78fd71842c705774ffe48fd8050c302da17e73913"
|
|
251
279
|
]
|
|
252
280
|
},
|
|
253
281
|
".claude/scripts/git-env.mjs": {
|
|
254
282
|
"since": "0.5.0",
|
|
255
283
|
"hashes": [
|
|
256
|
-
"ff9f3c848a3881b67a8f795a4d172f407d896447e21dd3a9c4903365977d4519"
|
|
284
|
+
"ff9f3c848a3881b67a8f795a4d172f407d896447e21dd3a9c4903365977d4519",
|
|
285
|
+
"b022399f287cdce1bcb07329c0aab44bf99714b5f0515f274c962f41ea072b86"
|
|
257
286
|
]
|
|
258
287
|
},
|
|
259
288
|
".claude/scripts/lib/gate-coverage.mjs": {
|
|
@@ -265,13 +294,15 @@
|
|
|
265
294
|
".claude/scripts/lib/revalidation-points.mjs": {
|
|
266
295
|
"since": "0.6.0",
|
|
267
296
|
"hashes": [
|
|
268
|
-
"41c4f70e5914636bccec7995172c322c875774027e0c626abb7c593c43fddd65"
|
|
297
|
+
"41c4f70e5914636bccec7995172c322c875774027e0c626abb7c593c43fddd65",
|
|
298
|
+
"b48e4959862906e279eca481f484f07a7fd4aa082f2778224a6574a7871bc9d8"
|
|
269
299
|
]
|
|
270
300
|
},
|
|
271
301
|
".claude/scripts/lib/secrets.mjs": {
|
|
272
302
|
"since": "0.5.0",
|
|
273
303
|
"hashes": [
|
|
274
|
-
"dc4a300646f12459c0c37e380b325451474e1ec113482381e0fad80aceb88049"
|
|
304
|
+
"dc4a300646f12459c0c37e380b325451474e1ec113482381e0fad80aceb88049",
|
|
305
|
+
"60fab2cc9f2028bccf6139e6a744406b4a86a9039d1367f3cef409902e9b327d"
|
|
275
306
|
]
|
|
276
307
|
},
|
|
277
308
|
".claude/scripts/lib/verdict.mjs": {
|
|
@@ -332,7 +363,8 @@
|
|
|
332
363
|
"hashes": [
|
|
333
364
|
"cd149245dc29ef7489ae0e5394fa5a063dea2cc017bd3cbbface1ace6f8d7b46",
|
|
334
365
|
"7db3c17b781e6876b4822afd09e6affa97e46607b63d443975d987daf1f14464",
|
|
335
|
-
"9edd70b5960f367958e8e7500150b4edd285c99869cca803e40e0537d2d347b0"
|
|
366
|
+
"9edd70b5960f367958e8e7500150b4edd285c99869cca803e40e0537d2d347b0",
|
|
367
|
+
"4cf917ac06708e1068dfe9f8bbebc9376c4748526bd669b9bea32929ba996d0a"
|
|
336
368
|
]
|
|
337
369
|
},
|
|
338
370
|
".claude/scripts/queue/jira.mjs": {
|
|
@@ -341,7 +373,9 @@
|
|
|
341
373
|
"13e187a4005136a9a1fae5fb5a3d2a61c3cf5dc097b467c12622ad82a0fd5d52",
|
|
342
374
|
"86591a48b9264d641c2530238ea3720705f12e17af2ec8dccecabfa3a742a2e7",
|
|
343
375
|
"13c301f828d4402fcf81e7e0b2b1d22472cbdb50f6fd606770056af4ec215e51",
|
|
344
|
-
"b8be5855809c0d44ece94858456098663296c17c5ad9abb1ea2cf1a8f48ca491"
|
|
376
|
+
"b8be5855809c0d44ece94858456098663296c17c5ad9abb1ea2cf1a8f48ca491",
|
|
377
|
+
"3fc8ff9a06a2e22355a660a31e2943a97f50869f7e5726f768a7931d17b64b5b",
|
|
378
|
+
"f44203af187e855b9f738f8dbedfd313abf9d6a5cc29182fb46cd58d70698d7a"
|
|
345
379
|
]
|
|
346
380
|
},
|
|
347
381
|
".claude/scripts/queue/plan-md.mjs": {
|
|
@@ -368,13 +402,15 @@
|
|
|
368
402
|
".claude/scripts/revalidate.mjs": {
|
|
369
403
|
"since": "0.6.0",
|
|
370
404
|
"hashes": [
|
|
371
|
-
"32f847a2a3a5136cabcb42f6447da9f8cf98e2d20512212ee5201461128d7798"
|
|
405
|
+
"32f847a2a3a5136cabcb42f6447da9f8cf98e2d20512212ee5201461128d7798",
|
|
406
|
+
"b62348a27bcaa1d62a0e4ddd53873fab6cb75f9af8e8c69d24f6ce81c592c4e3"
|
|
372
407
|
]
|
|
373
408
|
},
|
|
374
409
|
".claude/scripts/revalidation-report.mjs": {
|
|
375
410
|
"since": "0.6.0",
|
|
376
411
|
"hashes": [
|
|
377
|
-
"b99a3537158c2851698bfac027f7061811d7d428c3eea57f3ce0f58ea75dc249"
|
|
412
|
+
"b99a3537158c2851698bfac027f7061811d7d428c3eea57f3ce0f58ea75dc249",
|
|
413
|
+
"78adac5c8f696f2c9cc86f404abf1d55604ccb10f11dd612501c14d4cf5935b1"
|
|
378
414
|
]
|
|
379
415
|
},
|
|
380
416
|
".claude/scripts/run-journal.mjs": {
|
|
@@ -400,7 +436,9 @@
|
|
|
400
436
|
".claude/scripts/unattended-flag.mjs": {
|
|
401
437
|
"since": "0.6.0",
|
|
402
438
|
"hashes": [
|
|
403
|
-
"060b001927d8b471f1c1a8c8851fbb4266d3b2edd674cccbd6c16c44b57b91dd"
|
|
439
|
+
"060b001927d8b471f1c1a8c8851fbb4266d3b2edd674cccbd6c16c44b57b91dd",
|
|
440
|
+
"7721ee19fd1bcf6902be3d359def40742d79b88f5d83e7e3ca22ba45ca3211aa",
|
|
441
|
+
"250292c9959916240bfc0fdf5987a864f6d54799de3d932dc6b85b776e62eaa9"
|
|
404
442
|
]
|
|
405
443
|
},
|
|
406
444
|
".claude/scripts/verdict.mjs": {
|
|
@@ -435,7 +473,9 @@
|
|
|
435
473
|
"8f687f92fa60d4cc679fa13bff997cec92227f6bc0b90c1dc5b8a5400f2abef0",
|
|
436
474
|
"e442ca58c4249ac10d5759bba2d8360544642e03b2b158e6253e71f5be3767fb",
|
|
437
475
|
"eb52ef41269018107534d8dc2f552c57698e1677a1e76b5e666b5d09c007cac0",
|
|
438
|
-
"47922b182915cb92696f851174f2e88c4ae8c67dc119ef39a3a597ef1300fab5"
|
|
476
|
+
"47922b182915cb92696f851174f2e88c4ae8c67dc119ef39a3a597ef1300fab5",
|
|
477
|
+
"57f6add0504db45e7577474f97705fe474310e4cd3310cdb348a2c64eabe88cd",
|
|
478
|
+
"18f4300de4c4c7ea380d726fb109fa224da950ef0a4cea5015ab1d408b823be5"
|
|
439
479
|
]
|
|
440
480
|
},
|
|
441
481
|
".claude/skills/new-invariant/SKILL.md": {
|
|
@@ -503,7 +543,8 @@
|
|
|
503
543
|
"since": "0.5.0",
|
|
504
544
|
"hashes": [
|
|
505
545
|
"80b4631502d95c619ad060ce02cc8702b12574758ba7df8337ed63efa15d764d",
|
|
506
|
-
"cfd516f72acdfd197c59ac3cbdd39d7b175976dbd3d9eef52825dfdc4f1e5b60"
|
|
546
|
+
"cfd516f72acdfd197c59ac3cbdd39d7b175976dbd3d9eef52825dfdc4f1e5b60",
|
|
547
|
+
"8687eacf0ad707a4f887e0714e82fca23fd005fa9ec8824faedfe99ca46333e1"
|
|
507
548
|
]
|
|
508
549
|
},
|
|
509
550
|
".codex/agents/security-scanner.toml": {
|
|
@@ -523,7 +564,8 @@
|
|
|
523
564
|
"since": "0.5.0",
|
|
524
565
|
"hashes": [
|
|
525
566
|
"c676647d585ec87427545a391598706ecaa74dfe413a7e05877e336bf8942874",
|
|
526
|
-
"89d999c068ef5b6e48913c15a165359e66b1f505b9f97c145d8c730cbf42d09a"
|
|
567
|
+
"89d999c068ef5b6e48913c15a165359e66b1f505b9f97c145d8c730cbf42d09a",
|
|
568
|
+
"1fc2fc35b04fa4ad0859841af72f45695bc346d1a1a9b20ba5d971d48888a910"
|
|
527
569
|
]
|
|
528
570
|
},
|
|
529
571
|
"AGENTS.md": {
|
|
@@ -591,7 +633,8 @@
|
|
|
591
633
|
"docs/decisions/spacing-rations-mechanisms.md": {
|
|
592
634
|
"since": "0.5.0",
|
|
593
635
|
"hashes": [
|
|
594
|
-
"883852ffc14b9f0b6101f67b7045567056d2c5630e79391a6e542d6d3854095a"
|
|
636
|
+
"883852ffc14b9f0b6101f67b7045567056d2c5630e79391a6e542d6d3854095a",
|
|
637
|
+
"5894f8aa613fbbba0f125c871b2a91d9cc5bd9dd6a3fe4c8fd9d8a06aa8839b8"
|
|
595
638
|
]
|
|
596
639
|
},
|
|
597
640
|
"docs/decisions/stop-conditions-in-a-file.md": {
|
|
@@ -6,5 +6,7 @@
|
|
|
6
6
|
"0.3.2": "bbcb24fd8ff5290826ee3b152b5130f6bd4697da",
|
|
7
7
|
"0.4.0": "c77c6c3e5d991a55b733a05a3b5ae01e2a55e578",
|
|
8
8
|
"0.5.0": "d78d0e77307a2be128de46ff4f64e3c146b5df2b",
|
|
9
|
-
"0.6.0": "29ca0543368e922349945e52541a92b46ddcc5bd"
|
|
9
|
+
"0.6.0": "29ca0543368e922349945e52541a92b46ddcc5bd",
|
|
10
|
+
"0.6.1": "f1d1e3dbd2161545d77ee5e7f90fa8e74b8a9f3e",
|
|
11
|
+
"0.6.2": "2a1fc8e10cd2b65deb5c95d937fd7de39f2c92a2"
|
|
10
12
|
}
|