From 02d00dcb8036bdacf66e1795e272c7ccd8d25cf7 Mon Sep 17 00:00:00 2001 From: SteveBot <1153461+unbraind@users.noreply.github.com> Date: Sun, 4 Oct 2026 12:11:52 +0200 Subject: [PATCH 1/3] Certify pm-ops on PM CLI 2026.10.4 and consolidate pending dependency updates Pin @unbrained/pm-cli to 2026.10.4 (supersedes Dependabot #138), bump @babel/eslint-parser to 8.0.6 (#126), jscpd to 5.4.0 (#139), @types/node lockfile to 26.6.4 (newer than #137), and pin the codeql-action SHAs to 2892aa5e (#127). Fix Dependabot security alert #3 by resolving brace-expansion to 5.0.12; npm audit --omit=dev is clean. jscpd 5.4.0 sums overlapping clone spans into duplicatedLines, which the fail-closed jscpd-5 report validation rejected as impossible counts at the one-token completeness floor. parseJscpdReport now validates each clone span against the scanned total and duplicatedLines against the sum of reported clone spans, keeping the gate fail-closed while adopting the new accounting. Track the certification in ops-hiee (pm-github managed extension installed at 2026.9.26 with a clean read-only sync dry-run preview). --- .agents/pm/chores/ops-hiee.toon | 45 ++++++ .agents/pm/history/ops-braces-audit.jsonl | 2 + .agents/pm/history/ops-hiee.jsonl | 34 +++++ .agents/pm/issues/ops-braces-audit.toon | 17 +++ .github/workflows/codeql.yml | 4 +- .gitignore | 9 ++ dist/duplication.d.ts | 6 + dist/duplication.d.ts.map | 2 +- dist/duplication.js | 15 +- dist/duplication.js.map | 2 +- duplication.ts | 17 ++- package-lock.json | 168 ++++++++++++++-------- package.json | 18 +-- test/compatibility-floor.test.ts | 2 +- test/lint-and-duplication-gates.test.ts | 41 ++++-- 15 files changed, 296 insertions(+), 86 deletions(-) create mode 100644 .agents/pm/chores/ops-hiee.toon create mode 100644 .agents/pm/history/ops-braces-audit.jsonl create mode 100644 .agents/pm/history/ops-hiee.jsonl create mode 100644 .agents/pm/issues/ops-braces-audit.toon diff --git a/.agents/pm/chores/ops-hiee.toon b/.agents/pm/chores/ops-hiee.toon new file mode 100644 index 00000000..9c037b1e --- /dev/null +++ b/.agents/pm/chores/ops-hiee.toon @@ -0,0 +1,45 @@ +id: ops-hiee +title: Certify pm-ops on PM CLI/SDK 2026.10.4 and consolidate pending dependency updates +description: "Pin @unbrained/pm-cli@2026.10.4, consolidate Dependabot updates (#126 @babel/eslint-parser 8.0.6, #127 codeql-action SHAs, #137 @types/node 26.6.4, #138 pm-cli 2026.10.4 superset, #139 jscpd 5.4.0), fix Dependabot security alert #3 (brace-expansion 5.0.12), and prove the full release gate green." +type: Chore +status: in_progress +priority: 1 +tags[2]: cert,deps +created_at: "2026-10-04T08:59:29.371Z" +updated_at: "2026-10-04T11:01:37.629Z" +assignee: codex-sol +claim_principal: codex-sol +author: pi-cert-a +actual_result: "Certification candidate: PM CLI and pm-changelog exact 2026.10.4, all devDependencies exact, Dependabot #126/#127/#137/#138/#139 consolidated and brace-expansion alert #3 patched to 5.0.12. Direct release:check PASS (464/466, 2 existing opt-in skips, c8 100/100/100/100 over 23 sources); strict health PASS; packed npm/native Bun status/policy/scan PASS on real tracker copy; pm-github 2026.10.4 dry-run wouldSync=0/skipped=1/planned=1. NOT READY: full npm audit has 5 high unpatched braces-chain findings (ops-braces-audit), and final-head bot reviews are pending. pm test sandbox limitation is upstream pm-cli#1391." +comments[5]{created_at,author,text}: + "2026-10-04T08:59:35.779Z",pi-cert-a,"Starting certification on PM CLI 2026.10.4. Pinning @unbrained/pm-cli to 2026.10.4 (supersedes Dependabot #138 which proposed 2026.10.1), @babel/eslint-parser ^8.0.6 (#126), jscpd ^5.4.0 (#139), @types/node lockfile 26.6.4 (newer than #137's 26.6.3), and codeql-action SHAs 2892aa5e (#127). Security alert #3 (brace-expansion) fixed via npm audit fix -> 5.0.12; npm audit --omit=dev clean. Note: the braces GHSA-vfj7-8cjw-p6xm advisory flags ALL published braces versions (vulnerable <=3.0.3, no patched release); its only path into the tree is the jscpd4 dev alias kept for duplication-gate v4-engine parity tests (peer floor jscpd >=4.3.0 <6.0.0), so it is refused rather than weakening the gate." + "2026-10-04T09:13:25.591Z",pi-cert-a,"Gate evidence: `npm run release:check` green end-to-end on the branch (typecheck, lint, duplication, docstring, coverage 100/100/100/100, audit:prod clean, pack:dry-run 50 files, changelog:check up to date, all release verifiers ok) plus `pm health --strict-exit --require-merge-drivers` ok. npm audit --omit=dev: 0 vulnerabilities.\n\nDogfood (packed pm-ops-2026.10.4.tgz installed into a scratch copy of this repo's tracker at /tmp/claude-1000/cert-wt/pm-ops-dogfood):\n- npm: `npx -y @unbrained/pm-cli@2026.10.4 ops status --repos fleet/pm-ops` -> 'status: 1/1 ready, 0 issue(s)'; `ops policy` -> 'passed: 6, failed: 0'; `ops scan` -> 'scan: 1/1 ready'.\n- bun: `bunx --bun @unbrained/pm-cli@2026.10.4 ops status ...` -> 'status: 1/1 ready, 0 issue(s)'; `ops policy` -> 'passed: 6, failed: 0'.\nScratch copy deleted afterwards.\n\npm-github: installed as managed extension pm-github@2026.9.26 (npm:pm-github); read-only preview `pm github sync --repo unbraind/pm-ops --dry-run` -> '[dry-run] Would update 0 issue(s) on unbraind/pm-ops; 1 already in sync/failed.' No issues created/modified, no scheduled sync.\n\nFix driven by jscpd 5.4.0: its one-token scan now sums overlapping clone spans into duplicatedLines (23 > 22 total lines on the TSX fixture), which the fail-closed report validation rejected as impossible counts. parseJscpdReport now validates duplicatedLines against the sum of reported clone spans (and each clone span against total lines) instead of duplicatedLines <= total lines; parity/completeness tests updated, duplication.ts branch coverage back to 100%." + "2026-10-04T10:11:39.943Z",pi-cert-a,"pm test --run receipts: linked 'pm health --strict-exit --require-merge-drivers' passes (exit 0, seeded tracker context). Linked 'npm run release:check' cannot run faithfully under the pm test harness on 2026.10.4: every seeding context (schema/auto/tracker) injects the sandbox PM_PATH, redirecting the suite's own 'pm init' throwaway workspaces so test/verify-lifecycle-policy.test.ts fails ENOENT on its drift fixture; --env-clear PM_PATH is reserved; per-test pm_context_mode=none requires an isolated workspace which is empty (npm: Missing script) or a snapshot which loses git-tag context (4 unrelated failures). The direct command — exactly what CI runs — is green (466/466, coverage 100/100/100/100). Filed upstream as unbraind/pm-cli#1391 (follow-up to #1318/#1354). Upstream issues referenced by pm-ops tests: #773 (driver/fence drift reported-not-gated), #921/#922 (merge receipts local-only)." + "2026-10-04T10:49:30.441Z",codex-sol,"Restart verification: CI on retained head 2863889 fails the existing per-commit identity audit because earlier dogfood evidence contains an absolute host path. Use the audited history-redaction command, then replace the single certification commit so the forbidden path is not retained in branch history; preserve all source changes and verification evidence. Exact-pin every development dependency and update pm-changelog to published 2026.10.4. Full npm audit remains blocked by unpatched braces 3.0.3 required by real jscpd4 parity tests; never remove those tests to conceal it." + "2026-10-04T11:01:37.038Z",codex-sol,"Restart gate and dogfood complete: direct locked npm run release:check exits 0, 466 tests/464 pass/0 fail/2 existing opt-in real-repo skips; c8 100% statements, branches, functions and lines across 23 sources. npx pm health --strict-exit --require-merge-drivers passes. npm audit --omit=dev has zero vulnerabilities; full npm audit reports 5 high findings in the single unpatched braces chain, tracked by ops-braces-audit. Exact-pinned every development dependency, pm-changelog upgraded to 2026.10.4, pm-github managed install refreshed to 2026.10.4. Packed real-tracker acceptance: npm pack --silent; install the tarball with @unbrained/pm-cli@2026.10.4 into pm-ops-dogfood; npx -y @unbrained/pm-cli@2026.10.4 package install --project reports complete:true; run ops status/policy/scan --repos through both npx and bunx --bun -y @unbrained/pm-cli@2026.10.4. Each runtime reports status/scan 1/1 ready and policy 6 passed/0 failed. Scratch copy removed. Read-only pm github sync --repo unbraind/pm-ops --dry-run: wouldSync 0, skipped 1, planned 1. The inspection commands report package structural readiness; the independent full-audit gate remains blocked. CI identity audit is repaired with audited redaction and replacement of the original certification commit, not a relaxed baseline." +files[8]{path,scope,note}: + .agents/pm/extensions/.managed-extensions.json,project,Certification change + .agents/pm/issues/ops-braces-audit.toon,project,Full audit blocker + .github/workflows/codeql.yml,project,Certification change + duplication.ts,project,Certification change + package-lock.json,project,Certification change + package.json,project,Certification change + test/compatibility-floor.test.ts,project,Certification change + test/lint-and-duplication-gates.test.ts,project,Certification change +tests[2]: + - command: ./node_modules/.bin/pm health --strict-exit --require-merge-drivers + scope: project + pm_context_mode: tracker + provenance: + author: pi-cert-a + created_at: "2026-10-04T09:31:59.205Z" + source_kind: local_mutation + source_ref: chore/pm-ops-pm-cli-2026-10-4 + - command: "npm run release:check" + scope: project + provenance: + author: pi-cert-a + created_at: "2026-10-04T10:11:10.972Z" + source_kind: local_mutation + source_ref: chore/pm-ops-pm-cli-2026-10-4 +body: "" diff --git a/.agents/pm/history/ops-braces-audit.jsonl b/.agents/pm/history/ops-braces-audit.jsonl new file mode 100644 index 00000000..1d56f2df --- /dev/null +++ b/.agents/pm/history/ops-braces-audit.jsonl @@ -0,0 +1,2 @@ +{"hash_algorithm":"sha256","ts":"2026-10-04T10:51:17.651Z","author":"codex-sol","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"5855d685e2129b043d4555ed","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"create","patch":[{"op":"add","path":"/metadata/id","value":"ops-braces-audit"},{"op":"add","path":"/metadata/title","value":"Eliminate the unpatched braces dependency while preserving jscpd 4 parity acceptance"},{"op":"add","path":"/metadata/description","value":"Full npm audit reports GHSA-vfj7-8cjw-p6xm on braces 3.0.3 via micromatch, fast-glob, @jscpd/finder and the jscpd4 4.3.0 alias. npm latest braces is 3.0.3 and no patched registry release exists. Removing the alias would remove required real-engine parity tests, which is forbidden. Certification ops-hiee stays NOT READY for this independent audit gate."},{"op":"add","path":"/metadata/type","value":"Issue"},{"op":"add","path":"/metadata/status","value":"open"},{"op":"add","path":"/metadata/priority","value":1},{"op":"add","path":"/metadata/tags","value":["dependencies","security"]},{"op":"add","path":"/metadata/created_at","value":"2026-10-04T10:51:17.651Z"},{"op":"add","path":"/metadata/updated_at","value":"2026-10-04T10:51:17.651Z"},{"op":"add","path":"/metadata/author","value":"codex-sol"},{"op":"add","path":"/metadata/repro_steps","value":"npm ci; npm audit; npm ls braces; npm view braces version"},{"op":"add","path":"/metadata/expected_result","value":"Both npm audit and npm audit --omit=dev return zero vulnerabilities without deleting jscpd4 engine-parity tests or weakening thresholds."},{"op":"add","path":"/metadata/actual_result","value":"npm audit: 5 high findings in the same unpatched braces chain; npm audit --omit=dev: zero vulnerabilities."}],"before_hash":"3cc22dff72be7b14824654a7a64ea62b04799939b2fee54c1b5f52ca60bf6df0","after_hash":"fd0f535f0b923f81ca9aed0f4c24f272aab4e36583b2564a39721e6de33a1bef","item_hash_version":3,"message":"","context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"effort":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"af672f42b9594929561cf1d8a3301360cd5669009fdb7e932fd1940fda7c7bf2"} +{"hash_algorithm":"sha256","ts":"2026-10-04T10:51:18.521Z","author":"codex-sol","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"5855d685e2129b043d4555ed","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"files_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T10:51:18.521Z"},{"op":"add","path":"/metadata/files","value":[{"path":"package.json","scope":"project","note":"Required jscpd4 parity dependency"},{"path":"test/lint-and-duplication-gates.test.ts","scope":"project","note":"Real jscpd4 parity tests must remain"}]}],"before_hash":"fd0f535f0b923f81ca9aed0f4c24f272aab4e36583b2564a39721e6de33a1bef","after_hash":"d7a1bdf1aa18c46e89542d01f0f63ff33a1ff6dcf00d72f965d198cdccb8ee9b","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"effort":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"a5104793720513a34f3d31a615121afd21aaafa43e319724f71ace9285e390ed"} diff --git a/.agents/pm/history/ops-hiee.jsonl b/.agents/pm/history/ops-hiee.jsonl new file mode 100644 index 00000000..22055df8 --- /dev/null +++ b/.agents/pm/history/ops-hiee.jsonl @@ -0,0 +1,34 @@ +{"hash_algorithm":"sha256","ts":"2026-10-04T08:59:29.371Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":{"value":"implementer","source":"argv"},"topic":null},"op":"create","patch":[{"op":"add","path":"/metadata/id","value":"ops-hiee"},{"op":"add","path":"/metadata/title","value":"Certify pm-ops on PM CLI/SDK 2026.10.4 and consolidate pending dependency updates"},{"op":"add","path":"/metadata/description","value":"Pin @unbrained/pm-cli@2026.10.4, consolidate Dependabot updates (#126 @babel/eslint-parser 8.0.6, #127 codeql-action SHAs, #137 @types/node 26.6.4, #138 pm-cli 2026.10.4 superset, #139 jscpd 5.4.0), fix Dependabot security alert #3 (brace-expansion 5.0.12), and prove the full release gate green."},{"op":"add","path":"/metadata/type","value":"Chore"},{"op":"add","path":"/metadata/status","value":"open"},{"op":"add","path":"/metadata/priority","value":1},{"op":"add","path":"/metadata/tags","value":["cert","deps"]},{"op":"add","path":"/metadata/created_at","value":"2026-10-04T08:59:29.371Z"},{"op":"add","path":"/metadata/updated_at","value":"2026-10-04T08:59:29.371Z"},{"op":"add","path":"/metadata/assignee","value":"pi-cert-a"},{"op":"add","path":"/metadata/author","value":"pi-cert-a"}],"before_hash":"3cc22dff72be7b14824654a7a64ea62b04799939b2fee54c1b5f52ca60bf6df0","after_hash":"75644ae26d0ff3f57c5b508cca2fe787ae02360b3f4699ad3c985963bbc8ed58","item_hash_version":3,"message":"","event_class":"substantive","record_hash_version":1,"record_hash":"5f7abac40e099786b4c65af1ddcde4439039a2d0dd61d435454f8246fc2cb3cc"} +{"hash_algorithm":"sha256","ts":"2026-10-04T08:59:34.144Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":{"value":"implementer","source":"argv"},"topic":null},"op":"claim","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T08:59:34.144Z"},{"op":"add","path":"/metadata/claim_principal","value":"pi-cert-a"}],"before_hash":"75644ae26d0ff3f57c5b508cca2fe787ae02360b3f4699ad3c985963bbc8ed58","after_hash":"187c555836b64520c2d430534d0f58f9e203b346fc410e6d6a3d5722013c2bea","item_hash_version":3,"event_class":"substantive","record_hash_version":1,"record_hash":"eb92aa6567b4d282ec285c9ad1b496cd12047e476a2166bd97100909cb08f7fd"} +{"hash_algorithm":"sha256","ts":"2026-10-04T08:59:34.965Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":{"value":"implementer","source":"argv"},"topic":null},"op":"update","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T08:59:34.965Z"},{"op":"replace","path":"/metadata/status","value":"in_progress"}],"before_hash":"187c555836b64520c2d430534d0f58f9e203b346fc410e6d6a3d5722013c2bea","after_hash":"63be1d8f222946a27934e4d79997584c2956feae2a0b5688a6894a9ed187ecf1","item_hash_version":3,"event_class":"substantive","record_hash_version":1,"record_hash":"3626e53f9c939cf3982cb7b32c877902abe6ca555ca53e1ef3dfa349d378493f"} +{"hash_algorithm":"sha256","ts":"2026-10-04T08:59:35.779Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"comment_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T08:59:35.779Z"},{"op":"add","path":"/metadata/comments","value":[{"created_at":"2026-10-04T08:59:35.779Z","author":"pi-cert-a","text":"Starting certification on PM CLI 2026.10.4. Pinning @unbrained/pm-cli to 2026.10.4 (supersedes Dependabot #138 which proposed 2026.10.1), @babel/eslint-parser ^8.0.6 (#126), jscpd ^5.4.0 (#139), @types/node lockfile 26.6.4 (newer than #137's 26.6.3), and codeql-action SHAs 2892aa5e (#127). Security alert #3 (brace-expansion) fixed via npm audit fix -> 5.0.12; npm audit --omit=dev clean. Note: the braces GHSA-vfj7-8cjw-p6xm advisory flags ALL published braces versions (vulnerable <=3.0.3, no patched release); its only path into the tree is the jscpd4 dev alias kept for duplication-gate v4-engine parity tests (peer floor jscpd >=4.3.0 <6.0.0), so it is refused rather than weakening the gate."}]}],"before_hash":"63be1d8f222946a27934e4d79997584c2956feae2a0b5688a6894a9ed187ecf1","after_hash":"6b71b71e54fafaeec6761bbd01c4e19b5fdc76c287dff85acf0fec38b7121c73","item_hash_version":3,"event_class":"substantive","record_hash_version":1,"record_hash":"5cfde4c8040fcac01d2c5ad38b90ec92ad2fa295e2e7ad15629222cfab33adaf"} +{"hash_algorithm":"sha256","ts":"2026-10-04T09:13:04.804Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"tests_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:13:04.804Z"},{"op":"add","path":"/metadata/tests","value":[{"command":"npm run release:check","scope":"project","provenance":{"author":"pi-cert-a","created_at":"2026-10-04T09:13:04.782Z","source_kind":"local_mutation","source_ref":"chore/pm-ops-pm-cli-2026-10-4"}}]}],"before_hash":"6b71b71e54fafaeec6761bbd01c4e19b5fdc76c287dff85acf0fec38b7121c73","after_hash":"3c060cf690a2fc5b176b467d290e188692964b41f18081ce93c1871dafba09e3","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"1eec9ffdf67bad2a70cc1cf987f5edb9f8a60c0e22f0d5b4e706cf51cfec80ef"} +{"hash_algorithm":"sha256","ts":"2026-10-04T09:13:12.634Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"files_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:13:12.634Z"},{"op":"add","path":"/metadata/files","value":[{"path":"package.json","scope":"project","note":"Certification change"}]}],"before_hash":"3c060cf690a2fc5b176b467d290e188692964b41f18081ce93c1871dafba09e3","after_hash":"749db9bb65e221db5b8779fce979b60ff021362368f76d08b3c3bb81b0112552","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"8c8037346a8d86ed94e4ab0a51d8683cf8e40f31efa8e6b4e1037d58b4d35de0"} +{"hash_algorithm":"sha256","ts":"2026-10-04T09:13:13.601Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"files_add","patch":[{"op":"replace","path":"/metadata/files/0/path","value":"package-lock.json"},{"op":"add","path":"/metadata/files/1","value":{"path":"package.json","scope":"project","note":"Certification change"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:13:13.601Z"}],"before_hash":"749db9bb65e221db5b8779fce979b60ff021362368f76d08b3c3bb81b0112552","after_hash":"edc68464ef7b390383c11abe58faf6c3a872c9901a6256ab1624857338a6ce84","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"223a189b87fa881888ad675ae931e5bd79cf333eab94120b320603c4007067e5"} +{"hash_algorithm":"sha256","ts":"2026-10-04T09:13:14.892Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"files_add","patch":[{"op":"replace","path":"/metadata/files/1/path","value":"package-lock.json"},{"op":"replace","path":"/metadata/files/0/path","value":".github/workflows/codeql.yml"},{"op":"add","path":"/metadata/files/2","value":{"path":"package.json","scope":"project","note":"Certification change"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:13:14.892Z"}],"before_hash":"edc68464ef7b390383c11abe58faf6c3a872c9901a6256ab1624857338a6ce84","after_hash":"694792f81f4291485355e693d6b5b4f7494429e263829d11d4c65e371975cf77","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"38bc3761cd47bb80a17f6f0f1860b311bf4ee1882f9f204c1d822b78b9f12d1b"} +{"hash_algorithm":"sha256","ts":"2026-10-04T09:13:15.595Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"files_add","patch":[{"op":"replace","path":"/metadata/files/2/path","value":"package-lock.json"},{"op":"replace","path":"/metadata/files/1/path","value":"duplication.ts"},{"op":"add","path":"/metadata/files/3","value":{"path":"package.json","scope":"project","note":"Certification change"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:13:15.595Z"}],"before_hash":"694792f81f4291485355e693d6b5b4f7494429e263829d11d4c65e371975cf77","after_hash":"0afd485988585752bbfec853250d0597f79e93436a55a28e5ebba7ee384791ab","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"1a17ab3ea4ed9e3076c625daa07bed32cdf317ec13b732ade4ea6320e7eb31d1"} +{"hash_algorithm":"sha256","ts":"2026-10-04T09:13:16.274Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"files_add","patch":[{"op":"add","path":"/metadata/files/4","value":{"path":"test/lint-and-duplication-gates.test.ts","scope":"project","note":"Certification change"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:13:16.274Z"}],"before_hash":"0afd485988585752bbfec853250d0597f79e93436a55a28e5ebba7ee384791ab","after_hash":"f4e47e88fb60b229a5452cf297bb315dd5aa3fcfab2e69a1c42c6ab0ab47ea07","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"0fe5d2a67e9cae9718b96358da9f123094d4991fce99a3f644cf809f2c9cb6fd"} +{"hash_algorithm":"sha256","ts":"2026-10-04T09:13:16.987Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"files_add","patch":[{"op":"replace","path":"/metadata/files/4/path","value":"test/compatibility-floor.test.ts"},{"op":"add","path":"/metadata/files/5","value":{"path":"test/lint-and-duplication-gates.test.ts","scope":"project","note":"Certification change"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:13:16.987Z"}],"before_hash":"f4e47e88fb60b229a5452cf297bb315dd5aa3fcfab2e69a1c42c6ab0ab47ea07","after_hash":"4665a55007e8b5686211c2c234cf7b63e7e30bd8e9271a8a64e48f0857aeb22e","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"18e8fc7e14955e9ad07eb5ea970ac1d003c0967afc963b063dea555c6264f03f"} +{"hash_algorithm":"sha256","ts":"2026-10-04T09:13:17.870Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"files_add","patch":[{"op":"replace","path":"/metadata/files/5/path","value":"test/compatibility-floor.test.ts"},{"op":"replace","path":"/metadata/files/4/path","value":"package.json"},{"op":"replace","path":"/metadata/files/3/path","value":"package-lock.json"},{"op":"replace","path":"/metadata/files/2/path","value":"duplication.ts"},{"op":"replace","path":"/metadata/files/1/path","value":".github/workflows/codeql.yml"},{"op":"replace","path":"/metadata/files/0/path","value":".agents/pm/extensions/.managed-extensions.json"},{"op":"add","path":"/metadata/files/6","value":{"path":"test/lint-and-duplication-gates.test.ts","scope":"project","note":"Certification change"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:13:17.870Z"}],"before_hash":"4665a55007e8b5686211c2c234cf7b63e7e30bd8e9271a8a64e48f0857aeb22e","after_hash":"d4211962ec13815f0baa1934b1b84ddadcee9ab688189691fb63ea73b9e695d1","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"de914ffde9e22ff1b86ad2bc3c4d057a8803dab0f6c5891db139c1e090b8dc36"} +{"hash_algorithm":"sha256","ts":"2026-10-04T09:13:25.591Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/1","value":{"created_at":"2026-10-04T09:13:25.591Z","author":"pi-cert-a","text":"Gate evidence: `npm run release:check` green end-to-end on the branch (typecheck, lint, duplication, docstring, coverage 100/100/100/100, audit:prod clean, pack:dry-run 50 files, changelog:check up to date, all release verifiers ok) plus `pm health --strict-exit --require-merge-drivers` ok. npm audit --omit=dev: 0 vulnerabilities.\n\nDogfood (packed pm-ops-2026.10.4.tgz installed into a scratch copy of this repo's tracker at /tmp/claude-1000/cert-wt/pm-ops-dogfood):\n- npm: `npx -y @unbrained/pm-cli@2026.10.4 ops status --repos fleet/pm-ops` -> 'status: 1/1 ready, 0 issue(s)'; `ops policy` -> 'passed: 6, failed: 0'; `ops scan` -> 'scan: 1/1 ready'.\n- bun: `bunx --bun @unbrained/pm-cli@2026.10.4 ops status ...` -> 'status: 1/1 ready, 0 issue(s)'; `ops policy` -> 'passed: 6, failed: 0'.\nScratch copy deleted afterwards.\n\npm-github: installed as managed extension pm-github@2026.9.26 (npm:pm-github); read-only preview `pm github sync --repo unbraind/pm-ops --dry-run` -> '[dry-run] Would update 0 issue(s) on unbraind/pm-ops; 1 already in sync/failed.' No issues created/modified, no scheduled sync.\n\nFix driven by jscpd 5.4.0: its one-token scan now sums overlapping clone spans into duplicatedLines (23 > 22 total lines on the TSX fixture), which the fail-closed report validation rejected as impossible counts. parseJscpdReport now validates duplicatedLines against the sum of reported clone spans (and each clone span against total lines) instead of duplicatedLines <= total lines; parity/completeness tests updated, duplication.ts branch coverage back to 100%."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:13:25.591Z"}],"before_hash":"d4211962ec13815f0baa1934b1b84ddadcee9ab688189691fb63ea73b9e695d1","after_hash":"868d9bfd1a26c79d8fd325e20d3b2dbd19e41eca0e6dc0a6a3520b263d588e6d","item_hash_version":3,"event_class":"substantive","record_hash_version":1,"record_hash":"02ccc0104b383ca1d7d5278ea88a927145a87c8949d83492a682b939976385a9","reanchor_evidence":[{"before_hash":"d4211962ec13815f0baa1934b1b84ddadcee9ab688189691fb63ea73b9e695d1","after_hash":"282b036ac834dd6fcaf845d1467c2b6af7eb517db18dbe6bfcb86433853d0a5d","patch_hash":"95145c71b7dd7879af7bcad035e37b89ab2f0b680bff6061a5b47eef3aa39c7e","hash_algorithm":"sha256","item_hash_version":3}]} +{"hash_algorithm":"sha256","ts":"2026-10-04T09:13:43.827Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"tests_add","patch":[{"op":"add","path":"/metadata/tests/1","value":{"command":"./node_modules/.bin/pm health --strict-exit --require-merge-drivers","scope":"project","provenance":{"author":"pi-cert-a","created_at":"2026-10-04T09:13:43.780Z","source_kind":"local_mutation","source_ref":"chore/pm-ops-pm-cli-2026-10-4"}}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:13:43.827Z"}],"before_hash":"868d9bfd1a26c79d8fd325e20d3b2dbd19e41eca0e6dc0a6a3520b263d588e6d","after_hash":"c42f8e730834e387cc30bc20d7d3fd2ff81f2d582e675528384d43e82e0cfbc4","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"1e42a1fa1cd7a8339b4332063dec0c0816a3f49784c5dbff1a935674d5342b91","reanchor_evidence":[{"before_hash":"282b036ac834dd6fcaf845d1467c2b6af7eb517db18dbe6bfcb86433853d0a5d","after_hash":"0aeacb50402d935923f9220f1da26d5c32bc5897bb859909bbc132f6b27424fe","patch_hash":"61aae79690b05f55321c3edfb010f591553403bc1565a49114c43729e875c283","hash_algorithm":"sha256","item_hash_version":3,"record_hash_version":1,"record_hash":"925340fb28d610672113bd5e4fea7030dc100b54579f5fdc3495bb9ddc481f1c","record":{"hash_algorithm":"sha256","ts":"2026-10-04T09:13:43.827Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"tests_add","patch":[{"op":"add","path":"/metadata/tests/1","value":{"command":"./node_modules/.bin/pm health --strict-exit --require-merge-drivers","scope":"project","provenance":{"author":"pi-cert-a","created_at":"2026-10-04T09:13:43.780Z","source_kind":"local_mutation","source_ref":"chore/pm-ops-pm-cli-2026-10-4"}}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:13:43.827Z"}],"before_hash":"282b036ac834dd6fcaf845d1467c2b6af7eb517db18dbe6bfcb86433853d0a5d","after_hash":"0aeacb50402d935923f9220f1da26d5c32bc5897bb859909bbc132f6b27424fe","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"925340fb28d610672113bd5e4fea7030dc100b54579f5fdc3495bb9ddc481f1c"}}]} +{"hash_algorithm":"sha256","ts":"2026-10-04T09:13:45.017Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":{"value":"implementer","source":"argv"},"topic":null},"op":"update","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:13:45.017Z"},{"op":"add","path":"/metadata/actual_result","value":"Full release gate green on the branch: npm run release:check passes end-to-end (typecheck, lint, duplication, docstring, coverage 100/100/100/100, audit:prod 0 vulnerabilities, pack:dry-run, changelog:check, all release verifiers) and pm health --strict-exit --require-merge-drivers exits 0. Pinned @unbrained/pm-cli@2026.10.4 (devDep exact + lockfile), @babel/eslint-parser 8.0.6, jscpd 5.4.0, @types/node 26.6.4, codeql-action SHAs 2892aa5e. Dependabot alert #3 (brace-expansion) fixed via npm audit fix to 5.0.12; npm audit --omit=dev clean. jscpd 5.4.0 overlap accounting adopted in parseJscpdReport with tighter fail-closed bounds. Dogfood through npx pm-cli 2026.10.4 (ops status/policy/scan) and bunx (ops status/policy) against a scratch tracker copy both green; pm-github@2026.9.26 installed as managed extension with a clean read-only sync dry-run (0 would update, 1 already in sync)."}],"before_hash":"c42f8e730834e387cc30bc20d7d3fd2ff81f2d582e675528384d43e82e0cfbc4","after_hash":"d0433664d358e5b6cfebe2c39e8f7e030d1bce60de60bcb5a91aa4580d2fb062","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"0a6fa18817f13e6e6514da7eb2ad29bdf6819ebe653f913c99b23219c798c6a8","reanchor_evidence":[{"before_hash":"0aeacb50402d935923f9220f1da26d5c32bc5897bb859909bbc132f6b27424fe","after_hash":"d635094ab12a676c304bb3f092fd80876402f829384803b3b0d11f56e80dc25e","patch_hash":"cc62ed9b97cbfe877bdcaf1f2cc6decdb2717053537885c61c12c64549095138","hash_algorithm":"sha256","item_hash_version":3,"record_hash_version":1,"record_hash":"32c1af3aa2e92ed473136ce1719796ed526b0f7c0256bf93a6122472e87453c3","record":{"hash_algorithm":"sha256","ts":"2026-10-04T09:13:45.017Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":{"value":"implementer","source":"argv"},"topic":null},"op":"update","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:13:45.017Z"},{"op":"add","path":"/metadata/actual_result","value":"Full release gate green on the branch: npm run release:check passes end-to-end (typecheck, lint, duplication, docstring, coverage 100/100/100/100, audit:prod 0 vulnerabilities, pack:dry-run, changelog:check, all release verifiers) and pm health --strict-exit --require-merge-drivers exits 0. Pinned @unbrained/pm-cli@2026.10.4 (devDep exact + lockfile), @babel/eslint-parser 8.0.6, jscpd 5.4.0, @types/node 26.6.4, codeql-action SHAs 2892aa5e. Dependabot alert #3 (brace-expansion) fixed via npm audit fix to 5.0.12; npm audit --omit=dev clean. jscpd 5.4.0 overlap accounting adopted in parseJscpdReport with tighter fail-closed bounds. Dogfood through npx pm-cli 2026.10.4 (ops status/policy/scan) and bunx (ops status/policy) against a scratch tracker copy both green; pm-github@2026.9.26 installed as managed extension with a clean read-only sync dry-run (0 would update, 1 already in sync)."}],"before_hash":"0aeacb50402d935923f9220f1da26d5c32bc5897bb859909bbc132f6b27424fe","after_hash":"d635094ab12a676c304bb3f092fd80876402f829384803b3b0d11f56e80dc25e","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"32c1af3aa2e92ed473136ce1719796ed526b0f7c0256bf93a6122472e87453c3"}}]} +{"hash_algorithm":"sha256","ts":"2026-10-04T09:31:51.927Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"tests_remove","patch":[{"op":"remove","path":"/metadata/tests/1"},{"op":"replace","path":"/metadata/tests/0/provenance/created_at","value":"2026-10-04T09:13:43.780Z"},{"op":"replace","path":"/metadata/tests/0/command","value":"./node_modules/.bin/pm health --strict-exit --require-merge-drivers"},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:31:51.927Z"}],"before_hash":"d0433664d358e5b6cfebe2c39e8f7e030d1bce60de60bcb5a91aa4580d2fb062","after_hash":"24d36aeb2cbf48af7d5d4172cd93a23e6ef22da3fdd50ac138d75cbeba5237a6","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"0318a6a63801b4789924a37650c53d18457f7aee3f82a90be2701b8a827a327a","reanchor_evidence":[{"before_hash":"d635094ab12a676c304bb3f092fd80876402f829384803b3b0d11f56e80dc25e","after_hash":"28818f0c5b41345abb0ff2c3512c93e6bb08a709aa62cfebb20f5e99e39616ef","patch_hash":"1e240bfb1786db3b46b9cc00f94713a79e7d41cbd82aa59c93665047b9ada448","hash_algorithm":"sha256","item_hash_version":3,"record_hash_version":1,"record_hash":"43ce16e5746b4f431819148b4d3563ff1ab087d9e22a9840f87f70137ac30540","record":{"hash_algorithm":"sha256","ts":"2026-10-04T09:31:51.927Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"tests_remove","patch":[{"op":"remove","path":"/metadata/tests/1"},{"op":"replace","path":"/metadata/tests/0/provenance/created_at","value":"2026-10-04T09:13:43.780Z"},{"op":"replace","path":"/metadata/tests/0/command","value":"./node_modules/.bin/pm health --strict-exit --require-merge-drivers"},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:31:51.927Z"}],"before_hash":"d635094ab12a676c304bb3f092fd80876402f829384803b3b0d11f56e80dc25e","after_hash":"28818f0c5b41345abb0ff2c3512c93e6bb08a709aa62cfebb20f5e99e39616ef","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"43ce16e5746b4f431819148b4d3563ff1ab087d9e22a9840f87f70137ac30540"}}]} +{"hash_algorithm":"sha256","ts":"2026-10-04T09:31:52.793Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"tests_add","patch":[{"op":"add","path":"/metadata/tests/1","value":{"command":"npm run release:check","scope":"project","pm_context_mode":"none","provenance":{"author":"pi-cert-a","created_at":"2026-10-04T09:31:52.766Z","source_kind":"local_mutation","source_ref":"chore/pm-ops-pm-cli-2026-10-4"}}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:31:52.793Z"}],"before_hash":"24d36aeb2cbf48af7d5d4172cd93a23e6ef22da3fdd50ac138d75cbeba5237a6","after_hash":"2864bec5f588389633c8a26246a36331121d5f419b919b57bdc463b2a6c26cef","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"9b09abe61f5428a1b05244f3a5cc491ba3080be15c219d89b99347404dbe7850","reanchor_evidence":[{"before_hash":"28818f0c5b41345abb0ff2c3512c93e6bb08a709aa62cfebb20f5e99e39616ef","after_hash":"3f766211d29a2d1b740823b9f4ecb9e00ca64bc13418a187da5ae40e70291ed7","patch_hash":"056a1e6b39887d6b2c957f37221cebbf0489eca37b65c507ad6402dc33b128f4","hash_algorithm":"sha256","item_hash_version":3,"record_hash_version":1,"record_hash":"b6ab3e76915f9947700b9c5a39ef42f1310aeaa9df3591e2b4fa837c657bd814","record":{"hash_algorithm":"sha256","ts":"2026-10-04T09:31:52.793Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"tests_add","patch":[{"op":"add","path":"/metadata/tests/1","value":{"command":"npm run release:check","scope":"project","pm_context_mode":"none","provenance":{"author":"pi-cert-a","created_at":"2026-10-04T09:31:52.766Z","source_kind":"local_mutation","source_ref":"chore/pm-ops-pm-cli-2026-10-4"}}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:31:52.793Z"}],"before_hash":"28818f0c5b41345abb0ff2c3512c93e6bb08a709aa62cfebb20f5e99e39616ef","after_hash":"3f766211d29a2d1b740823b9f4ecb9e00ca64bc13418a187da5ae40e70291ed7","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"b6ab3e76915f9947700b9c5a39ef42f1310aeaa9df3591e2b4fa837c657bd814"}}]} +{"hash_algorithm":"sha256","ts":"2026-10-04T09:31:58.476Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"tests_remove","patch":[{"op":"remove","path":"/metadata/tests/1"},{"op":"replace","path":"/metadata/tests/0/provenance/created_at","value":"2026-10-04T09:31:52.766Z"},{"op":"replace","path":"/metadata/tests/0/command","value":"npm run release:check"},{"op":"add","path":"/metadata/tests/0/pm_context_mode","value":"none"},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:31:58.476Z"}],"before_hash":"2864bec5f588389633c8a26246a36331121d5f419b919b57bdc463b2a6c26cef","after_hash":"886bfed870d2d3537cd5efddf35267fd107bb0ac52c053a71df122cc13ed4b85","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"2895b0424a23eabc03cb9a3fa3daf3e6abe13530749f5c3d20f4f5d3a0555314","reanchor_evidence":[{"before_hash":"3f766211d29a2d1b740823b9f4ecb9e00ca64bc13418a187da5ae40e70291ed7","after_hash":"4494e2176e639df7b2252abea085514ba1cdd2508cb5eeff442232397351faf2","patch_hash":"cd8fbf767d86e830a4ffbbdaf09f61c7495a39021e829747aa46a25e09df4dda","hash_algorithm":"sha256","item_hash_version":3,"record_hash_version":1,"record_hash":"3cce0c9db009ec664efc4fb0273f499a2446de623838213bf32817ffa2782643","record":{"hash_algorithm":"sha256","ts":"2026-10-04T09:31:58.476Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"tests_remove","patch":[{"op":"remove","path":"/metadata/tests/1"},{"op":"replace","path":"/metadata/tests/0/provenance/created_at","value":"2026-10-04T09:31:52.766Z"},{"op":"replace","path":"/metadata/tests/0/command","value":"npm run release:check"},{"op":"add","path":"/metadata/tests/0/pm_context_mode","value":"none"},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:31:58.476Z"}],"before_hash":"3f766211d29a2d1b740823b9f4ecb9e00ca64bc13418a187da5ae40e70291ed7","after_hash":"4494e2176e639df7b2252abea085514ba1cdd2508cb5eeff442232397351faf2","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"3cce0c9db009ec664efc4fb0273f499a2446de623838213bf32817ffa2782643"}}]} +{"hash_algorithm":"sha256","ts":"2026-10-04T09:31:59.238Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"tests_add","patch":[{"op":"add","path":"/metadata/tests/1","value":{"command":"./node_modules/.bin/pm health --strict-exit --require-merge-drivers","scope":"project","pm_context_mode":"tracker","provenance":{"author":"pi-cert-a","created_at":"2026-10-04T09:31:59.205Z","source_kind":"local_mutation","source_ref":"chore/pm-ops-pm-cli-2026-10-4"}}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:31:59.238Z"}],"before_hash":"886bfed870d2d3537cd5efddf35267fd107bb0ac52c053a71df122cc13ed4b85","after_hash":"a21681e3a8588acbfe5cbb451b5470e4ba76ed0b61ff77dc452564cc7b35e589","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"dbcb168aebe7d40ac825e608d9889affa758c227c78f431335c6026f92d738ad","reanchor_evidence":[{"before_hash":"4494e2176e639df7b2252abea085514ba1cdd2508cb5eeff442232397351faf2","after_hash":"1e3eb8e54f240384dc6bed61ed902c55f4f67c0a5284b06d75345a366310df79","patch_hash":"4e92a11d1c01dd93dd185331a02d6c0025c8a59e3cc2d9635fe9c1b61f7eeadc","hash_algorithm":"sha256","item_hash_version":3,"record_hash_version":1,"record_hash":"443f6020b22cb591d1fb54e6774ca34461325fbbdac5cd890e2479cd082f63f2","record":{"hash_algorithm":"sha256","ts":"2026-10-04T09:31:59.238Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"tests_add","patch":[{"op":"add","path":"/metadata/tests/1","value":{"command":"./node_modules/.bin/pm health --strict-exit --require-merge-drivers","scope":"project","pm_context_mode":"tracker","provenance":{"author":"pi-cert-a","created_at":"2026-10-04T09:31:59.205Z","source_kind":"local_mutation","source_ref":"chore/pm-ops-pm-cli-2026-10-4"}}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:31:59.238Z"}],"before_hash":"4494e2176e639df7b2252abea085514ba1cdd2508cb5eeff442232397351faf2","after_hash":"1e3eb8e54f240384dc6bed61ed902c55f4f67c0a5284b06d75345a366310df79","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"443f6020b22cb591d1fb54e6774ca34461325fbbdac5cd890e2479cd082f63f2"}}]} +{"hash_algorithm":"sha256","ts":"2026-10-04T09:32:17.978Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"tests_remove","patch":[{"op":"remove","path":"/metadata/tests/1"},{"op":"replace","path":"/metadata/tests/0/provenance/created_at","value":"2026-10-04T09:31:59.205Z"},{"op":"replace","path":"/metadata/tests/0/pm_context_mode","value":"tracker"},{"op":"replace","path":"/metadata/tests/0/command","value":"./node_modules/.bin/pm health --strict-exit --require-merge-drivers"},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:32:17.978Z"}],"before_hash":"a21681e3a8588acbfe5cbb451b5470e4ba76ed0b61ff77dc452564cc7b35e589","after_hash":"f5dcd8d23f39ffdb2493141c1b0e38d1faaa83e7e8ef33e7b9c66a6a4cf93b39","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"2a2355b9b2c647de0024baf194bfb4e8a1b2b68ef52ae2cd6540985a1836acbd","reanchor_evidence":[{"before_hash":"1e3eb8e54f240384dc6bed61ed902c55f4f67c0a5284b06d75345a366310df79","after_hash":"8e1fa7d704f2dd5e488692ae70a0fa4ce3505fc869e3ab90857463edaadef4ba","patch_hash":"2d508df74bd5eae304142a7e14ac122b9ccb700e4c114ace6dc31cc89d85cff7","hash_algorithm":"sha256","item_hash_version":3,"record_hash_version":1,"record_hash":"2f0cc0cd1d97b63d862eda20ab37fde6bc6b4aec046b20f0414fff2607e75b1f","record":{"hash_algorithm":"sha256","ts":"2026-10-04T09:32:17.978Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"tests_remove","patch":[{"op":"remove","path":"/metadata/tests/1"},{"op":"replace","path":"/metadata/tests/0/provenance/created_at","value":"2026-10-04T09:31:59.205Z"},{"op":"replace","path":"/metadata/tests/0/pm_context_mode","value":"tracker"},{"op":"replace","path":"/metadata/tests/0/command","value":"./node_modules/.bin/pm health --strict-exit --require-merge-drivers"},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:32:17.978Z"}],"before_hash":"1e3eb8e54f240384dc6bed61ed902c55f4f67c0a5284b06d75345a366310df79","after_hash":"8e1fa7d704f2dd5e488692ae70a0fa4ce3505fc869e3ab90857463edaadef4ba","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"2f0cc0cd1d97b63d862eda20ab37fde6bc6b4aec046b20f0414fff2607e75b1f"}}]} +{"hash_algorithm":"sha256","ts":"2026-10-04T09:32:18.677Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"tests_add","patch":[{"op":"add","path":"/metadata/tests/1","value":{"command":"npm run release:check","scope":"project","pm_context_mode":"none","workspace_context_mode":"isolated","provenance":{"author":"pi-cert-a","created_at":"2026-10-04T09:32:18.654Z","source_kind":"local_mutation","source_ref":"chore/pm-ops-pm-cli-2026-10-4"}}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:32:18.677Z"}],"before_hash":"f5dcd8d23f39ffdb2493141c1b0e38d1faaa83e7e8ef33e7b9c66a6a4cf93b39","after_hash":"969d1f8d0bf9407fd11e34baf0f581977dcb4e438cfa4042a76573e174e58d45","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"3fa89ed6971e6095decb09809fa9948d7380b6b5760d5737d85c197046515de6","reanchor_evidence":[{"before_hash":"8e1fa7d704f2dd5e488692ae70a0fa4ce3505fc869e3ab90857463edaadef4ba","after_hash":"ae97f77a3d91997aec66ba59bcc8fb71efe9cde71c7dc1d799bbeeba109e236e","patch_hash":"94dfc4700f51d49febf4d7bf09517b50ea5e48a6301c306f22f8e29b49fb4f2f","hash_algorithm":"sha256","item_hash_version":3,"record_hash_version":1,"record_hash":"9e104588319a5ad887a46618650f41ce0a0bc91a7c4c7dcf8184540c93effed2","record":{"hash_algorithm":"sha256","ts":"2026-10-04T09:32:18.677Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"tests_add","patch":[{"op":"add","path":"/metadata/tests/1","value":{"command":"npm run release:check","scope":"project","pm_context_mode":"none","workspace_context_mode":"isolated","provenance":{"author":"pi-cert-a","created_at":"2026-10-04T09:32:18.654Z","source_kind":"local_mutation","source_ref":"chore/pm-ops-pm-cli-2026-10-4"}}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:32:18.677Z"}],"before_hash":"8e1fa7d704f2dd5e488692ae70a0fa4ce3505fc869e3ab90857463edaadef4ba","after_hash":"ae97f77a3d91997aec66ba59bcc8fb71efe9cde71c7dc1d799bbeeba109e236e","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"9e104588319a5ad887a46618650f41ce0a0bc91a7c4c7dcf8184540c93effed2"}}]} +{"hash_algorithm":"sha256","ts":"2026-10-04T09:32:38.181Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"tests_remove","patch":[{"op":"remove","path":"/metadata/tests/1"},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:32:38.181Z"}],"before_hash":"969d1f8d0bf9407fd11e34baf0f581977dcb4e438cfa4042a76573e174e58d45","after_hash":"ba118817c5b33dccc2a487aaaa69834ae346d2d548a94cba336d4813f678d04f","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"3ec9571c6591427a244c81c5ed767755bb884176b54eba54b536adaf1600c35d","reanchor_evidence":[{"before_hash":"ae97f77a3d91997aec66ba59bcc8fb71efe9cde71c7dc1d799bbeeba109e236e","after_hash":"04b7d8508312fad34d00f8115cc9ca0f27aade98a29c072fde09f65137a20f2a","patch_hash":"2e28ecdd54acc25f5f87128681e653728fe41f22625e6e4fb8cda7764cd9a75d","hash_algorithm":"sha256","item_hash_version":3,"record_hash_version":1,"record_hash":"2709061b36a0552c3e9183b7b9838f25886b5a4fc2d848a64aeecee1413143da","record":{"hash_algorithm":"sha256","ts":"2026-10-04T09:32:38.181Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"tests_remove","patch":[{"op":"remove","path":"/metadata/tests/1"},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:32:38.181Z"}],"before_hash":"ae97f77a3d91997aec66ba59bcc8fb71efe9cde71c7dc1d799bbeeba109e236e","after_hash":"04b7d8508312fad34d00f8115cc9ca0f27aade98a29c072fde09f65137a20f2a","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"2709061b36a0552c3e9183b7b9838f25886b5a4fc2d848a64aeecee1413143da"}}]} +{"hash_algorithm":"sha256","ts":"2026-10-04T09:32:39.059Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"tests_add","patch":[{"op":"add","path":"/metadata/tests/1","value":{"command":"npm run release:check","scope":"project","pm_context_mode":"none","workspace_context_mode":"snapshot","provenance":{"author":"pi-cert-a","created_at":"2026-10-04T09:32:39.022Z","source_kind":"local_mutation","source_ref":"chore/pm-ops-pm-cli-2026-10-4"}}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:32:39.059Z"}],"before_hash":"ba118817c5b33dccc2a487aaaa69834ae346d2d548a94cba336d4813f678d04f","after_hash":"eae185e210b75341e1fe32c7fb3771d2335084a039ed5803f69d9b41e5b17e4e","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"6ac7d1ee186dc691a00d775ff367ab89042441288157a78c5ca9b214d3c63f31","reanchor_evidence":[{"before_hash":"04b7d8508312fad34d00f8115cc9ca0f27aade98a29c072fde09f65137a20f2a","after_hash":"6a5e1f7e9796a690e973033be25ee159d30393445c66637f69dfd80aad5cb3d4","patch_hash":"e9e6c2d815d8fb2a1467f4e25f3435a2552da09280fbebfdb111d6d6987044e8","hash_algorithm":"sha256","item_hash_version":3,"record_hash_version":1,"record_hash":"77924345b361ebd342b862dfce4af0ebfb850af2c5a6ccee4f2dd88f643531b0","record":{"hash_algorithm":"sha256","ts":"2026-10-04T09:32:39.059Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"tests_add","patch":[{"op":"add","path":"/metadata/tests/1","value":{"command":"npm run release:check","scope":"project","pm_context_mode":"none","workspace_context_mode":"snapshot","provenance":{"author":"pi-cert-a","created_at":"2026-10-04T09:32:39.022Z","source_kind":"local_mutation","source_ref":"chore/pm-ops-pm-cli-2026-10-4"}}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:32:39.059Z"}],"before_hash":"04b7d8508312fad34d00f8115cc9ca0f27aade98a29c072fde09f65137a20f2a","after_hash":"6a5e1f7e9796a690e973033be25ee159d30393445c66637f69dfd80aad5cb3d4","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"77924345b361ebd342b862dfce4af0ebfb850af2c5a6ccee4f2dd88f643531b0"}}]} +{"hash_algorithm":"sha256","ts":"2026-10-04T09:38:43.468Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"tests_remove","patch":[{"op":"remove","path":"/metadata/tests/1"},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:38:43.468Z"}],"before_hash":"eae185e210b75341e1fe32c7fb3771d2335084a039ed5803f69d9b41e5b17e4e","after_hash":"d118887970be7848c96e688f8123dc6f8200c44cf313667b08f500b49a625fa6","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"7383eeed57373e3985be06463dd509a49f357f31715644064a2a82ac092298b3","reanchor_evidence":[{"before_hash":"6a5e1f7e9796a690e973033be25ee159d30393445c66637f69dfd80aad5cb3d4","after_hash":"cd4fefa66d981c6b2f37190291232fcf41aacdd2aaf82b97b9a78f85e5f8e8ee","patch_hash":"8b50a747a95d64f0eccad086a84a05b8965fcf3b51691c2cb168b4af25ad8285","hash_algorithm":"sha256","item_hash_version":3,"record_hash_version":1,"record_hash":"272a1770a9cabd05670ca9f33e2443ed006313185ab55aa0fdfed0503edc7099","record":{"hash_algorithm":"sha256","ts":"2026-10-04T09:38:43.468Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"tests_remove","patch":[{"op":"remove","path":"/metadata/tests/1"},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:38:43.468Z"}],"before_hash":"6a5e1f7e9796a690e973033be25ee159d30393445c66637f69dfd80aad5cb3d4","after_hash":"cd4fefa66d981c6b2f37190291232fcf41aacdd2aaf82b97b9a78f85e5f8e8ee","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"272a1770a9cabd05670ca9f33e2443ed006313185ab55aa0fdfed0503edc7099"}}]} +{"hash_algorithm":"sha256","ts":"2026-10-04T09:38:44.661Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"tests_add","patch":[{"op":"add","path":"/metadata/tests/1","value":{"command":"pwd && ls -a && cat package.json 2>&1 | head -3","scope":"project","pm_context_mode":"none","workspace_context_mode":"isolated","provenance":{"author":"pi-cert-a","created_at":"2026-10-04T09:38:44.624Z","source_kind":"local_mutation","source_ref":"chore/pm-ops-pm-cli-2026-10-4"}}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:38:44.661Z"}],"before_hash":"d118887970be7848c96e688f8123dc6f8200c44cf313667b08f500b49a625fa6","after_hash":"c4f4344eec5c644f641aeb7c158d1172dbe21e1406146d4d77a4aa50c1cc017d","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"c1445531855a6fc83ab9a1874836862e464b57b0f7a7f989c39d6230dc0b7686","reanchor_evidence":[{"before_hash":"cd4fefa66d981c6b2f37190291232fcf41aacdd2aaf82b97b9a78f85e5f8e8ee","after_hash":"d268a9cc12d423c33e441d468da2fc279bc1affe2d77d294f409eaa0bdcbf940","patch_hash":"f945641c920111e071d16c497e356ca2e78c934c1a09025ce24f008aa82a27b6","hash_algorithm":"sha256","item_hash_version":3,"record_hash_version":1,"record_hash":"d95189f2f386f77d654311d481e459e782c536b8d90efc9a377a51e39805ce54","record":{"hash_algorithm":"sha256","ts":"2026-10-04T09:38:44.661Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"tests_add","patch":[{"op":"add","path":"/metadata/tests/1","value":{"command":"pwd && ls -a && cat package.json 2>&1 | head -3","scope":"project","pm_context_mode":"none","workspace_context_mode":"isolated","provenance":{"author":"pi-cert-a","created_at":"2026-10-04T09:38:44.624Z","source_kind":"local_mutation","source_ref":"chore/pm-ops-pm-cli-2026-10-4"}}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:38:44.661Z"}],"before_hash":"cd4fefa66d981c6b2f37190291232fcf41aacdd2aaf82b97b9a78f85e5f8e8ee","after_hash":"d268a9cc12d423c33e441d468da2fc279bc1affe2d77d294f409eaa0bdcbf940","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"d95189f2f386f77d654311d481e459e782c536b8d90efc9a377a51e39805ce54"}}]} +{"hash_algorithm":"sha256","ts":"2026-10-04T09:38:48.080Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"tests_remove","patch":[{"op":"remove","path":"/metadata/tests/1"},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:38:48.080Z"}],"before_hash":"c4f4344eec5c644f641aeb7c158d1172dbe21e1406146d4d77a4aa50c1cc017d","after_hash":"6557994fcb18b6fc61ceca15c539a6d90e08fcbb561a6594825e10027ccf2323","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"db901fd28d2e201edea05b7d1ac3947e4ddcd3c329555d15d3d712d312ffa020","reanchor_evidence":[{"before_hash":"d268a9cc12d423c33e441d468da2fc279bc1affe2d77d294f409eaa0bdcbf940","after_hash":"2ef2e81699b5233b9640cfb3b895b35b258b23cf080ae5e2fa307035730fb6da","patch_hash":"d407e53c84557ffd96db5a0a1a791b60f383315dcfebfc90ffe46a114898107f","hash_algorithm":"sha256","item_hash_version":3,"record_hash_version":1,"record_hash":"c6641fe9011ed4d3cefad0c5da2ba14ef8f2fd7fff7c79ede42f3b272c68acbb","record":{"hash_algorithm":"sha256","ts":"2026-10-04T09:38:48.080Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"tests_remove","patch":[{"op":"remove","path":"/metadata/tests/1"},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T09:38:48.080Z"}],"before_hash":"d268a9cc12d423c33e441d468da2fc279bc1affe2d77d294f409eaa0bdcbf940","after_hash":"2ef2e81699b5233b9640cfb3b895b35b258b23cf080ae5e2fa307035730fb6da","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"c6641fe9011ed4d3cefad0c5da2ba14ef8f2fd7fff7c79ede42f3b272c68acbb"}}]} +{"hash_algorithm":"sha256","ts":"2026-10-04T10:11:11.001Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"tests_add","patch":[{"op":"add","path":"/metadata/tests/1","value":{"command":"npm run release:check","scope":"project","provenance":{"author":"pi-cert-a","created_at":"2026-10-04T10:11:10.972Z","source_kind":"local_mutation","source_ref":"chore/pm-ops-pm-cli-2026-10-4"}}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T10:11:11.001Z"}],"before_hash":"6557994fcb18b6fc61ceca15c539a6d90e08fcbb561a6594825e10027ccf2323","after_hash":"60b4b401fae5fd46b1797d05d8b20e57b655f3ce4fea02145b2eb3e409342938","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"a5b09e78dee7d1c35f4e8ec11780e2138235bc2667d1f3dddc158d88b5f85650","reanchor_evidence":[{"before_hash":"2ef2e81699b5233b9640cfb3b895b35b258b23cf080ae5e2fa307035730fb6da","after_hash":"0d8b3bc11bf6ce0a927dea7058c76cd82e85f131d494a16e42f16e4eb33cea37","patch_hash":"c67422985ef70f0de9c30f899c3796b2c75768f3f7d76f3e73e1c2222761c341","hash_algorithm":"sha256","item_hash_version":3,"record_hash_version":1,"record_hash":"1324e40fc15b0cb33b2669874990c8ecf207cdbfb67005f7c2117970960cd289","record":{"hash_algorithm":"sha256","ts":"2026-10-04T10:11:11.001Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"tests_add","patch":[{"op":"add","path":"/metadata/tests/1","value":{"command":"npm run release:check","scope":"project","provenance":{"author":"pi-cert-a","created_at":"2026-10-04T10:11:10.972Z","source_kind":"local_mutation","source_ref":"chore/pm-ops-pm-cli-2026-10-4"}}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T10:11:11.001Z"}],"before_hash":"2ef2e81699b5233b9640cfb3b895b35b258b23cf080ae5e2fa307035730fb6da","after_hash":"0d8b3bc11bf6ce0a927dea7058c76cd82e85f131d494a16e42f16e4eb33cea37","item_hash_version":3,"event_class":"maintenance","record_hash_version":1,"record_hash":"1324e40fc15b0cb33b2669874990c8ecf207cdbfb67005f7c2117970960cd289"}}]} +{"hash_algorithm":"sha256","ts":"2026-10-04T10:11:39.943Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/2","value":{"created_at":"2026-10-04T10:11:39.943Z","author":"pi-cert-a","text":"pm test --run receipts: linked 'pm health --strict-exit --require-merge-drivers' passes (exit 0, seeded tracker context). Linked 'npm run release:check' cannot run faithfully under the pm test harness on 2026.10.4: every seeding context (schema/auto/tracker) injects the sandbox PM_PATH, redirecting the suite's own 'pm init' throwaway workspaces so test/verify-lifecycle-policy.test.ts fails ENOENT on its drift fixture; --env-clear PM_PATH is reserved; per-test pm_context_mode=none requires an isolated workspace which is empty (npm: Missing script) or a snapshot which loses git-tag context (4 unrelated failures). The direct command — exactly what CI runs — is green (466/466, coverage 100/100/100/100). Filed upstream as unbraind/pm-cli#1391 (follow-up to #1318/#1354). Upstream issues referenced by pm-ops tests: #773 (driver/fence drift reported-not-gated), #921/#922 (merge receipts local-only)."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T10:11:39.943Z"}],"before_hash":"60b4b401fae5fd46b1797d05d8b20e57b655f3ce4fea02145b2eb3e409342938","after_hash":"87483176b1f63ad903ad97a757b20b914143e8bddb3df1bc039cd922cf5e6e03","item_hash_version":3,"event_class":"substantive","record_hash_version":1,"record_hash":"279c0c4b0528298624e600937a653c815147aa04d5da578daaac36a9488b583d","reanchor_evidence":[{"before_hash":"0d8b3bc11bf6ce0a927dea7058c76cd82e85f131d494a16e42f16e4eb33cea37","after_hash":"da1f693672b463550844bf404c075d03f9a54203281c57192ef1e0e6df49ba48","patch_hash":"cd57c28bb5a8d006aaeb1695400bab4b8df9eb54545610c6ad1e303f6207dcfb","hash_algorithm":"sha256","item_hash_version":3,"record_hash_version":1,"record_hash":"20af7d991681ea0e091fd02ea13e6ce603578336f4cfc203562bc89a08e0b8e2","record":{"hash_algorithm":"sha256","ts":"2026-10-04T10:11:39.943Z","author":"pi-cert-a","author_source":"asserted","agent_harness":"pi","agent_model":"glm-5.3:cloud","agent_model_source":"environment","agent_instance":"a001365e42af6f4640dc5b44","agent_provenance":{"model":{"value":"glm-5.3:cloud","source":"environment"},"effort":null,"role":null,"topic":null},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/2","value":{"created_at":"2026-10-04T10:11:39.943Z","author":"pi-cert-a","text":"pm test --run receipts: linked 'pm health --strict-exit --require-merge-drivers' passes (exit 0, seeded tracker context). Linked 'npm run release:check' cannot run faithfully under the pm test harness on 2026.10.4: every seeding context (schema/auto/tracker) injects the sandbox PM_PATH, redirecting the suite's own 'pm init' throwaway workspaces so test/verify-lifecycle-policy.test.ts fails ENOENT on its drift fixture; --env-clear PM_PATH is reserved; per-test pm_context_mode=none requires an isolated workspace which is empty (npm: Missing script) or a snapshot which loses git-tag context (4 unrelated failures). The direct command — exactly what CI runs — is green (466/466, coverage 100/100/100/100). Filed upstream as unbraind/pm-cli#1391 (follow-up to #1318/#1354). Upstream issues referenced by pm-ops tests: #773 (driver/fence drift reported-not-gated), #921/#922 (merge receipts local-only)."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T10:11:39.943Z"}],"before_hash":"0d8b3bc11bf6ce0a927dea7058c76cd82e85f131d494a16e42f16e4eb33cea37","after_hash":"da1f693672b463550844bf404c075d03f9a54203281c57192ef1e0e6df49ba48","item_hash_version":3,"event_class":"substantive","record_hash_version":1,"record_hash":"20af7d991681ea0e091fd02ea13e6ce603578336f4cfc203562bc89a08e0b8e2"}}]} +{"hash_algorithm":"sha256","ts":"2026-10-04T10:49:29.758Z","author":"codex-sol","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"5855d685e2129b043d4555ed","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"claim","patch":[{"op":"replace","path":"/metadata/claim_principal","value":"codex-sol"},{"op":"replace","path":"/metadata/assignee","value":"codex-sol"},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T10:49:29.758Z"}],"before_hash":"87483176b1f63ad903ad97a757b20b914143e8bddb3df1bc039cd922cf5e6e03","after_hash":"d6dfe741f090726948d34ac9565e966f472fa02a8efe4672c28a308f797185e7","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"effort":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"4be91fdd578b1113192eee05507d23645788dd0cf6c11e843540bdf91be80456","reanchor_evidence":[{"before_hash":"da1f693672b463550844bf404c075d03f9a54203281c57192ef1e0e6df49ba48","after_hash":"1c0dc24185fa849790a8c8a212f2825cf0f3730687201a9d7587f93aaa0d8c32","patch_hash":"017062f74a8232df816abbce509dddc710e503f23275120fcadd57b99be91008","hash_algorithm":"sha256","item_hash_version":3,"record_hash_version":1,"record_hash":"94066891ad5f8bce1d43348bb8eac5cf02bfa06f1a0f7454292528b9caf34e45","record":{"hash_algorithm":"sha256","ts":"2026-10-04T10:49:29.758Z","author":"codex-sol","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"5855d685e2129b043d4555ed","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"claim","patch":[{"op":"replace","path":"/metadata/claim_principal","value":"codex-sol"},{"op":"replace","path":"/metadata/assignee","value":"codex-sol"},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T10:49:29.758Z"}],"before_hash":"da1f693672b463550844bf404c075d03f9a54203281c57192ef1e0e6df49ba48","after_hash":"1c0dc24185fa849790a8c8a212f2825cf0f3730687201a9d7587f93aaa0d8c32","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"effort":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"94066891ad5f8bce1d43348bb8eac5cf02bfa06f1a0f7454292528b9caf34e45"}}]} +{"hash_algorithm":"sha256","ts":"2026-10-04T10:49:30.441Z","author":"codex-sol","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"5855d685e2129b043d4555ed","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/3","value":{"created_at":"2026-10-04T10:49:30.441Z","author":"codex-sol","text":"Restart verification: CI on retained head 2863889 fails the existing per-commit identity audit because earlier dogfood evidence contains an absolute host path. Use the audited history-redaction command, then replace the single certification commit so the forbidden path is not retained in branch history; preserve all source changes and verification evidence. Exact-pin every development dependency and update pm-changelog to published 2026.10.4. Full npm audit remains blocked by unpatched braces 3.0.3 required by real jscpd4 parity tests; never remove those tests to conceal it."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T10:49:30.441Z"}],"before_hash":"d6dfe741f090726948d34ac9565e966f472fa02a8efe4672c28a308f797185e7","after_hash":"0bcdbd1a3092525ce16a8bb1efbe2ba01c0d0118f113cbc931b938d8a9bf4bbf","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"effort":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"870d7ea5d68e464bd9ef17808d15265b7ef3649c077a330ff719d3f6759d23de","reanchor_evidence":[{"before_hash":"1c0dc24185fa849790a8c8a212f2825cf0f3730687201a9d7587f93aaa0d8c32","after_hash":"1f25cfc008a9f41149050e01e6bca145878c6c6c7c26b3520bf9ab48ddee9607","patch_hash":"de5aa050bb704e83b4b2dfc118ba5de06a6763bcc32b7a5d74a4c666011568b5","hash_algorithm":"sha256","item_hash_version":3,"record_hash_version":1,"record_hash":"109cf6e4e10176080504c2345ab5207be0ff1bf8c1b3de0cae2f05c1b23a1f07","record":{"hash_algorithm":"sha256","ts":"2026-10-04T10:49:30.441Z","author":"codex-sol","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"5855d685e2129b043d4555ed","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/3","value":{"created_at":"2026-10-04T10:49:30.441Z","author":"codex-sol","text":"Restart verification: CI on retained head 2863889 fails the existing per-commit identity audit because earlier dogfood evidence contains an absolute host path. Use the audited history-redaction command, then replace the single certification commit so the forbidden path is not retained in branch history; preserve all source changes and verification evidence. Exact-pin every development dependency and update pm-changelog to published 2026.10.4. Full npm audit remains blocked by unpatched braces 3.0.3 required by real jscpd4 parity tests; never remove those tests to conceal it."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T10:49:30.441Z"}],"before_hash":"1c0dc24185fa849790a8c8a212f2825cf0f3730687201a9d7587f93aaa0d8c32","after_hash":"1f25cfc008a9f41149050e01e6bca145878c6c6c7c26b3520bf9ab48ddee9607","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"effort":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"109cf6e4e10176080504c2345ab5207be0ff1bf8c1b3de0cae2f05c1b23a1f07"}}]} +{"hash_algorithm":"sha256","ts":"2026-10-04T10:49:31.187Z","author":"codex-sol","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"5855d685e2129b043d4555ed","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"history_redact","patch":[],"before_hash":"0bcdbd1a3092525ce16a8bb1efbe2ba01c0d0118f113cbc931b938d8a9bf4bbf","after_hash":"0bcdbd1a3092525ce16a8bb1efbe2ba01c0d0118f113cbc931b938d8a9bf4bbf","item_hash_version":3,"message":"Redact host-specific path from dogfood evidence","context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"effort":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"808ce0012c6c6f3244f1fcc3497297d11a4c07b68524d4773f9ad7cd250b901c"} +{"hash_algorithm":"sha256","ts":"2026-10-04T10:51:19.409Z","author":"codex-sol","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"5855d685e2129b043d4555ed","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"files_add","patch":[{"op":"replace","path":"/metadata/files/6/path","value":"test/compatibility-floor.test.ts"},{"op":"replace","path":"/metadata/files/5/path","value":"package.json"},{"op":"replace","path":"/metadata/files/4/path","value":"package-lock.json"},{"op":"replace","path":"/metadata/files/3/path","value":"duplication.ts"},{"op":"replace","path":"/metadata/files/2/path","value":".github/workflows/codeql.yml"},{"op":"replace","path":"/metadata/files/1/note","value":"Full audit blocker"},{"op":"replace","path":"/metadata/files/1/path","value":".agents/pm/issues/ops-braces-audit.toon"},{"op":"add","path":"/metadata/files/7","value":{"path":"test/lint-and-duplication-gates.test.ts","scope":"project","note":"Certification change"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T10:51:19.409Z"}],"before_hash":"0bcdbd1a3092525ce16a8bb1efbe2ba01c0d0118f113cbc931b938d8a9bf4bbf","after_hash":"91999e07e7d0a0c99717f7dd5740de68c032d794c76404ab29c0f305bdf68f9f","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"effort":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"6dfdfeb11557723404f09f02635889b63f0819a0bc90986863700480f5500d43"} +{"hash_algorithm":"sha256","ts":"2026-10-04T11:01:37.038Z","author":"codex-sol","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"5855d685e2129b043d4555ed","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/4","value":{"created_at":"2026-10-04T11:01:37.038Z","author":"codex-sol","text":"Restart gate and dogfood complete: direct locked npm run release:check exits 0, 466 tests/464 pass/0 fail/2 existing opt-in real-repo skips; c8 100% statements, branches, functions and lines across 23 sources. npx pm health --strict-exit --require-merge-drivers passes. npm audit --omit=dev has zero vulnerabilities; full npm audit reports 5 high findings in the single unpatched braces chain, tracked by ops-braces-audit. Exact-pinned every development dependency, pm-changelog upgraded to 2026.10.4, pm-github managed install refreshed to 2026.10.4. Packed real-tracker acceptance: npm pack --silent; install the tarball with @unbrained/pm-cli@2026.10.4 into pm-ops-dogfood; npx -y @unbrained/pm-cli@2026.10.4 package install --project reports complete:true; run ops status/policy/scan --repos through both npx and bunx --bun -y @unbrained/pm-cli@2026.10.4. Each runtime reports status/scan 1/1 ready and policy 6 passed/0 failed. Scratch copy removed. Read-only pm github sync --repo unbraind/pm-ops --dry-run: wouldSync 0, skipped 1, planned 1. The inspection commands report package structural readiness; the independent full-audit gate remains blocked. CI identity audit is repaired with audited redaction and replacement of the original certification commit, not a relaxed baseline."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T11:01:37.038Z"}],"before_hash":"91999e07e7d0a0c99717f7dd5740de68c032d794c76404ab29c0f305bdf68f9f","after_hash":"8dd02a746214b2b854118f35fb0a8151121c9d0566eb13650e872a3124ebf802","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"effort":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"6642178555f9fe696074b1270d7858eded186b9cad74197ed758632a480c1fe0"} +{"hash_algorithm":"sha256","ts":"2026-10-04T11:01:37.629Z","author":"codex-sol","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"5855d685e2129b043d4555ed","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"update","patch":[{"op":"replace","path":"/metadata/actual_result","value":"Certification candidate: PM CLI and pm-changelog exact 2026.10.4, all devDependencies exact, Dependabot #126/#127/#137/#138/#139 consolidated and brace-expansion alert #3 patched to 5.0.12. Direct release:check PASS (464/466, 2 existing opt-in skips, c8 100/100/100/100 over 23 sources); strict health PASS; packed npm/native Bun status/policy/scan PASS on real tracker copy; pm-github 2026.10.4 dry-run wouldSync=0/skipped=1/planned=1. NOT READY: full npm audit has 5 high unpatched braces-chain findings (ops-braces-audit), and final-head bot reviews are pending. pm test sandbox limitation is upstream pm-cli#1391."},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T11:01:37.629Z"}],"before_hash":"8dd02a746214b2b854118f35fb0a8151121c9d0566eb13650e872a3124ebf802","after_hash":"ed1cc94ca6de14519b1ff0744a47a888189d689b4dc6ea00875f584e6c51914a","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"effort":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"13862c8a738d05bdb3c656052cd79a8d25327556228c8f37c799cca1a21bcc7b"} diff --git a/.agents/pm/issues/ops-braces-audit.toon b/.agents/pm/issues/ops-braces-audit.toon new file mode 100644 index 00000000..18bf32d6 --- /dev/null +++ b/.agents/pm/issues/ops-braces-audit.toon @@ -0,0 +1,17 @@ +id: ops-braces-audit +title: Eliminate the unpatched braces dependency while preserving jscpd 4 parity acceptance +description: "Full npm audit reports GHSA-vfj7-8cjw-p6xm on braces 3.0.3 via micromatch, fast-glob, @jscpd/finder and the jscpd4 4.3.0 alias. npm latest braces is 3.0.3 and no patched registry release exists. Removing the alias would remove required real-engine parity tests, which is forbidden. Certification ops-hiee stays NOT READY for this independent audit gate." +type: Issue +status: open +priority: 1 +tags[2]: dependencies,security +created_at: "2026-10-04T10:51:17.651Z" +updated_at: "2026-10-04T10:51:18.521Z" +author: codex-sol +repro_steps: npm ci; npm audit; npm ls braces; npm view braces version +expected_result: Both npm audit and npm audit --omit=dev return zero vulnerabilities without deleting jscpd4 engine-parity tests or weakening thresholds. +actual_result: "npm audit: 5 high findings in the same unpatched braces chain; npm audit --omit=dev: zero vulnerabilities." +files[2]{path,scope,note}: + package.json,project,Required jscpd4 parity dependency + test/lint-and-duplication-gates.test.ts,project,Real jscpd4 parity tests must remain +body: "" diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index c7fcafda..7d17948f 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -28,13 +28,13 @@ jobs: persist-credentials: false - name: Initialize CodeQL - uses: github/codeql-action/init@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4 + uses: github/codeql-action/init@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4 with: languages: javascript-typescript # These packages are analyzed from source without a compiled build. build-mode: none - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4 + uses: github/codeql-action/analyze@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4 with: category: "/language:javascript-typescript" diff --git a/.gitignore b/.gitignore index c5210642..762203c7 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,12 @@ coverage/ # one turns the health gate red; the journal has no value once the transaction # has landed. Deliberately outside any `pm-cli:` fence, which the CLI rewrites. .agents/pm/transactions/ + +# pm-cli:runtime-cache:start +.agents/pm/runtime/ +.agents/pm/search/* +.agents/pm/locks/ +.agents/pm/transactions/ +.agents/pm/checkpoints/ +!.agents/pm/search/eval-queries.json +# pm-cli:runtime-cache:end diff --git a/dist/duplication.d.ts b/dist/duplication.d.ts index e6180979..876a7879 100644 --- a/dist/duplication.d.ts +++ b/dist/duplication.d.ts @@ -71,6 +71,8 @@ interface ReportedCloneEnd { interface ReportedClone { readonly firstFile: ReportedCloneEnd; readonly secondFile: ReportedCloneEnd; + /** Whole-line span of the clone, at least one line per the analyzer's floor. */ + readonly lines: number; } /** jscpd 5's JSON report shape, as written by its `json` reporter. */ interface ReportedAnalysis { @@ -88,6 +90,10 @@ interface ReportedAnalysis { * * Every field the duplication gate consumes is checked, so a jscpd output * format change fails the gate closed instead of silently reporting zero. + * jscpd 5.4 counts overlapping clone regions once per clone, so + * `duplicatedLines` may exceed the total `lines` of the scanned sources; the + * fail-closed bound is instead the sum of the reported clone spans, which no + * real report can exceed without double-counting clones themselves. * * @param report - The parsed `jscpd-report.json` value. * @returns The clone pairs and aggregate line statistics, validated. diff --git a/dist/duplication.d.ts.map b/dist/duplication.d.ts.map index 8e6cdd38..8a3aa03f 100644 --- a/dist/duplication.d.ts.map +++ b/dist/duplication.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"duplication.d.ts","sourceRoot":"","sources":["../duplication.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"duplication.d.ts","sourceRoot":"","sources":["../duplication.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/duplication.js b/dist/duplication.js index a693b492..46e120f5 100644 --- a/dist/duplication.js +++ b/dist/duplication.js @@ -69,6 +69,10 @@ function expectCloneEnd(value, context) { * * Every field the duplication gate consumes is checked, so a jscpd output * format change fails the gate closed instead of silently reporting zero. + * jscpd 5.4 counts overlapping clone regions once per clone, so + * `duplicatedLines` may exceed the total `lines` of the scanned sources; the + * fail-closed bound is instead the sum of the reported clone spans, which no + * real report can exceed without double-counting clones themselves. * * @param report - The parsed `jscpd-report.json` value. * @returns The clone pairs and aggregate line statistics, validated. @@ -80,9 +84,14 @@ export function parseJscpdReport(report) { throw new Error("duplication: jscpd report duplicates is not an array"); const clones = duplicates.map((clone) => { const record = expectRecord(clone, "clone"); + const lines = expectNumber(record, "lines", "clone.lines"); + if (!Number.isInteger(lines) || lines < 1) { + throw new Error("duplication: jscpd report clone.lines is not a positive integer span"); + } return { firstFile: expectCloneEnd(record.firstFile, "clone.firstFile"), secondFile: expectCloneEnd(record.secondFile, "clone.secondFile"), + lines, }; }); const statistics = expectRecord(root.statistics, "statistics"); @@ -90,11 +99,15 @@ export function parseJscpdReport(report) { const lines = expectNumber(total, "lines", "statistics.total.lines"); const duplicatedLines = expectNumber(total, "duplicatedLines", "statistics.total.duplicatedLines"); const sources = expectNumber(total, "sources", "statistics.total.sources"); + const cloneLineSpans = clones.reduce((total, clone) => total + clone.lines, 0); + const largestCloneSpan = clones.reduce((largest, clone) => Math.max(largest, clone.lines), 0); // Impossible counts could compute a passing percentage or false completeness. if (!Number.isInteger(lines) || + lines < 0 || + largestCloneSpan > lines || !Number.isInteger(duplicatedLines) || duplicatedLines < 0 || - duplicatedLines > lines || + duplicatedLines > cloneLineSpans || !Number.isInteger(sources) || sources < 0) { throw new Error("duplication: jscpd report statistics.total contains impossible counts"); diff --git a/dist/duplication.js.map b/dist/duplication.js.map index ba62b808..62ff49bb 100644 --- a/dist/duplication.js.map +++ b/dist/duplication.js.map @@ -1 +1 @@ -{"version":3,"file":"duplication.js","sourceRoot":"","sources":["../duplication.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"duplication.js","sourceRoot":"","sources":["../duplication.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/duplication.ts b/duplication.ts index f0149f86..11f16ef7 100644 --- a/duplication.ts +++ b/duplication.ts @@ -81,6 +81,8 @@ interface ReportedCloneEnd { interface ReportedClone { readonly firstFile: ReportedCloneEnd; readonly secondFile: ReportedCloneEnd; + /** Whole-line span of the clone, at least one line per the analyzer's floor. */ + readonly lines: number; } /** jscpd 5's JSON report shape, as written by its `json` reporter. */ @@ -195,6 +197,10 @@ function expectCloneEnd(value: unknown, context: string): ReportedCloneEnd { * * Every field the duplication gate consumes is checked, so a jscpd output * format change fails the gate closed instead of silently reporting zero. + * jscpd 5.4 counts overlapping clone regions once per clone, so + * `duplicatedLines` may exceed the total `lines` of the scanned sources; the + * fail-closed bound is instead the sum of the reported clone spans, which no + * real report can exceed without double-counting clones themselves. * * @param report - The parsed `jscpd-report.json` value. * @returns The clone pairs and aggregate line statistics, validated. @@ -205,9 +211,14 @@ export function parseJscpdReport(report: unknown): ReportedAnalysis { if (!Array.isArray(duplicates)) throw new Error("duplication: jscpd report duplicates is not an array"); const clones = duplicates.map((clone) => { const record = expectRecord(clone, "clone"); + const lines = expectNumber(record, "lines", "clone.lines"); + if (!Number.isInteger(lines) || lines < 1) { + throw new Error("duplication: jscpd report clone.lines is not a positive integer span"); + } return { firstFile: expectCloneEnd(record.firstFile, "clone.firstFile"), secondFile: expectCloneEnd(record.secondFile, "clone.secondFile"), + lines, }; }); const statistics = expectRecord(root.statistics, "statistics"); @@ -215,12 +226,16 @@ export function parseJscpdReport(report: unknown): ReportedAnalysis { const lines = expectNumber(total, "lines", "statistics.total.lines"); const duplicatedLines = expectNumber(total, "duplicatedLines", "statistics.total.duplicatedLines"); const sources = expectNumber(total, "sources", "statistics.total.sources"); + const cloneLineSpans = clones.reduce((total, clone) => total + clone.lines, 0); + const largestCloneSpan = clones.reduce((largest, clone) => Math.max(largest, clone.lines), 0); // Impossible counts could compute a passing percentage or false completeness. if ( !Number.isInteger(lines) || + lines < 0 || + largestCloneSpan > lines || !Number.isInteger(duplicatedLines) || duplicatedLines < 0 || - duplicatedLines > lines || + duplicatedLines > cloneLineSpans || !Number.isInteger(sources) || sources < 0 ) { diff --git a/package-lock.json b/package-lock.json index fccc4494..e8a0dded 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,16 +13,16 @@ "typescript": "7.0.2" }, "devDependencies": { - "@babel/eslint-parser": "^8.0.5", - "@babel/plugin-syntax-typescript": "^8.0.3", - "@types/node": "^26.2.0", - "@unbrained/pm-cli": "2026.9.29", - "c8": "^12.0.0", - "eslint": "^10.10.0", - "fast-glob": "^3.3.3", - "jscpd": "^5.2.1", + "@babel/eslint-parser": "8.0.6", + "@babel/plugin-syntax-typescript": "8.0.3", + "@types/node": "26.6.4", + "@unbrained/pm-cli": "2026.10.4", + "c8": "12.0.0", + "eslint": "10.11.0", + "fast-glob": "3.3.3", + "jscpd": "5.4.0", "jscpd4": "npm:jscpd@4.3.0", - "pm-changelog": "2026.9.25" + "pm-changelog": "2026.10.4" }, "engines": { "node": ">=22.18.0" @@ -113,9 +113,9 @@ } }, "node_modules/@babel/eslint-parser": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-8.0.5.tgz", - "integrity": "sha512-q4c+FpoJ/FKeiLnZ9Os3vWnSlZw3dBmlTUx6vuITRqbd8yn4hgUB0/OOJ+gi5lt+mOx/0IW2rXINR98JJllfag==", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-8.0.6.tgz", + "integrity": "sha512-mXx93HLovamLnDDLQ4i48gm4HHtaoqJrbMAuJqrMfpCGJkJ5M4sXhRgKGTrxykg1P8tAN5myrJxsRZuMuTq+OQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1020,9 +1020,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.2.tgz", - "integrity": "sha512-X1P21scMv4zGKLYqjdGjaKa7COa0RKVYYZZN/NfvLQ1JegxFhdhpZG/Lyn8AXx6CDUavKAd11v6BvfpkDByK8g==", + "version": "26.6.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.4.tgz", + "integrity": "sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg==", "dev": true, "license": "MIT", "dependencies": { @@ -1357,9 +1357,9 @@ } }, "node_modules/@unbrained/pm-cli": { - "version": "2026.9.29", - "resolved": "https://registry.npmjs.org/@unbrained/pm-cli/-/pm-cli-2026.9.29.tgz", - "integrity": "sha512-dkWT7u42PhKVbignagfdvwiLkIIo1pzsX4zetaKuwIXK68yyv6JqnYJ0fndRNNqTCEFUZOx7ArW3USE7f1tg1A==", + "version": "2026.10.4", + "resolved": "https://registry.npmjs.org/@unbrained/pm-cli/-/pm-cli-2026.10.4.tgz", + "integrity": "sha512-NZLdiUSUKIRcFiMj9lG0L5UubA9G33fq5WzB1JzJjTTlYxYCVjrFFOCV2rtxYTaYTCzX9o/6V/A4fDx6N3mm/w==", "dev": true, "license": "MIT", "dependencies": { @@ -1367,10 +1367,10 @@ "@toon-format/toon": "^4.1.1", "@types/node": ">=22", "commander": "^15.0.0", - "fast-glob": "^3.3.3", "fast-json-patch": "^3.1.1", "npm-package-arg": "^13.0.2", "tar": "7.5.22", + "tinyglobby": "^0.2.17", "yaml": "^2.9.1" }, "bin": { @@ -1556,9 +1556,9 @@ } }, "node_modules/brace-expansion": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", - "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz", + "integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2932,9 +2932,9 @@ "peer": true }, "node_modules/jscpd": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-5.2.1.tgz", - "integrity": "sha512-YNizwOc+NIKgtspq/xrbdURYKTNC9IvIpGWuOZvkEAkdAhevkbdMk1tAC0c1ievSzJd0GjB8PLlCcpCqWF+AEQ==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-5.4.0.tgz", + "integrity": "sha512-6mU8OHff4rPJ3D5lIsQns82/aQhDas22gMsGurHx1wcrfXWOZDNaobi6rKhLevo+77ntWKUXOwtM6lcrkJeL7w==", "dev": true, "license": "MIT", "bin": { @@ -2947,20 +2947,20 @@ "url": "https://opencollective.com/jscpd" }, "optionalDependencies": { - "jscpd-darwin-arm64": "5.2.1", - "jscpd-darwin-x64": "5.2.1", - "jscpd-linux-arm64-gnu": "5.2.1", - "jscpd-linux-arm64-musl": "5.2.1", - "jscpd-linux-x64-gnu": "5.2.1", - "jscpd-linux-x64-musl": "5.2.1", - "jscpd-windows-arm64-msvc": "5.2.1", - "jscpd-windows-x64-msvc": "5.2.1" + "jscpd-darwin-arm64": "5.4.0", + "jscpd-darwin-x64": "5.4.0", + "jscpd-linux-arm64-gnu": "5.4.0", + "jscpd-linux-arm64-musl": "5.4.0", + "jscpd-linux-x64-gnu": "5.4.0", + "jscpd-linux-x64-musl": "5.4.0", + "jscpd-windows-arm64-msvc": "5.4.0", + "jscpd-windows-x64-msvc": "5.4.0" } }, "node_modules/jscpd-darwin-arm64": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/jscpd-darwin-arm64/-/jscpd-darwin-arm64-5.2.1.tgz", - "integrity": "sha512-svftqL0o7EA0Of0Qo9LbwOE4IrIAoFP87yfmPML/ScqZkDwyezL4ggH//aXULKrOPQWLwkTgbSqM0OgmxfOpyg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/jscpd-darwin-arm64/-/jscpd-darwin-arm64-5.4.0.tgz", + "integrity": "sha512-fNIDtNn9WE4YXoFoqf+3tkHb1+GaKKOeKzh77Wx61Gfa9iDxlCv5rO0Fjy7oWmGehUUKqslDaeXXtn/RoDprCg==", "cpu": [ "arm64" ], @@ -2972,9 +2972,9 @@ ] }, "node_modules/jscpd-darwin-x64": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/jscpd-darwin-x64/-/jscpd-darwin-x64-5.2.1.tgz", - "integrity": "sha512-m9AM+/LgtgUsGKGWmZdK82IgqEIATF6z2LJX+CmODGYw8WlBkji3ZdNicuHbGyviBZLaFsSGx1Axy+WFhmQUsA==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/jscpd-darwin-x64/-/jscpd-darwin-x64-5.4.0.tgz", + "integrity": "sha512-bxlnCVEb69SGIsas1+PaqZyFY8iYVTVjCBxfjVD74UafX115Ysw+oO9LAlsJaGsKUnK8Zsq5bhM33kBHux6bTA==", "cpu": [ "x64" ], @@ -2986,9 +2986,9 @@ ] }, "node_modules/jscpd-linux-arm64-gnu": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/jscpd-linux-arm64-gnu/-/jscpd-linux-arm64-gnu-5.2.1.tgz", - "integrity": "sha512-W/9KvjikBfzhDtszY089W66krrx5hG7eO57hZ+uzQ71ij9XRb5FV9n1pGNBivw9xjZKghgsoBraWjAkZ87jq8w==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/jscpd-linux-arm64-gnu/-/jscpd-linux-arm64-gnu-5.4.0.tgz", + "integrity": "sha512-c4hX5QjuRyzLFJ+A+jNGHRpGlDvxcx+zzs4RJmZHpl23istuTMIkelwTOWliF4gXOm0RWXDlX/ywWKr9+Lre7w==", "cpu": [ "arm64" ], @@ -3003,9 +3003,9 @@ ] }, "node_modules/jscpd-linux-arm64-musl": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/jscpd-linux-arm64-musl/-/jscpd-linux-arm64-musl-5.2.1.tgz", - "integrity": "sha512-tjQcXmOAnXBXaciPZuVGZndSAEXbwO29+ugkJZbwTAtO9m16MdMKuQz86iT1peneJlNl/k/Et8gs0jFRO2MS+Q==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/jscpd-linux-arm64-musl/-/jscpd-linux-arm64-musl-5.4.0.tgz", + "integrity": "sha512-p4FUCNyL8WPTlizdZqfjontFwJ/+jnERYM2+YX2miYvm0NxzsIi23MhfzPl/eUHxkiT5wethV0NRYEAkJr999Q==", "cpu": [ "arm64" ], @@ -3020,9 +3020,9 @@ ] }, "node_modules/jscpd-linux-x64-gnu": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/jscpd-linux-x64-gnu/-/jscpd-linux-x64-gnu-5.2.1.tgz", - "integrity": "sha512-t/lRefzbkHCycEpmCRlYSFYSNjw85lr58yWV3ZH9PCMt7Bb/neNCn/20YI1V6RroWFg5/VyU66Sv//fEw+h5Ow==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/jscpd-linux-x64-gnu/-/jscpd-linux-x64-gnu-5.4.0.tgz", + "integrity": "sha512-44NXS0gtYbjBCc53Gwilgj7PPwnWv9YTF/rGc0ZfnFcpzSoOKKU11yH+qHfCVie1hHte1wHyZ1f9Kjc8nGe2/g==", "cpu": [ "x64" ], @@ -3037,9 +3037,9 @@ ] }, "node_modules/jscpd-linux-x64-musl": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/jscpd-linux-x64-musl/-/jscpd-linux-x64-musl-5.2.1.tgz", - "integrity": "sha512-2GQWdb0JVug32tb00MH0vtjQyN7PAmVlHuQ/8IEn+/lcxSU6Zcf132+ggrDQdTxHxBevo9GnzapaC/It+7kgyw==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/jscpd-linux-x64-musl/-/jscpd-linux-x64-musl-5.4.0.tgz", + "integrity": "sha512-m9XHj14Zwia9RjWDkHDrl6VJ3W/b7m8qjFqjhcJ668Vkxoj4Ri/qeo0bo6is+fSw+bYxYexV6xxqIKRDolc8Lg==", "cpu": [ "x64" ], @@ -3066,9 +3066,9 @@ } }, "node_modules/jscpd-windows-arm64-msvc": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/jscpd-windows-arm64-msvc/-/jscpd-windows-arm64-msvc-5.2.1.tgz", - "integrity": "sha512-FUVOZ7Qlhvj7A8bYjpHjAJC7AU2kCioVUAPoD9wFk5xpOkLcZdRtCjgLUpTkczRVUvalrdBHi7UuwmjVuMjZxA==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/jscpd-windows-arm64-msvc/-/jscpd-windows-arm64-msvc-5.4.0.tgz", + "integrity": "sha512-AoP5RXyb9gIf8xmFwAc+Rgh4XJNyX1upcD+R1A6u4XjsDo2/oF+KKB4dtKnG2DbFQ+0fyFg/ClOcw+asQZJfPg==", "cpu": [ "arm64" ], @@ -3080,9 +3080,9 @@ ] }, "node_modules/jscpd-windows-x64-msvc": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/jscpd-windows-x64-msvc/-/jscpd-windows-x64-msvc-5.2.1.tgz", - "integrity": "sha512-N4qo1cpcGCxf+HS4KS/Ue7qUozi/ndm60DIbQy25YYaAy/8LGI2F3KInaerebmW0MzV8sMMC3PcggKwztnsKbw==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/jscpd-windows-x64-msvc/-/jscpd-windows-x64-msvc-5.4.0.tgz", + "integrity": "sha512-dYkb5mAo5i7fjrtf2Ft6z9a/I38RJMd4JirEgJiW2BIv5pAGmfMVPDy1xEXL3hJqraXzeMIfnzqJFanefCyC6g==", "cpu": [ "x64" ], @@ -3593,9 +3593,9 @@ } }, "node_modules/pm-changelog": { - "version": "2026.9.25", - "resolved": "https://registry.npmjs.org/pm-changelog/-/pm-changelog-2026.9.25.tgz", - "integrity": "sha512-j2l97jlJIfuMiB7KDi7oIr9MWxdQvqnDx/JwE3pxC31fDw3MywnSmaTcE9/gV6sVlZbQkOSxnxooHzDwRo+1+g==", + "version": "2026.10.4", + "resolved": "https://registry.npmjs.org/pm-changelog/-/pm-changelog-2026.10.4.tgz", + "integrity": "sha512-YJJHJYv2i+olzGVF+qdab3wWG6auiRVIvf7TZD4ZdUhE/8lIawf3aYOOZZVJHogN8xP8rNUlVV9Lc1OXKLlQ7w==", "dev": true, "license": "MIT", "bin": { @@ -4074,6 +4074,54 @@ "node": "20 || >=22" } }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", diff --git a/package.json b/package.json index ce3bf909..fea56908 100644 --- a/package.json +++ b/package.json @@ -118,16 +118,16 @@ } }, "devDependencies": { - "@babel/eslint-parser": "^8.0.5", - "@babel/plugin-syntax-typescript": "^8.0.3", - "@types/node": "^26.2.0", - "@unbrained/pm-cli": "2026.9.29", - "c8": "^12.0.0", - "eslint": "^10.10.0", - "fast-glob": "^3.3.3", - "jscpd": "^5.2.1", + "@babel/eslint-parser": "8.0.6", + "@babel/plugin-syntax-typescript": "8.0.3", + "@types/node": "26.6.4", + "@unbrained/pm-cli": "2026.10.4", + "c8": "12.0.0", + "eslint": "10.11.0", + "fast-glob": "3.3.3", + "jscpd": "5.4.0", "jscpd4": "npm:jscpd@4.3.0", - "pm-changelog": "2026.9.25" + "pm-changelog": "2026.10.4" }, "keywords": [ "pm-cli", diff --git a/test/compatibility-floor.test.ts b/test/compatibility-floor.test.ts index 04298add..b599db4f 100644 --- a/test/compatibility-floor.test.ts +++ b/test/compatibility-floor.test.ts @@ -34,7 +34,7 @@ const releaseWorkflow = readFileSync(resolve(repoRoot, ".github", "workflows", " const CLI = "@unbrained/pm-cli"; const EXACT_VERSION = /^\d+\.\d+\.\d+$/; -const REQUIRED_DEVELOPMENT_VERSION = "2026.9.29"; +const REQUIRED_DEVELOPMENT_VERSION = "2026.10.4"; /** * Two independent systems enforce the pm CLI compatibility floor, and each reads diff --git a/test/lint-and-duplication-gates.test.ts b/test/lint-and-duplication-gates.test.ts index 41ab8664..7268d804 100644 --- a/test/lint-and-duplication-gates.test.ts +++ b/test/lint-and-duplication-gates.test.ts @@ -392,6 +392,12 @@ test("jscpd 5 report parsing accepts a real report shape and fails closed for ma const clone = { firstFile: { name: "/repo/src/first.ts", start: 1, end: 11 }, secondFile: { name: "/repo/test/second.ts", start: 1, end: 11 }, + lines: 11, + }; + const overlapping = { + ...clone, + firstFile: { name: "/repo/src/first.ts", start: 1, end: 12 }, + lines: 12, }; const statistics = { total: { lines: 22, duplicatedLines: 11, sources: 2 } }; const parsed = parseJscpdReport({ duplicates: [clone], statistics }); @@ -399,24 +405,39 @@ test("jscpd 5 report parsing accepts a real report shape and fails closed for ma assert.equal(parsed.duplicates[0]?.firstFile.name, "/repo/src/first.ts"); assert.equal(parsed.statistics.total.lines, 22); assert.equal(parsed.statistics.total.sources, 2); + // jscpd 5.4 counts overlapping clone regions once per clone, so duplicated + // lines may exceed total lines while staying within the reported clone spans. + const overlappingStatistics = { total: { lines: 22, duplicatedLines: 23, sources: 2 } }; + const overlappingParsed = parseJscpdReport({ + duplicates: [clone, overlapping], + statistics: overlappingStatistics, + }); + assert.equal(overlappingParsed.statistics.total.duplicatedLines, 23); + assert.equal(overlappingParsed.duplicates.length, 2); const malformed: unknown[] = [ null, "report", { duplicates: "no", statistics }, { duplicates: [null], statistics }, - { duplicates: [{ firstFile: null, secondFile: clone.secondFile }], statistics }, - { duplicates: [{ firstFile: { name: 1, start: 1, end: 2 }, secondFile: clone.secondFile }], statistics }, - { duplicates: [{ firstFile: { name: "a.ts", start: "1", end: 2 }, secondFile: clone.secondFile }], statistics }, - { duplicates: [{ firstFile: { name: "a.ts", start: Number.NaN, end: 2 }, secondFile: clone.secondFile }], statistics }, + { duplicates: [{ firstFile: null, secondFile: clone.secondFile, lines: 11 }], statistics }, + { duplicates: [{ firstFile: { name: 1, start: 1, end: 2 }, secondFile: clone.secondFile, lines: 11 }], statistics }, + { duplicates: [{ firstFile: { name: "a.ts", start: "1", end: 2 }, secondFile: clone.secondFile, lines: 11 }], statistics }, + { duplicates: [{ firstFile: { name: "a.ts", start: Number.NaN, end: 2 }, secondFile: clone.secondFile, lines: 11 }], statistics }, + { duplicates: [{ firstFile: clone.firstFile, secondFile: clone.secondFile, lines: 0 }], statistics }, + { duplicates: [{ firstFile: clone.firstFile, secondFile: clone.secondFile, lines: 1.5 }], statistics }, + { duplicates: [{ firstFile: clone.firstFile, secondFile: clone.secondFile }], statistics }, { duplicates: [clone], statistics: null }, { duplicates: [clone], statistics: { total: null } }, - { duplicates: [clone], statistics: { total: { lines: "22", duplicatedLines: 11 } } }, - { duplicates: [clone], statistics: { total: { lines: 22 } } }, - { duplicates: [clone], statistics: { total: { lines: 0, duplicatedLines: 1 } } }, - { duplicates: [clone], statistics: { total: { lines: 22, duplicatedLines: -1 } } }, - { duplicates: [clone], statistics: { total: { lines: 22.5, duplicatedLines: 11 } } }, - { duplicates: [clone], statistics: { total: { lines: 22, duplicatedLines: 1.5 } } }, + { duplicates: [clone], statistics: { total: { lines: "22", duplicatedLines: 11, sources: 2 } } }, + { duplicates: [clone], statistics: { total: { lines: 22, duplicatedLines: 11 } } }, + { duplicates: [clone], statistics: { total: { lines: 0, duplicatedLines: 1, sources: 2 } } }, + { duplicates: [clone], statistics: { total: { lines: -22, duplicatedLines: 0, sources: 2 } } }, + { duplicates: [clone], statistics: { total: { lines: 22, duplicatedLines: -1, sources: 2 } } }, + { duplicates: [clone], statistics: { total: { lines: 22, duplicatedLines: 12, sources: 2 } } }, + { duplicates: [clone], statistics: { total: { lines: 22.5, duplicatedLines: 11, sources: 2 } } }, + { duplicates: [clone], statistics: { total: { lines: 22, duplicatedLines: 1.5, sources: 2 } } }, { duplicates: [clone], statistics: { total: { lines: 22, duplicatedLines: 11, sources: -1 } } }, + { duplicates: [clone], statistics: { total: { lines: 22, duplicatedLines: 11, sources: 2.5 } } }, ]; for (const report of malformed) assert.throws(() => parseJscpdReport(report), /jscpd report/); }); From ede9c25bc5f7d0d861a8e95596ce0f1f58888dba Mon Sep 17 00:00:00 2001 From: SteveBot <1153461+unbraind@users.noreply.github.com> Date: Sun, 4 Oct 2026 13:26:35 +0200 Subject: [PATCH 2/3] Keep the search evaluation file eligible for tracking --- .agents/pm/chores/ops-hiee.toon | 18 ++++++++++++++---- .agents/pm/history/ops-hiee.jsonl | 4 ++++ .gitignore | 2 +- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/.agents/pm/chores/ops-hiee.toon b/.agents/pm/chores/ops-hiee.toon index 9c037b1e..136a4a0c 100644 --- a/.agents/pm/chores/ops-hiee.toon +++ b/.agents/pm/chores/ops-hiee.toon @@ -6,27 +6,30 @@ status: in_progress priority: 1 tags[2]: cert,deps created_at: "2026-10-04T08:59:29.371Z" -updated_at: "2026-10-04T11:01:37.629Z" +updated_at: "2026-10-04T11:26:25.729Z" assignee: codex-sol claim_principal: codex-sol author: pi-cert-a actual_result: "Certification candidate: PM CLI and pm-changelog exact 2026.10.4, all devDependencies exact, Dependabot #126/#127/#137/#138/#139 consolidated and brace-expansion alert #3 patched to 5.0.12. Direct release:check PASS (464/466, 2 existing opt-in skips, c8 100/100/100/100 over 23 sources); strict health PASS; packed npm/native Bun status/policy/scan PASS on real tracker copy; pm-github 2026.10.4 dry-run wouldSync=0/skipped=1/planned=1. NOT READY: full npm audit has 5 high unpatched braces-chain findings (ops-braces-audit), and final-head bot reviews are pending. pm test sandbox limitation is upstream pm-cli#1391." -comments[5]{created_at,author,text}: +comments[7]{created_at,author,text}: "2026-10-04T08:59:35.779Z",pi-cert-a,"Starting certification on PM CLI 2026.10.4. Pinning @unbrained/pm-cli to 2026.10.4 (supersedes Dependabot #138 which proposed 2026.10.1), @babel/eslint-parser ^8.0.6 (#126), jscpd ^5.4.0 (#139), @types/node lockfile 26.6.4 (newer than #137's 26.6.3), and codeql-action SHAs 2892aa5e (#127). Security alert #3 (brace-expansion) fixed via npm audit fix -> 5.0.12; npm audit --omit=dev clean. Note: the braces GHSA-vfj7-8cjw-p6xm advisory flags ALL published braces versions (vulnerable <=3.0.3, no patched release); its only path into the tree is the jscpd4 dev alias kept for duplication-gate v4-engine parity tests (peer floor jscpd >=4.3.0 <6.0.0), so it is refused rather than weakening the gate." "2026-10-04T09:13:25.591Z",pi-cert-a,"Gate evidence: `npm run release:check` green end-to-end on the branch (typecheck, lint, duplication, docstring, coverage 100/100/100/100, audit:prod clean, pack:dry-run 50 files, changelog:check up to date, all release verifiers ok) plus `pm health --strict-exit --require-merge-drivers` ok. npm audit --omit=dev: 0 vulnerabilities.\n\nDogfood (packed pm-ops-2026.10.4.tgz installed into a scratch copy of this repo's tracker at /tmp/claude-1000/cert-wt/pm-ops-dogfood):\n- npm: `npx -y @unbrained/pm-cli@2026.10.4 ops status --repos fleet/pm-ops` -> 'status: 1/1 ready, 0 issue(s)'; `ops policy` -> 'passed: 6, failed: 0'; `ops scan` -> 'scan: 1/1 ready'.\n- bun: `bunx --bun @unbrained/pm-cli@2026.10.4 ops status ...` -> 'status: 1/1 ready, 0 issue(s)'; `ops policy` -> 'passed: 6, failed: 0'.\nScratch copy deleted afterwards.\n\npm-github: installed as managed extension pm-github@2026.9.26 (npm:pm-github); read-only preview `pm github sync --repo unbraind/pm-ops --dry-run` -> '[dry-run] Would update 0 issue(s) on unbraind/pm-ops; 1 already in sync/failed.' No issues created/modified, no scheduled sync.\n\nFix driven by jscpd 5.4.0: its one-token scan now sums overlapping clone spans into duplicatedLines (23 > 22 total lines on the TSX fixture), which the fail-closed report validation rejected as impossible counts. parseJscpdReport now validates duplicatedLines against the sum of reported clone spans (and each clone span against total lines) instead of duplicatedLines <= total lines; parity/completeness tests updated, duplication.ts branch coverage back to 100%." "2026-10-04T10:11:39.943Z",pi-cert-a,"pm test --run receipts: linked 'pm health --strict-exit --require-merge-drivers' passes (exit 0, seeded tracker context). Linked 'npm run release:check' cannot run faithfully under the pm test harness on 2026.10.4: every seeding context (schema/auto/tracker) injects the sandbox PM_PATH, redirecting the suite's own 'pm init' throwaway workspaces so test/verify-lifecycle-policy.test.ts fails ENOENT on its drift fixture; --env-clear PM_PATH is reserved; per-test pm_context_mode=none requires an isolated workspace which is empty (npm: Missing script) or a snapshot which loses git-tag context (4 unrelated failures). The direct command — exactly what CI runs — is green (466/466, coverage 100/100/100/100). Filed upstream as unbraind/pm-cli#1391 (follow-up to #1318/#1354). Upstream issues referenced by pm-ops tests: #773 (driver/fence drift reported-not-gated), #921/#922 (merge receipts local-only)." "2026-10-04T10:49:30.441Z",codex-sol,"Restart verification: CI on retained head 2863889 fails the existing per-commit identity audit because earlier dogfood evidence contains an absolute host path. Use the audited history-redaction command, then replace the single certification commit so the forbidden path is not retained in branch history; preserve all source changes and verification evidence. Exact-pin every development dependency and update pm-changelog to published 2026.10.4. Full npm audit remains blocked by unpatched braces 3.0.3 required by real jscpd4 parity tests; never remove those tests to conceal it." "2026-10-04T11:01:37.038Z",codex-sol,"Restart gate and dogfood complete: direct locked npm run release:check exits 0, 466 tests/464 pass/0 fail/2 existing opt-in real-repo skips; c8 100% statements, branches, functions and lines across 23 sources. npx pm health --strict-exit --require-merge-drivers passes. npm audit --omit=dev has zero vulnerabilities; full npm audit reports 5 high findings in the single unpatched braces chain, tracked by ops-braces-audit. Exact-pinned every development dependency, pm-changelog upgraded to 2026.10.4, pm-github managed install refreshed to 2026.10.4. Packed real-tracker acceptance: npm pack --silent; install the tarball with @unbrained/pm-cli@2026.10.4 into pm-ops-dogfood; npx -y @unbrained/pm-cli@2026.10.4 package install --project reports complete:true; run ops status/policy/scan --repos through both npx and bunx --bun -y @unbrained/pm-cli@2026.10.4. Each runtime reports status/scan 1/1 ready and policy 6 passed/0 failed. Scratch copy removed. Read-only pm github sync --repo unbraind/pm-ops --dry-run: wouldSync 0, skipped 1, planned 1. The inspection commands report package structural readiness; the independent full-audit gate remains blocked. CI identity audit is repaired with audited redaction and replacement of the original certification commit, not a relaxed baseline." -files[8]{path,scope,note}: + "2026-10-04T11:26:15.736Z",codex-sol,"CodeRabbit inline 4177272228 is valid: the directory-wide search ignore prevents the existing eval-queries.json exception from taking effect. Prove the intended ignore behavior fails first with git check-ignore --quiet --no-index, then ignore directory contents instead of the directory. Verify eval-queries is eligible for tracking while search runtime files stay ignored; do not add generated runtime data." + "2026-10-04T11:26:25.729Z",codex-sol,"CodeRabbit 4177272228 fixed: changed .agents/pm/search/ to .agents/pm/search/* so the existing eval-queries exception works. git check-ignore negative/positive control proves eligible eval-queries (exit 1) and ignored runtime files (exit 0); no runtime data staged. Linked identity suite passes 4/4. Source release gate remains the passing 464/466 receipt (two pre-existing opt-in skips); final CI will verify this ignore/PM-only follow-up." +files[9]{path,scope,note}: .agents/pm/extensions/.managed-extensions.json,project,Certification change .agents/pm/issues/ops-braces-audit.toon,project,Full audit blocker .github/workflows/codeql.yml,project,Certification change + .gitignore,project,CodeRabbit 4177272228 evaluation-file exemption duplication.ts,project,Certification change package-lock.json,project,Certification change package.json,project,Certification change test/compatibility-floor.test.ts,project,Certification change test/lint-and-duplication-gates.test.ts,project,Certification change -tests[2]: +tests[3]: - command: ./node_modules/.bin/pm health --strict-exit --require-merge-drivers scope: project pm_context_mode: tracker @@ -42,4 +45,11 @@ tests[2]: created_at: "2026-10-04T10:11:10.972Z" source_kind: local_mutation source_ref: chore/pm-ops-pm-cli-2026-10-4 + - command: node --test test/identity-audit.test.ts + scope: project + provenance: + author: codex-sol + created_at: "2026-10-04T11:26:18.142Z" + source_kind: local_mutation + source_ref: chore/pm-ops-pm-cli-2026-10-4 body: "" diff --git a/.agents/pm/history/ops-hiee.jsonl b/.agents/pm/history/ops-hiee.jsonl index 22055df8..9ccc8bea 100644 --- a/.agents/pm/history/ops-hiee.jsonl +++ b/.agents/pm/history/ops-hiee.jsonl @@ -32,3 +32,7 @@ {"hash_algorithm":"sha256","ts":"2026-10-04T10:51:19.409Z","author":"codex-sol","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"5855d685e2129b043d4555ed","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"files_add","patch":[{"op":"replace","path":"/metadata/files/6/path","value":"test/compatibility-floor.test.ts"},{"op":"replace","path":"/metadata/files/5/path","value":"package.json"},{"op":"replace","path":"/metadata/files/4/path","value":"package-lock.json"},{"op":"replace","path":"/metadata/files/3/path","value":"duplication.ts"},{"op":"replace","path":"/metadata/files/2/path","value":".github/workflows/codeql.yml"},{"op":"replace","path":"/metadata/files/1/note","value":"Full audit blocker"},{"op":"replace","path":"/metadata/files/1/path","value":".agents/pm/issues/ops-braces-audit.toon"},{"op":"add","path":"/metadata/files/7","value":{"path":"test/lint-and-duplication-gates.test.ts","scope":"project","note":"Certification change"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T10:51:19.409Z"}],"before_hash":"0bcdbd1a3092525ce16a8bb1efbe2ba01c0d0118f113cbc931b938d8a9bf4bbf","after_hash":"91999e07e7d0a0c99717f7dd5740de68c032d794c76404ab29c0f305bdf68f9f","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"effort":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"6dfdfeb11557723404f09f02635889b63f0819a0bc90986863700480f5500d43"} {"hash_algorithm":"sha256","ts":"2026-10-04T11:01:37.038Z","author":"codex-sol","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"5855d685e2129b043d4555ed","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/4","value":{"created_at":"2026-10-04T11:01:37.038Z","author":"codex-sol","text":"Restart gate and dogfood complete: direct locked npm run release:check exits 0, 466 tests/464 pass/0 fail/2 existing opt-in real-repo skips; c8 100% statements, branches, functions and lines across 23 sources. npx pm health --strict-exit --require-merge-drivers passes. npm audit --omit=dev has zero vulnerabilities; full npm audit reports 5 high findings in the single unpatched braces chain, tracked by ops-braces-audit. Exact-pinned every development dependency, pm-changelog upgraded to 2026.10.4, pm-github managed install refreshed to 2026.10.4. Packed real-tracker acceptance: npm pack --silent; install the tarball with @unbrained/pm-cli@2026.10.4 into pm-ops-dogfood; npx -y @unbrained/pm-cli@2026.10.4 package install --project reports complete:true; run ops status/policy/scan --repos through both npx and bunx --bun -y @unbrained/pm-cli@2026.10.4. Each runtime reports status/scan 1/1 ready and policy 6 passed/0 failed. Scratch copy removed. Read-only pm github sync --repo unbraind/pm-ops --dry-run: wouldSync 0, skipped 1, planned 1. The inspection commands report package structural readiness; the independent full-audit gate remains blocked. CI identity audit is repaired with audited redaction and replacement of the original certification commit, not a relaxed baseline."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T11:01:37.038Z"}],"before_hash":"91999e07e7d0a0c99717f7dd5740de68c032d794c76404ab29c0f305bdf68f9f","after_hash":"8dd02a746214b2b854118f35fb0a8151121c9d0566eb13650e872a3124ebf802","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"effort":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"6642178555f9fe696074b1270d7858eded186b9cad74197ed758632a480c1fe0"} {"hash_algorithm":"sha256","ts":"2026-10-04T11:01:37.629Z","author":"codex-sol","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"5855d685e2129b043d4555ed","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"update","patch":[{"op":"replace","path":"/metadata/actual_result","value":"Certification candidate: PM CLI and pm-changelog exact 2026.10.4, all devDependencies exact, Dependabot #126/#127/#137/#138/#139 consolidated and brace-expansion alert #3 patched to 5.0.12. Direct release:check PASS (464/466, 2 existing opt-in skips, c8 100/100/100/100 over 23 sources); strict health PASS; packed npm/native Bun status/policy/scan PASS on real tracker copy; pm-github 2026.10.4 dry-run wouldSync=0/skipped=1/planned=1. NOT READY: full npm audit has 5 high unpatched braces-chain findings (ops-braces-audit), and final-head bot reviews are pending. pm test sandbox limitation is upstream pm-cli#1391."},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T11:01:37.629Z"}],"before_hash":"8dd02a746214b2b854118f35fb0a8151121c9d0566eb13650e872a3124ebf802","after_hash":"ed1cc94ca6de14519b1ff0744a47a888189d689b4dc6ea00875f584e6c51914a","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"effort":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"13862c8a738d05bdb3c656052cd79a8d25327556228c8f37c799cca1a21bcc7b"} +{"hash_algorithm":"sha256","ts":"2026-10-04T11:26:15.736Z","author":"codex-sol","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"5855d685e2129b043d4555ed","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/5","value":{"created_at":"2026-10-04T11:26:15.736Z","author":"codex-sol","text":"CodeRabbit inline 4177272228 is valid: the directory-wide search ignore prevents the existing eval-queries.json exception from taking effect. Prove the intended ignore behavior fails first with git check-ignore --quiet --no-index, then ignore directory contents instead of the directory. Verify eval-queries is eligible for tracking while search runtime files stay ignored; do not add generated runtime data."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T11:26:15.736Z"}],"before_hash":"ed1cc94ca6de14519b1ff0744a47a888189d689b4dc6ea00875f584e6c51914a","after_hash":"225023d5404fe7febdcaebec3c610d1724b7098b6122bbbecf0ff10335d86874","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"effort":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"351585218663854a68935556bc0cc3eae5db3dd84247309f00fbc52cab8d4bdc"} +{"hash_algorithm":"sha256","ts":"2026-10-04T11:26:17.051Z","author":"codex-sol","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"5855d685e2129b043d4555ed","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"files_add","patch":[{"op":"replace","path":"/metadata/files/7/path","value":"test/compatibility-floor.test.ts"},{"op":"replace","path":"/metadata/files/6/path","value":"package.json"},{"op":"replace","path":"/metadata/files/5/path","value":"package-lock.json"},{"op":"replace","path":"/metadata/files/4/path","value":"duplication.ts"},{"op":"replace","path":"/metadata/files/3/note","value":"CodeRabbit 4177272228 evaluation-file exemption"},{"op":"replace","path":"/metadata/files/3/path","value":".gitignore"},{"op":"add","path":"/metadata/files/8","value":{"path":"test/lint-and-duplication-gates.test.ts","scope":"project","note":"Certification change"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T11:26:17.051Z"}],"before_hash":"225023d5404fe7febdcaebec3c610d1724b7098b6122bbbecf0ff10335d86874","after_hash":"9a61b11946e47776c2277b661cba7d8607ad8fbb2758715161aa4cd96fe3ac6e","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"effort":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"b9557de907a4bdeceb76eb8cb2570733123a1fdb12ec14f8646d6cdda7db4cd5"} +{"hash_algorithm":"sha256","ts":"2026-10-04T11:26:18.215Z","author":"codex-sol","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"5855d685e2129b043d4555ed","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"tests_add","patch":[{"op":"add","path":"/metadata/tests/2","value":{"command":"node --test test/identity-audit.test.ts","scope":"project","provenance":{"author":"codex-sol","created_at":"2026-10-04T11:26:18.142Z","source_kind":"local_mutation","source_ref":"chore/pm-ops-pm-cli-2026-10-4"}}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T11:26:18.215Z"}],"before_hash":"9a61b11946e47776c2277b661cba7d8607ad8fbb2758715161aa4cd96fe3ac6e","after_hash":"638b05cc311da5160f019ce4a4c36788189bb3371503f8fdfb9eaee099f387f9","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"effort":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"272232143adf15eb2be1b344c42bf71c0820bc546e18be6b34cb74d5aae95327"} +{"hash_algorithm":"sha256","ts":"2026-10-04T11:26:25.729Z","author":"codex-sol","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"5855d685e2129b043d4555ed","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/6","value":{"created_at":"2026-10-04T11:26:25.729Z","author":"codex-sol","text":"CodeRabbit 4177272228 fixed: changed .agents/pm/search/ to .agents/pm/search/* so the existing eval-queries exception works. git check-ignore negative/positive control proves eligible eval-queries (exit 1) and ignored runtime files (exit 0); no runtime data staged. Linked identity suite passes 4/4. Source release gate remains the passing 464/466 receipt (two pre-existing opt-in skips); final CI will verify this ignore/PM-only follow-up."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T11:26:25.729Z"}],"before_hash":"638b05cc311da5160f019ce4a4c36788189bb3371503f8fdfb9eaee099f387f9","after_hash":"a655b65f242229b979f6a11037320bf7e46556d6c842f23604b9150cb67ecc9d","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"effort":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"c567820f66d4becbf785ce3c0cc40fae9c31d8b56fb215c3aede5d02891ba657"} diff --git a/.gitignore b/.gitignore index 762203c7..d7c8ec12 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,7 @@ dist-test/ .agents/pm/extensions/ .agents/pm/locks/ .agents/pm/runtime/ -.agents/pm/search/ +.agents/pm/search/* # Local environment .env From 30cad1afffb90e72414d4366010da1c526f9ed11 Mon Sep 17 00:00:00 2001 From: SteveBot <1153461+unbraind@users.noreply.github.com> Date: Sun, 4 Oct 2026 13:35:47 +0200 Subject: [PATCH 3/3] Record review handoff and release certification ownership --- .agents/pm/chores/ops-hiee.toon | 9 ++++----- .agents/pm/history/ops-hiee.jsonl | 3 +++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.agents/pm/chores/ops-hiee.toon b/.agents/pm/chores/ops-hiee.toon index 136a4a0c..372ffdf5 100644 --- a/.agents/pm/chores/ops-hiee.toon +++ b/.agents/pm/chores/ops-hiee.toon @@ -6,12 +6,10 @@ status: in_progress priority: 1 tags[2]: cert,deps created_at: "2026-10-04T08:59:29.371Z" -updated_at: "2026-10-04T11:26:25.729Z" -assignee: codex-sol -claim_principal: codex-sol +updated_at: "2026-10-04T11:35:29.697Z" author: pi-cert-a -actual_result: "Certification candidate: PM CLI and pm-changelog exact 2026.10.4, all devDependencies exact, Dependabot #126/#127/#137/#138/#139 consolidated and brace-expansion alert #3 patched to 5.0.12. Direct release:check PASS (464/466, 2 existing opt-in skips, c8 100/100/100/100 over 23 sources); strict health PASS; packed npm/native Bun status/policy/scan PASS on real tracker copy; pm-github 2026.10.4 dry-run wouldSync=0/skipped=1/planned=1. NOT READY: full npm audit has 5 high unpatched braces-chain findings (ops-braces-audit), and final-head bot reviews are pending. pm test sandbox limitation is upstream pm-cli#1391." -comments[7]{created_at,author,text}: +actual_result: "Certification candidate: PM CLI and pm-changelog exact 2026.10.4, all devDependencies exact, Dependabot #126/#127/#137/#138/#139 consolidated and brace-expansion alert #3 patched to 5.0.12. Direct release:check PASS (464/466, 2 existing opt-in skips, c8 100/100/100/100 over 23 sources); strict health PASS; packed npm/native Bun status/policy/scan PASS on real tracker copy; pm-github 2026.10.4 dry-run wouldSync=0/skipped=1/planned=1. NOT READY: full npm audit has 5 high unpatched braces-chain findings (ops-braces-audit), and final-head bot reviews are pending. pm test sandbox limitation is upstream pm-cli#1391. Handoff: source-head CI green at ede9c25bc5f7, zero unresolved threads. NOT READY: Sourcery weekly quota; Cubic monthly quota/skip; Gemini and Copilot have no response after the requested review round. CodeRabbit re-review is rate limited; full npm audit has five high findings from unpatched braces (ops-braces-audit). Claim released; item remains open for orchestrator." +comments[8]{created_at,author,text}: "2026-10-04T08:59:35.779Z",pi-cert-a,"Starting certification on PM CLI 2026.10.4. Pinning @unbrained/pm-cli to 2026.10.4 (supersedes Dependabot #138 which proposed 2026.10.1), @babel/eslint-parser ^8.0.6 (#126), jscpd ^5.4.0 (#139), @types/node lockfile 26.6.4 (newer than #137's 26.6.3), and codeql-action SHAs 2892aa5e (#127). Security alert #3 (brace-expansion) fixed via npm audit fix -> 5.0.12; npm audit --omit=dev clean. Note: the braces GHSA-vfj7-8cjw-p6xm advisory flags ALL published braces versions (vulnerable <=3.0.3, no patched release); its only path into the tree is the jscpd4 dev alias kept for duplication-gate v4-engine parity tests (peer floor jscpd >=4.3.0 <6.0.0), so it is refused rather than weakening the gate." "2026-10-04T09:13:25.591Z",pi-cert-a,"Gate evidence: `npm run release:check` green end-to-end on the branch (typecheck, lint, duplication, docstring, coverage 100/100/100/100, audit:prod clean, pack:dry-run 50 files, changelog:check up to date, all release verifiers ok) plus `pm health --strict-exit --require-merge-drivers` ok. npm audit --omit=dev: 0 vulnerabilities.\n\nDogfood (packed pm-ops-2026.10.4.tgz installed into a scratch copy of this repo's tracker at /tmp/claude-1000/cert-wt/pm-ops-dogfood):\n- npm: `npx -y @unbrained/pm-cli@2026.10.4 ops status --repos fleet/pm-ops` -> 'status: 1/1 ready, 0 issue(s)'; `ops policy` -> 'passed: 6, failed: 0'; `ops scan` -> 'scan: 1/1 ready'.\n- bun: `bunx --bun @unbrained/pm-cli@2026.10.4 ops status ...` -> 'status: 1/1 ready, 0 issue(s)'; `ops policy` -> 'passed: 6, failed: 0'.\nScratch copy deleted afterwards.\n\npm-github: installed as managed extension pm-github@2026.9.26 (npm:pm-github); read-only preview `pm github sync --repo unbraind/pm-ops --dry-run` -> '[dry-run] Would update 0 issue(s) on unbraind/pm-ops; 1 already in sync/failed.' No issues created/modified, no scheduled sync.\n\nFix driven by jscpd 5.4.0: its one-token scan now sums overlapping clone spans into duplicatedLines (23 > 22 total lines on the TSX fixture), which the fail-closed report validation rejected as impossible counts. parseJscpdReport now validates duplicatedLines against the sum of reported clone spans (and each clone span against total lines) instead of duplicatedLines <= total lines; parity/completeness tests updated, duplication.ts branch coverage back to 100%." "2026-10-04T10:11:39.943Z",pi-cert-a,"pm test --run receipts: linked 'pm health --strict-exit --require-merge-drivers' passes (exit 0, seeded tracker context). Linked 'npm run release:check' cannot run faithfully under the pm test harness on 2026.10.4: every seeding context (schema/auto/tracker) injects the sandbox PM_PATH, redirecting the suite's own 'pm init' throwaway workspaces so test/verify-lifecycle-policy.test.ts fails ENOENT on its drift fixture; --env-clear PM_PATH is reserved; per-test pm_context_mode=none requires an isolated workspace which is empty (npm: Missing script) or a snapshot which loses git-tag context (4 unrelated failures). The direct command — exactly what CI runs — is green (466/466, coverage 100/100/100/100). Filed upstream as unbraind/pm-cli#1391 (follow-up to #1318/#1354). Upstream issues referenced by pm-ops tests: #773 (driver/fence drift reported-not-gated), #921/#922 (merge receipts local-only)." @@ -19,6 +17,7 @@ comments[7]{created_at,author,text}: "2026-10-04T11:01:37.038Z",codex-sol,"Restart gate and dogfood complete: direct locked npm run release:check exits 0, 466 tests/464 pass/0 fail/2 existing opt-in real-repo skips; c8 100% statements, branches, functions and lines across 23 sources. npx pm health --strict-exit --require-merge-drivers passes. npm audit --omit=dev has zero vulnerabilities; full npm audit reports 5 high findings in the single unpatched braces chain, tracked by ops-braces-audit. Exact-pinned every development dependency, pm-changelog upgraded to 2026.10.4, pm-github managed install refreshed to 2026.10.4. Packed real-tracker acceptance: npm pack --silent; install the tarball with @unbrained/pm-cli@2026.10.4 into pm-ops-dogfood; npx -y @unbrained/pm-cli@2026.10.4 package install --project reports complete:true; run ops status/policy/scan --repos through both npx and bunx --bun -y @unbrained/pm-cli@2026.10.4. Each runtime reports status/scan 1/1 ready and policy 6 passed/0 failed. Scratch copy removed. Read-only pm github sync --repo unbraind/pm-ops --dry-run: wouldSync 0, skipped 1, planned 1. The inspection commands report package structural readiness; the independent full-audit gate remains blocked. CI identity audit is repaired with audited redaction and replacement of the original certification commit, not a relaxed baseline." "2026-10-04T11:26:15.736Z",codex-sol,"CodeRabbit inline 4177272228 is valid: the directory-wide search ignore prevents the existing eval-queries.json exception from taking effect. Prove the intended ignore behavior fails first with git check-ignore --quiet --no-index, then ignore directory contents instead of the directory. Verify eval-queries is eligible for tracking while search runtime files stay ignored; do not add generated runtime data." "2026-10-04T11:26:25.729Z",codex-sol,"CodeRabbit 4177272228 fixed: changed .agents/pm/search/ to .agents/pm/search/* so the existing eval-queries exception works. git check-ignore negative/positive control proves eligible eval-queries (exit 1) and ignored runtime files (exit 0); no runtime data staged. Linked identity suite passes 4/4. Source release gate remains the passing 464/466 receipt (two pre-existing opt-in skips); final CI will verify this ignore/PM-only follow-up." + "2026-10-04T11:35:27.109Z",codex-sol,"Orchestrator handoff for PR #142: source head ede9c25bc5f7d0d861a8e95596ce0f1f58888dba has green Node 22/26 and CodeQL CI; local release/health/audit/dogfood receipts are recorded above. CodeRabbit 4177272228 fixed in ede9c25 and confirmed in-thread; identity/path audit repaired in 02d00dc. Zero unresolved review threads. Required review quorum is unavailable: Sourcery weekly quota; Cubic monthly quota/skip; Gemini and Copilot have no response after the requested review round. CodeRabbit re-review is rate limited; full npm audit has five high findings from unpatched braces (ops-braces-audit). All bot comments/reviews/inline findings inspected; useful findings/summaries reacted positively, skip/quota notices negatively, concrete replies posted, addressed threads resolved. Initial review requests sent once per repo; pm-ops received one second-round request after its valid fix. No merge, close, auto-merge, publication or release. Release the claim for orchestrator verification; the certification item remains in progress. Final metadata head will be checked separately before removing the worktree." files[9]{path,scope,note}: .agents/pm/extensions/.managed-extensions.json,project,Certification change .agents/pm/issues/ops-braces-audit.toon,project,Full audit blocker diff --git a/.agents/pm/history/ops-hiee.jsonl b/.agents/pm/history/ops-hiee.jsonl index 9ccc8bea..d76343bd 100644 --- a/.agents/pm/history/ops-hiee.jsonl +++ b/.agents/pm/history/ops-hiee.jsonl @@ -36,3 +36,6 @@ {"hash_algorithm":"sha256","ts":"2026-10-04T11:26:17.051Z","author":"codex-sol","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"5855d685e2129b043d4555ed","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"files_add","patch":[{"op":"replace","path":"/metadata/files/7/path","value":"test/compatibility-floor.test.ts"},{"op":"replace","path":"/metadata/files/6/path","value":"package.json"},{"op":"replace","path":"/metadata/files/5/path","value":"package-lock.json"},{"op":"replace","path":"/metadata/files/4/path","value":"duplication.ts"},{"op":"replace","path":"/metadata/files/3/note","value":"CodeRabbit 4177272228 evaluation-file exemption"},{"op":"replace","path":"/metadata/files/3/path","value":".gitignore"},{"op":"add","path":"/metadata/files/8","value":{"path":"test/lint-and-duplication-gates.test.ts","scope":"project","note":"Certification change"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T11:26:17.051Z"}],"before_hash":"225023d5404fe7febdcaebec3c610d1724b7098b6122bbbecf0ff10335d86874","after_hash":"9a61b11946e47776c2277b661cba7d8607ad8fbb2758715161aa4cd96fe3ac6e","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"effort":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"b9557de907a4bdeceb76eb8cb2570733123a1fdb12ec14f8646d6cdda7db4cd5"} {"hash_algorithm":"sha256","ts":"2026-10-04T11:26:18.215Z","author":"codex-sol","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"5855d685e2129b043d4555ed","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"tests_add","patch":[{"op":"add","path":"/metadata/tests/2","value":{"command":"node --test test/identity-audit.test.ts","scope":"project","provenance":{"author":"codex-sol","created_at":"2026-10-04T11:26:18.142Z","source_kind":"local_mutation","source_ref":"chore/pm-ops-pm-cli-2026-10-4"}}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T11:26:18.215Z"}],"before_hash":"9a61b11946e47776c2277b661cba7d8607ad8fbb2758715161aa4cd96fe3ac6e","after_hash":"638b05cc311da5160f019ce4a4c36788189bb3371503f8fdfb9eaee099f387f9","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"effort":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"272232143adf15eb2be1b344c42bf71c0820bc546e18be6b34cb74d5aae95327"} {"hash_algorithm":"sha256","ts":"2026-10-04T11:26:25.729Z","author":"codex-sol","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"5855d685e2129b043d4555ed","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/6","value":{"created_at":"2026-10-04T11:26:25.729Z","author":"codex-sol","text":"CodeRabbit 4177272228 fixed: changed .agents/pm/search/ to .agents/pm/search/* so the existing eval-queries exception works. git check-ignore negative/positive control proves eligible eval-queries (exit 1) and ignored runtime files (exit 0); no runtime data staged. Linked identity suite passes 4/4. Source release gate remains the passing 464/466 receipt (two pre-existing opt-in skips); final CI will verify this ignore/PM-only follow-up."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T11:26:25.729Z"}],"before_hash":"638b05cc311da5160f019ce4a4c36788189bb3371503f8fdfb9eaee099f387f9","after_hash":"a655b65f242229b979f6a11037320bf7e46556d6c842f23604b9150cb67ecc9d","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"effort":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"c567820f66d4becbf785ce3c0cc40fae9c31d8b56fb215c3aede5d02891ba657"} +{"hash_algorithm":"sha256","ts":"2026-10-04T11:35:27.109Z","author":"codex-sol","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"5855d685e2129b043d4555ed","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/7","value":{"created_at":"2026-10-04T11:35:27.109Z","author":"codex-sol","text":"Orchestrator handoff for PR #142: source head ede9c25bc5f7d0d861a8e95596ce0f1f58888dba has green Node 22/26 and CodeQL CI; local release/health/audit/dogfood receipts are recorded above. CodeRabbit 4177272228 fixed in ede9c25 and confirmed in-thread; identity/path audit repaired in 02d00dc. Zero unresolved review threads. Required review quorum is unavailable: Sourcery weekly quota; Cubic monthly quota/skip; Gemini and Copilot have no response after the requested review round. CodeRabbit re-review is rate limited; full npm audit has five high findings from unpatched braces (ops-braces-audit). All bot comments/reviews/inline findings inspected; useful findings/summaries reacted positively, skip/quota notices negatively, concrete replies posted, addressed threads resolved. Initial review requests sent once per repo; pm-ops received one second-round request after its valid fix. No merge, close, auto-merge, publication or release. Release the claim for orchestrator verification; the certification item remains in progress. Final metadata head will be checked separately before removing the worktree."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T11:35:27.109Z"}],"before_hash":"a655b65f242229b979f6a11037320bf7e46556d6c842f23604b9150cb67ecc9d","after_hash":"01a4c86a67af97fadef34941c0f8d7100f786d334cfe1028554507b1e696eb97","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"effort":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"e0c9771c4fa001def2620f19e52c850af2eeecec84959873d51aadbec2ae5c28"} +{"hash_algorithm":"sha256","ts":"2026-10-04T11:35:28.404Z","author":"codex-sol","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"5855d685e2129b043d4555ed","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"update","patch":[{"op":"replace","path":"/metadata/actual_result","value":"Certification candidate: PM CLI and pm-changelog exact 2026.10.4, all devDependencies exact, Dependabot #126/#127/#137/#138/#139 consolidated and brace-expansion alert #3 patched to 5.0.12. Direct release:check PASS (464/466, 2 existing opt-in skips, c8 100/100/100/100 over 23 sources); strict health PASS; packed npm/native Bun status/policy/scan PASS on real tracker copy; pm-github 2026.10.4 dry-run wouldSync=0/skipped=1/planned=1. NOT READY: full npm audit has 5 high unpatched braces-chain findings (ops-braces-audit), and final-head bot reviews are pending. pm test sandbox limitation is upstream pm-cli#1391. Handoff: source-head CI green at ede9c25bc5f7, zero unresolved threads. NOT READY: Sourcery weekly quota; Cubic monthly quota/skip; Gemini and Copilot have no response after the requested review round. CodeRabbit re-review is rate limited; full npm audit has five high findings from unpatched braces (ops-braces-audit). Claim released; item remains open for orchestrator."},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T11:35:28.404Z"}],"before_hash":"01a4c86a67af97fadef34941c0f8d7100f786d334cfe1028554507b1e696eb97","after_hash":"89083b662f2e098a5dc7c112ed8d389d6be3a69d3c90ed63aec3127c3c1ff1b2","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"effort":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"8b985d213a7c6a02aabccda0c8b2cf11aa878bd82bf1ecb965e59e8135d7252a"} +{"hash_algorithm":"sha256","ts":"2026-10-04T11:35:29.697Z","author":"codex-sol","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"5855d685e2129b043d4555ed","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"release","patch":[{"op":"remove","path":"/metadata/claim_principal"},{"op":"remove","path":"/metadata/assignee"},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-04T11:35:29.697Z"}],"before_hash":"89083b662f2e098a5dc7c112ed8d389d6be3a69d3c90ed63aec3127c3c1ff1b2","after_hash":"e18553588919a7b626edaa0fcac3bb46c437081e4bc475491ffdbad9015ee034","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"effort":{"status":"resolved","resolver":"codex_session_file","rule_version":"v1"},"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"6e2311e71a77efe304f73806f3380daf9210fc6ee5dc04dfe4963a3db735ce57"}