You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit dee68f8
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: README.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -606,6 +606,7 @@ The full table, including the release-evidence validators and the artifact forma
606
606
|`evidencePolicy`|`pluralist`, `strict`|`pluralist`| whether a keyless or partial capture passes the gate with a warning or fails it |
607
607
|`serpapiKey`| a key | none | SerpAPI search; the environment variable `SERPAPI_API_KEY` works too |
608
608
|`searxngUrl`| a URL | none | a SearXNG instance for search |
609
+
|`browserPath`| a path | the usual install paths | the Chromium or Chrome the `browser` transport runs; read before `RESEARCH_KIT_BROWSER` (ADR-0088) |
609
610
|`failOpen`|`true`, `false`|`true`| what the gate does when it cannot run at all |
610
611
|`editGate.mode`|`ask`, `hard-block`, `off`|`ask`| the Claude Code edit-time gate; `install-hooks.mjs --mode` sets it |
611
612
|`editGate.settingsPath`| a path |`~/.claude/settings.json`| where the edit-time gate is registered |
@@ -1012,6 +1012,11 @@ export function validateRelease({ root, package: packageName, registryPath, role
1012
1012
if(pointersDir&&fs.existsSync(pointersDir)&&!inside(root,pointersDir))add(errors,'PATH-CONTAINMENT','pointer directory escapes record root',pointersDir);
1013
1013
if(ledgerPath&&(!fs.existsSync(ledgerPath)||!inside(root,ledgerPath)))add(errors,'LEDGER-PATH','ledger path must exist below record root',ledgerPath,'INCOMPLETE');
1014
1014
if(headPath&&(!fs.existsSync(headPath)||!inside(root,headPath)))add(errors,'LEDGER-PATH','head path must exist below record root',headPath,'INCOMPLETE');
1015
+
if(genesisPath&&(!fs.existsSync(genesisPath)||!inside(root,genesisPath)))add(errors,'LEDGER-PATH','genesis path must exist below record root',genesisPath,'INCOMPLETE');
1016
+
if(checkpointsDir&&(!fs.existsSync(checkpointsDir)||!inside(root,checkpointsDir)))add(errors,'LEDGER-PATH','checkpoints path must exist below record root',checkpointsDir,'INCOMPLETE');
1017
+
// Only the ledger branch reads them: given without --ledger they would be dropped in silence,
1018
+
// which is how both flags went unread before 2026-10-11.
1019
+
if((genesisPath||checkpointsDir)&&!ledgerPath)add(errors,'LEDGER-PATH','genesis and checkpoints are verified only with --ledger',genesisPath??checkpointsDir,'INCOMPLETE');
1015
1020
if(!artifacts.length)add(errors,'INPUT-ARTIFACTS',`registry has no artifacts for ${packageName}`,'.artifacts','INCOMPLETE');
1016
1021
if(!HASH.test(String(roster.rosterSha256??'')))add(errors,'ROLE-ROSTER','role roster hash is invalid','.rosterSha256');
1017
1022
constrecords=newMap();
@@ -1070,6 +1075,8 @@ export function validateRelease({ root, package: packageName, registryPath, role
assert(result.errors.some((error)=>error.code==='LEDGER-GENESIS-SIGNATURE'),`the genesis was not verified: ${JSON.stringify(result.errors)}`);
399
+
assert(result.errors.some((error)=>error.code==='LEDGER-CHECKPOINT-SIGNATURE'&&error.path.startsWith('.checkpoints[0]')),`the checkpoint was not verified: ${JSON.stringify(result.errors)}`);
0 commit comments