diff --git a/.agents/pm/extensions/.managed-extensions.json b/.agents/pm/extensions/.managed-extensions.json index b702e5cd..8fe07380 100644 --- a/.agents/pm/extensions/.managed-extensions.json +++ b/.agents/pm/extensions/.managed-extensions.json @@ -1,12 +1,12 @@ { "version": 1, - "updated_at": "2026-08-28T20:03:27.382Z", + "updated_at": "2026-09-27T07:41:16.478Z", "entries": [ { "name": "pm-github", "directory": "pm-github", "scope": "project", - "manifest_version": "2026.8.18", + "manifest_version": "2026.9.26", "manifest_entry": "./dist/index.js", "capabilities": [ "commands", @@ -94,13 +94,13 @@ ] }, "installed_at": "2026-08-28T20:03:27.138Z", - "updated_at": "2026-08-28T20:03:27.138Z", + "updated_at": "2026-09-27T07:15:44.450Z", "source": { "kind": "npm", - "input": "npm:pm-github", + "input": "npm:pm-github@2026.9.26", "location": "package", "package": "pm-github", - "version": "2026.8.18" + "version": "2026.9.26" } } ] diff --git a/.agents/pm/history/pm-graph-ipvn.jsonl b/.agents/pm/history/pm-graph-ipvn.jsonl new file mode 100644 index 00000000..0e667716 --- /dev/null +++ b/.agents/pm/history/pm-graph-ipvn.jsonl @@ -0,0 +1,47 @@ +{"hash_algorithm":"sha256","ts":"2026-09-27T07:07:21.121Z","author":"codex","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6-sol","agent_model_source":"probe","agent_instance":"fb64a4867f43e1382591a8cb","agent_provenance":{"model":{"value":"gpt-6-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"create","patch":[{"op":"add","path":"/metadata/id","value":"pm-graph-ipvn"},{"op":"add","path":"/metadata/title","value":"Refresh managed pm-github extension for PM CLI 2026.9.26"},{"op":"add","path":"/metadata/description","value":"The project tracker runs host PM CLI 2026.9.26 with a managed pm-github 2026.8.18 copy; strict health reports extension_host_pm_cli_version_skew. Upgrade only the managed project extension from npm after confirming its published version and preserve the disabled scheduled sync workflow."},{"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":[]},{"op":"add","path":"/metadata/created_at","value":"2026-09-27T07:07:21.121Z"},{"op":"add","path":"/metadata/updated_at","value":"2026-09-27T07:07:21.121Z"},{"op":"add","path":"/metadata/author","value":"codex"},{"op":"add","path":"/metadata/acceptance_criteria","value":"Install published pm-github 2026.9.26 in project scope; verify installed manifest and managed metadata, package activation, strict health, release gate and privacy diff; leave scheduled GitHub sync disabled until its pre-push privacy gate exists."},{"op":"add","path":"/metadata/severity","value":"medium"},{"op":"add","path":"/metadata/environment","value":"pm-graph canonical checkout with host pm CLI 2026.9.26"},{"op":"add","path":"/metadata/repro_steps","value":"Run pm health --strict-exit --json in fleet/pm-graph; inspect extension_host_pm_cli_version_skew and .agents/pm/extensions/pm-github/package.json."},{"op":"add","path":"/metadata/expected_result","value":"Managed pm-github resolves against host PM CLI 2026.9.26; strict tracker health exits zero."},{"op":"add","path":"/metadata/actual_result","value":"Managed pm-github copy is 2026.8.18; strict health exits one."},{"op":"add","path":"/metadata/tests","value":[{"command":"pm health --strict-exit --json","scope":"project","provenance":{"author":"codex","created_at":"2026-09-27T07:07:21.121Z","source_kind":"local_mutation","source_ref":"fix/pm-graph-github-extension-cli-compat-2026-09-27"}}]},{"op":"add","path":"/metadata/docs","value":[{"path":"https://github.com/unbraind/pm-cli-companion/blob/main/.agents/pm/features/pm-cli-website-377e.toon","scope":"global","note":"Fleet GitHub sync rollout"}]}],"before_hash":"3cc22dff72be7b14824654a7a64ea62b04799939b2fee54c1b5f52ca60bf6df0","after_hash":"36190986e757e76717346557c112e2e5d81a36ff279726954e2233583927127c","item_hash_version":3,"message":"Record strict-health regression before changing managed extension","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":"d82abcb2f01a4e91115534222bf209786c18dbdb58aee38538b3fd920846fbfc"} +{"hash_algorithm":"sha256","ts":"2026-09-27T07:07:25.399Z","author":"codex","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6-sol","agent_model_source":"probe","agent_instance":"fb64a4867f43e1382591a8cb","agent_provenance":{"model":{"value":"gpt-6-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"claim","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-27T07:07:25.399Z"},{"op":"add","path":"/metadata/assignee","value":"codex"},{"op":"add","path":"/metadata/claim_principal","value":"codex"}],"before_hash":"36190986e757e76717346557c112e2e5d81a36ff279726954e2233583927127c","after_hash":"f33c172d0e9c3f71b8dfe09cf61289309c28fde4ffb9a55edfc7746334d651c8","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":"c5b6ccd7de38ee5d559da76421cee213507e50f66a179493cd297b9b9d7dce04"} +{"hash_algorithm":"sha256","ts":"2026-09-27T07:07:26.540Z","author":"codex","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6-sol","agent_model_source":"probe","agent_instance":"fb64a4867f43e1382591a8cb","agent_provenance":{"model":{"value":"gpt-6-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"update","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-27T07:07:26.540Z"},{"op":"replace","path":"/metadata/status","value":"in_progress"}],"before_hash":"f33c172d0e9c3f71b8dfe09cf61289309c28fde4ffb9a55edfc7746334d651c8","after_hash":"f1b82891a93ba0b13b8e0fbebbf92eb6aaa7149f075611ebe79180be0211b737","item_hash_version":3,"message":"Begin project-scoped managed extension compatibility fix","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":"fd1a940550866c79e75c211d5f2b91c5b1ba019aaf2150b2685eca9df864df97"} +{"hash_algorithm":"sha256","ts":"2026-09-27T07:15:27.065Z","author":"codex","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6-sol","agent_model_source":"probe","agent_instance":"fb64a4867f43e1382591a8cb","agent_provenance":{"model":{"value":"gpt-6-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"files_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-27T07:15:27.065Z"},{"op":"add","path":"/metadata/files","value":[{"path":"scripts/prepare-merge-driver.ts","scope":"project","note":"Published pm-ops 2026.9.26 canonical launcher copy"}]}],"before_hash":"f1b82891a93ba0b13b8e0fbebbf92eb6aaa7149f075611ebe79180be0211b737","after_hash":"ec2d3c0725c44bc11e8f6b85e0d6a18ebedf11a0a553d03db22b0ed8d4c5e333","item_hash_version":3,"message":"Link canonical launcher required by exact-version contract","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":"87144a27dd40088cb570451d12ea2eca4d06df59388476324d71a96213afbb2e"} +{"hash_algorithm":"sha256","ts":"2026-09-27T07:15:27.801Z","author":"codex","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6-sol","agent_model_source":"probe","agent_instance":"fb64a4867f43e1382591a8cb","agent_provenance":{"model":{"value":"gpt-6-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"note_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-27T07:15:27.801Z"},{"op":"add","path":"/metadata/notes","value":[{"created_at":"2026-09-27T07:15:27.801Z","author":"codex","text":"First full release:check ran 292 tests and failed exactly one assertion: the prepare launcher was not the unmodified published pm-ops template. Copied the installed pm-ops 2026.9.26 template byte for byte; will rerun the full gate. This is the published local broken-install guard, not the unmerged hoisted guard from pm-ops #124."}]}],"before_hash":"ec2d3c0725c44bc11e8f6b85e0d6a18ebedf11a0a553d03db22b0ed8d4c5e333","after_hash":"ea85cabe2645fcea7f2793a6ac8416cf536ccde3eebef76b729a3e27e5cc7d28","item_hash_version":3,"message":"Record red gate and compatibility fix","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":"00bb97784b4587d7b21d9c814d67d39ce5879dadfccb144b5e8394cb916b266e"} +{"hash_algorithm":"sha256","ts":"2026-09-27T07:21:59.571Z","author":"codex","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6-sol","agent_model_source":"probe","agent_instance":"fb64a4867f43e1382591a8cb","agent_provenance":{"model":{"value":"gpt-6-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"note_add","patch":[{"op":"add","path":"/metadata/notes/1","value":{"created_at":"2026-09-27T07:21:59.571Z","author":"codex","text":"The npm registry published @unbrained/pm-cli 2026.9.27 while pm-github latest remains 2026.9.26. A real local CLI 2026.9.27 probe failed strict health with extension_host_pm_cli_version_skew:2026.9.27:2026.9.26:pm-github. Reverted the development CLI pin to the newest compatible published pair (2026.9.26) and retained the verified green release gate. Fleet certification must revisit this after pm-github 2026.9.27 is published; do not call this latest-CLI certification."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-27T07:21:59.571Z"}],"before_hash":"ea85cabe2645fcea7f2793a6ac8416cf536ccde3eebef76b729a3e27e5cc7d28","after_hash":"e2cfd24a0d576eea83a7d0f80a1da757ab1b31502e6ecccfa3a1d2a184b8111f","item_hash_version":3,"message":"Record newest CLI release-order blocker","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":"2770f75258d8646541d476148887d0d138acb0035b9f00993a1019d0c19ad317"} +{"hash_algorithm":"sha256","ts":"2026-09-27T07:22:23.106Z","author":"codex","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6-sol","agent_model_source":"probe","agent_instance":"fb64a4867f43e1382591a8cb","agent_provenance":{"model":{"value":"gpt-6-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"files_add","patch":[{"op":"replace","path":"/metadata/files/0/note","value":"Exact project-scoped pm-github source"},{"op":"replace","path":"/metadata/files/0/path","value":".agents/pm/extensions/.managed-extensions.json"},{"op":"add","path":"/metadata/files/1","value":{"path":"package-lock.json","scope":"project","note":"Resolved dependency lock"}},{"op":"add","path":"/metadata/files/2","value":{"path":"package.json","scope":"project","note":"Compatible exact development tool pins"}},{"op":"add","path":"/metadata/files/3","value":{"path":"scripts/prepare-merge-driver.ts","scope":"project","note":"Published pm-ops 2026.9.26 canonical launcher copy"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-27T07:22:23.106Z"}],"before_hash":"e2cfd24a0d576eea83a7d0f80a1da757ab1b31502e6ecccfa3a1d2a184b8111f","after_hash":"e4353661b305c4e2ee7564ac3113d0222e8503c6614e7707959ebfc9562ec128","item_hash_version":3,"message":"Link upgrade files","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":"ddb1c16e3c9486d2660e7297de70a0aff1078e42662d3f2a229965969d01e382"} +{"hash_algorithm":"sha256","ts":"2026-09-27T07:22:23.698Z","author":"codex","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6-sol","agent_model_source":"probe","agent_instance":"fb64a4867f43e1382591a8cb","agent_provenance":{"model":{"value":"gpt-6-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"tests_add","patch":[{"op":"add","path":"/metadata/tests/1","value":{"command":"npm run release:check","scope":"project","timeout_seconds":600,"provenance":{"author":"codex","created_at":"2026-09-27T07:22:23.666Z","source_kind":"local_mutation","source_ref":"fix/pm-graph-github-extension-cli-compat-2026-09-27"}}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-27T07:22:23.698Z"}],"before_hash":"e4353661b305c4e2ee7564ac3113d0222e8503c6614e7707959ebfc9562ec128","after_hash":"3a361cd2412aa0cbeb88a31ba79d07bca9f2258f5c4de352300dcea03c0d065a","item_hash_version":3,"message":"Link full package release gate","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":"77bb48f31dd16ba2e2f6b0184c3423583367a4a77ecbb293e61f2e60d487b481"} +{"hash_algorithm":"sha256","ts":"2026-09-27T07:22:31.207Z","author":"codex","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6-sol","agent_model_source":"probe","agent_instance":"fb64a4867f43e1382591a8cb","agent_provenance":{"model":{"value":"gpt-6-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"update","patch":[{"op":"replace","path":"/metadata/acceptance_criteria","value":"Install published pm-github 2026.9.26 in project scope; verify installed manifest and managed metadata, package activation, strict health, release gate and privacy diff; leave scheduled GitHub sync disabled until its pre-push privacy gate exists.; The package manifest and lockfile resolve CLI 2026.9.26, pm-ops 2026.9.26, and pm-changelog 2026.9.25 exactly.; The launcher is byte-identical to the published pm-ops template."},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-27T07:22:31.207Z"},{"op":"replace","path":"/metadata/description","value":"The tracker began with a managed pm-github 2026.8.18 copy and package development tools at 2026.9.23. Host CLI 2026.9.26 reported extension version skew. Refresh the project-scoped managed extension and exact compatible CLI, pm-ops, and pm-changelog pins, then copy the published canonical merge-driver launcher. Preserve the disabled scheduled sync workflow. CLI 2026.9.27 requires a later pm-github release before strict extension health can pass."}],"before_hash":"3a361cd2412aa0cbeb88a31ba79d07bca9f2258f5c4de352300dcea03c0d065a","after_hash":"00367e8d65c6ff26d583e4eb037339f73f434446761a3db71683114b2dd5449f","item_hash_version":3,"message":"Clarify complete compatible upgrade scope and 2026.9.27 blocker","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":"2d9c916abf9493f29a884fbd053867bcd30dfc07802f88f6c6bbaca97cd2baae"} +{"hash_algorithm":"sha256","ts":"2026-09-27T07:28:54.856Z","author":"codex","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6-sol","agent_model_source":"probe","agent_instance":"fb64a4867f43e1382591a8cb","agent_provenance":{"model":{"value":"gpt-6-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"update","patch":[{"op":"replace","path":"/metadata/acceptance_criteria","value":"Install published pm-github 2026.9.26 in project scope; verify installed manifest and managed metadata, package activation, strict health, release gate and privacy diff; leave scheduled GitHub sync disabled until its pre-push privacy gate exists.; The package manifest and lockfile resolve CLI 2026.9.26, pm-ops 2026.9.26, and pm-changelog 2026.9.25 exactly.; The launcher is byte-identical to the published pm-ops template.; CI and the disabled sync workflow install the same exact pm-github version recorded in managed metadata.; Real child checkout tests reject an incomplete pm-ops directory and a dangling package link without registering merge drivers."},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-27T07:28:54.856Z"}],"before_hash":"00367e8d65c6ff26d583e4eb037339f73f434446761a3db71683114b2dd5449f","after_hash":"82ab3588ab21e7a101b6b22b54e277a2f98c2bccb6c5681753c233b425adfde4","item_hash_version":3,"message":"Add Greptile regression criteria","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":"bc3a1983305c5029dd265100818333bea9d9e35d47fda0907eea22dc000c2e79"} +{"hash_algorithm":"sha256","ts":"2026-09-27T07:28:55.445Z","author":"codex","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6-sol","agent_model_source":"probe","agent_instance":"fb64a4867f43e1382591a8cb","agent_provenance":{"model":{"value":"gpt-6-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"files_add","patch":[{"op":"replace","path":"/metadata/files/3/note","value":"Resolved dependency lock"},{"op":"replace","path":"/metadata/files/3/path","value":"package-lock.json"},{"op":"replace","path":"/metadata/files/2/note","value":"Exact extension install while workflow remains disabled"},{"op":"replace","path":"/metadata/files/2/path","value":".github/workflows/pm-github-sync.yml"},{"op":"replace","path":"/metadata/files/1/note","value":"Exact extension install in CI"},{"op":"replace","path":"/metadata/files/1/path","value":".github/workflows/ci.yml"},{"op":"add","path":"/metadata/files/4","value":{"path":"package.json","scope":"project","note":"Compatible exact development tool pins"}},{"op":"add","path":"/metadata/files/5","value":{"path":"scripts/prepare-merge-driver.ts","scope":"project","note":"Published pm-ops 2026.9.26 canonical launcher copy"}},{"op":"add","path":"/metadata/files/6","value":{"path":"test/prepare-merge-driver.test.ts","scope":"project","note":"Broken directory and dangling link acceptance"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-27T07:28:55.445Z"}],"before_hash":"82ab3588ab21e7a101b6b22b54e277a2f98c2bccb6c5681753c233b425adfde4","after_hash":"5850aed99a8c4276ec94cf1113e7dc1fa778f32b16f3e42ebdab73d67eb7392b","item_hash_version":3,"message":"Link review remediation files","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":"0deac6aceed231856a46fc0a3c23a56dfb6a6c7fe9ad111d8e81e02cab451e5a"} +{"hash_algorithm":"sha256","ts":"2026-09-27T07:28:56.070Z","author":"codex","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6-sol","agent_model_source":"probe","agent_instance":"fb64a4867f43e1382591a8cb","agent_provenance":{"model":{"value":"gpt-6-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/prepare-merge-driver.test.ts","scope":"project","timeout_seconds":120,"provenance":{"author":"codex","created_at":"2026-09-27T07:28:56.044Z","source_kind":"local_mutation","source_ref":"fix/pm-graph-github-extension-cli-compat-2026-09-27"}}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-27T07:28:56.070Z"}],"before_hash":"5850aed99a8c4276ec94cf1113e7dc1fa778f32b16f3e42ebdab73d67eb7392b","after_hash":"15d32823ba686b232fea363c59b9c63a641df7f45eeceed23b32e1522ec0ee49","item_hash_version":3,"message":"Link child-checkout launcher acceptance","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":"b72d1947feeffdcbde2ab6f65e62955a4bf9a144b6e021dee7b34591b51f3aab"} +{"hash_algorithm":"sha256","ts":"2026-09-27T07:28:56.699Z","author":"codex","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6-sol","agent_model_source":"probe","agent_instance":"fb64a4867f43e1382591a8cb","agent_provenance":{"model":{"value":"gpt-6-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"note_add","patch":[{"op":"add","path":"/metadata/notes/2","value":{"created_at":"2026-09-27T07:28:56.699Z","author":"codex","text":"Greptile exact-head PR #116 found two valid gaps. Both workflows installed unversioned pm-github despite pinned managed metadata, and the launcher lacked a consumer-level test for incomplete directories and dangling links. Pinned both workflow installs to npm:pm-github@2026.9.26, removed the obsolete npm 10 and legacy manifest rewrites, added package-version readback, and added real child-checkout regression cases. Targeted 7/7 launcher tests and typecheck pass; the complete gate is being repeated."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-27T07:28:56.699Z"}],"before_hash":"15d32823ba686b232fea363c59b9c63a641df7f45eeceed23b32e1522ec0ee49","after_hash":"d592d2889e4514be545c01f8e389747c4b6b741fffb668092965aec94a48b24d","item_hash_version":3,"message":"Record first bot review remediation","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":"1a457310cde81d55e332c3a26868dc1cd9048c7c411e19332616eae61944ee77"} +{"hash_algorithm":"sha256","ts":"2026-09-27T07:35:23.757Z","author":"codex","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6-sol","agent_model_source":"probe","agent_instance":"fb64a4867f43e1382591a8cb","agent_provenance":{"model":{"value":"gpt-6-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"update","patch":[{"op":"replace","path":"/metadata/acceptance_criteria","value":"Install published pm-github 2026.9.26 in project scope and verify its exact managed source, activation, strict health, release gate, and privacy diff.; Keep scheduled GitHub sync disabled until its pre-push privacy gate exists.; The package manifest and lockfile resolve CLI 2026.9.27, pm-ops 2026.9.26, and pm-changelog 2026.9.25 exactly.; The launcher is byte-identical to the published pm-ops template.; CI and the disabled sync workflow use the canonical project-local package installer and pin the same pm-github version recorded in managed metadata.; Real child checkout tests reject an incomplete pm-ops directory and a dangling package link without registering merge drivers."},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-27T07:35:23.757Z"},{"op":"replace","path":"/metadata/description","value":"The tracker began with a managed pm-github 2026.8.18 copy and package tools at 2026.9.23. Refresh the project-scoped extension to 2026.9.26, pin current PM CLI/SDK 2026.9.27 with published pm-ops 2026.9.26 and pm-changelog 2026.9.25, and copy the published canonical merge-driver launcher. Install the extension through the project-local CLI so its SDK link resolves to that same host version. Preserve the disabled scheduled sync workflow."}],"before_hash":"d592d2889e4514be545c01f8e389747c4b6b741fffb668092965aec94a48b24d","after_hash":"aaa44fef41150fe1fae15dc4a5f89c1d5e227f3b67672aded80c83f0f99b4a5e","item_hash_version":3,"message":"Correct SDK topology and current CLI acceptance target","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":"e1aaf44aae5c98d388de1a99ed84ebb2775a754c03116ab094e10bb8545b5545"} +{"hash_algorithm":"sha256","ts":"2026-09-27T07:35:24.313Z","author":"codex","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6-sol","agent_model_source":"probe","agent_instance":"fb64a4867f43e1382591a8cb","agent_provenance":{"model":{"value":"gpt-6-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"tests_remove","patch":[{"op":"remove","path":"/metadata/tests/2"},{"op":"replace","path":"/metadata/tests/1/provenance/created_at","value":"2026-09-27T07:28:56.044Z"},{"op":"replace","path":"/metadata/tests/1/timeout_seconds","value":120},{"op":"replace","path":"/metadata/tests/1/command","value":"node --test test/prepare-merge-driver.test.ts"},{"op":"replace","path":"/metadata/tests/0/provenance/created_at","value":"2026-09-27T07:22:23.666Z"},{"op":"replace","path":"/metadata/tests/0/command","value":"npm run release:check"},{"op":"add","path":"/metadata/tests/0/timeout_seconds","value":600},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-27T07:35:24.313Z"}],"before_hash":"aaa44fef41150fe1fae15dc4a5f89c1d5e227f3b67672aded80c83f0f99b4a5e","after_hash":"fb395da93c7140f02cd28b96c8df262a9174a7d95c47cc922daff81064b197a1","item_hash_version":3,"message":"Replace host-binary health link with project-local CLI command","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":"7dc779bee626212e893e9e97b0fd101c98895d1c166a434ccca6987e38af5a47"} +{"hash_algorithm":"sha256","ts":"2026-09-27T07:35:24.882Z","author":"codex","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6-sol","agent_model_source":"probe","agent_instance":"fb64a4867f43e1382591a8cb","agent_provenance":{"model":{"value":"gpt-6-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_modules/.bin/pm health --strict-exit --json","scope":"project","timeout_seconds":120,"provenance":{"author":"codex","created_at":"2026-09-27T07:35:24.855Z","source_kind":"local_mutation","source_ref":"fix/pm-graph-github-extension-cli-compat-2026-09-27"}}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-27T07:35:24.882Z"}],"before_hash":"fb395da93c7140f02cd28b96c8df262a9174a7d95c47cc922daff81064b197a1","after_hash":"504b4bac4e0defd9b5922c63ee8d5a5ee0c2479f1212cfa5138b05c72acf958a","item_hash_version":3,"message":"Link project-local CLI health acceptance","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":"3b939fbd75f9300cb582c4721502773832a79c1f9ee0ee3155017a0f6bbb1634"} +{"hash_algorithm":"sha256","ts":"2026-09-27T07:35:25.509Z","author":"codex","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6-sol","agent_model_source":"probe","agent_instance":"fb64a4867f43e1382591a8cb","agent_provenance":{"model":{"value":"gpt-6-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"note_add","patch":[{"op":"add","path":"/metadata/notes/3","value":{"created_at":"2026-09-27T07:35:25.509Z","author":"codex","text":"Correction to prior release-order note: the 2026.9.27 health failure was caused by the project extension installer creating a pm-cli symlink to the global 2026.9.26 CLI. The latest published pm-github 2026.9.26 is compatible when installed through the project-local CLI 2026.9.27. Reinstalled it with that local CLI, verified the extension now resolves node_modules/@unbrained/pm-cli 2026.9.27, and strict health passes. The package pin now targets latest CLI/SDK 2026.9.27. This correction is append-only; the earlier inference was wrong."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-27T07:35:25.509Z"}],"before_hash":"504b4bac4e0defd9b5922c63ee8d5a5ee0c2479f1212cfa5138b05c72acf958a","after_hash":"e5c63cca0e1a74e438a1ada1f1c281e76bfc8620cd2dcdbf1830628c0fe1dc7e","item_hash_version":3,"message":"Correct SDK version-skew root cause","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":"704064eaa766f98834453696609cd57d17445dddc60d37b560603ed4ac563fe6"} +{"hash_algorithm":"sha256","ts":"2026-09-27T07:41:37.622Z","author":"codex","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6-sol","agent_model_source":"probe","agent_instance":"fb64a4867f43e1382591a8cb","agent_provenance":{"model":{"value":"gpt-6-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"note_add","patch":[{"op":"add","path":"/metadata/notes/4","value":{"created_at":"2026-09-27T07:41:37.622Z","author":"codex","text":"Final local candidate after Greptile fixes: @unbrained/pm-cli 2026.9.27, pm-github 2026.9.26, pm-ops 2026.9.26, pm-changelog 2026.9.25. The canonical project-local pm package install succeeded with activation ok and extension SDK resolving to local CLI 2026.9.27. Strict health exits zero with two stale-item advisories. npm run release:check passed 293/293 tests, zero skips, 99.65% lines, 94.06% branches, 100% functions, statement coverage unmeasured, zero production audit findings, and changelog current. GitHub workflow remains disabled_manually. The four-way 100% mandate remains open in pm-graph-6zil."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-27T07:41:37.622Z"}],"before_hash":"e5c63cca0e1a74e438a1ada1f1c281e76bfc8620cd2dcdbf1830628c0fe1dc7e","after_hash":"2b171f4682e2290075363a31fcb25c121295fbe3b7e0d10d833b1c0d65f6582e","item_hash_version":3,"message":"Record latest SDK and review-fix gate results","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":"96358dd804a75662471da4baa8b73944d08ee3c4a024b2eda7026aa7e73a562d"} +{"hash_algorithm":"sha256","ts":"2026-09-27T08:17:04.361Z","author":"codex","author_source":"configured","agent_harness":"codex","agent_model":"gpt-6-sol","agent_model_source":"probe","agent_instance":"fb64a4867f43e1382591a8cb","agent_provenance":{"model":{"value":"gpt-6-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"note_add","patch":[{"op":"add","path":"/metadata/notes/5","value":{"created_at":"2026-09-27T08:17:04.361Z","author":"codex","text":"2026-09-27: Applied defense in depth to the still-disabled GitHub issue-sync pilot after a valid CodeRabbit finding on sibling pm-jira PR #119: the checked-in sync job has if: false, so schedule/manual triggers cannot run the write-capable import even if workflow state is re-enabled accidentally. The required fail-closed pre-push privacy gate remains separate and unimplemented; this is not authorization to enable sync. The package release gate and exact-head review must rerun after this change."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-27T08:17:04.361Z"}],"before_hash":"2b171f4682e2290075363a31fcb25c121295fbe3b7e0d10d833b1c0d65f6582e","after_hash":"f2b73040932aa724da92fd3c4a25b5b2e9ef2f32516ad80b763b900b32f78bad","item_hash_version":3,"message":"Record disabled sync job guard and privacy boundary","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":"08cf2b454c68bd4a07e296cbecf1149d831b2ba9e97602a96da5d58739cede08"} +{"hash_algorithm":"sha256","ts":"2026-09-27T08:26:18.675Z","author":"codex","author_source":"configured","agent_harness":"codex","agent_model":"gpt-6-sol","agent_model_source":"probe","agent_instance":"fb64a4867f43e1382591a8cb","agent_provenance":{"model":{"value":"gpt-6-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"update","patch":[{"op":"add","path":"/metadata/notes/6","value":{"created_at":"2026-09-27T08:26:18.652Z","author":"codex","text":"2026-09-27 final local rerun after checked-in sync job if: false: npm run release:check exits 0, including the existing 293/293 source tests, honest 99.65% line / 94.06% branch / 100% function coverage, packed npm/Bun acceptance, changelog and release attestation gates. GitHub workflow remains disabled_manually; no fail-closed pre-push privacy gate exists yet. This candidate must stay unmerged until exact-head CI and bot review are complete, and cannot be certified at requested 100/100/100/100 coverage."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-27T08:26:18.675Z"}],"before_hash":"f2b73040932aa724da92fd3c4a25b5b2e9ef2f32516ad80b763b900b32f78bad","after_hash":"b6fce61480fd4f53c2cd8e603c4a881f4c1b3b3122b467cd174487eb80eda333","item_hash_version":3,"message":"Record final guarded release gate and remaining limits","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":"26a8354bbf5f97206b6397ea119735f9c205a13eb93f25d0c3f62640042ef277"} +{"hash_algorithm":"sha256","ts":"2026-09-27T08:35:52.808Z","author":"codex","author_source":"configured","agent_harness":"codex","agent_model":"gpt-6-sol","agent_model_source":"probe","agent_instance":"fb64a4867f43e1382591a8cb","agent_provenance":{"model":{"value":"gpt-6-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"update","patch":[{"op":"add","path":"/metadata/docs/1","value":{"path":"https://github.com/unbraind/pm-ops/blob/main/.agents/pm/issues/ops-jzp5.toon","scope":"global","note":"Canonical hoisted broken-install source issue"}},{"op":"add","path":"/metadata/docs/2","value":{"path":"https://github.com/unbraind/pm-ops/pull/124","scope":"global","note":"Canonical source fix candidate pending publication"}},{"op":"add","path":"/metadata/notes/7","value":{"created_at":"2026-09-27T08:35:52.784Z","author":"codex","text":"2026-09-27 downstream Greptile P1 on pm-todos #103 revealed the published pm-ops 2026.9.26 launcher copied here misses incomplete hoisted installs in ancestor node_modules. Canonical source issue ops-jzp5 and unmerged pm-ops #124 already fix and test this path. This PR is blocked until the reviewed source is published, this package pins and copies its new template byte for byte, full release gate and strict health pass, and exact-head bot review repeats. Earlier green CI/Greptile status does not certify this edge case."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-27T08:35:52.808Z"}],"before_hash":"b6fce61480fd4f53c2cd8e603c4a881f4c1b3b3122b467cd174487eb80eda333","after_hash":"9b52f53c5798fdadb763c9f76374ad3227f100063483f8d5331a7088180c4872","item_hash_version":3,"message":"Track valid downstream hoisted-launcher blocker","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":"c8c9a3812981a3a528406f2780ca18172c81e2f3f9f6fa97c89fe47715761ddf"} +{"hash_algorithm":"sha256","ts":"2026-09-28T06:01:57.284Z","author":"claude-hub","author_source":"asserted","agent_harness":"claude-code","agent_model":"claude-opus-5-5","agent_model_source":"probe","agent_instance":"acec329f9c06ecc0d6dbecd4","agent_provenance":{"model":{"value":"claude-opus-5-5","source":"probe"},"effort":{"value":"high","source":"environment"},"role":null,"topic":null,"version":{"value":"2.1.283","source":"probe"}},"op":"comment_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-28T06:01:57.284Z"},{"op":"add","path":"/metadata/comments","value":[{"created_at":"2026-09-28T06:01:57.284Z","author":"claude-hub","text":"2026-09-28: pinned pm-ops 2026.9.28 and re-copied its templates/prepare-merge-driver.ts (pm-ops#124: the omit-dev skip now checks every Node resolution path for an incomplete hoisted pm-ops, so a broken ancestor install fails instead of silently skipping the merge drivers). release:check and changelog:check pass on this branch."}]}],"before_hash":"9b52f53c5798fdadb763c9f76374ad3227f100063483f8d5331a7088180c4872","after_hash":"a1e35481747046baf91e159f2d757284ba0ee8a6d65540a82d392421bbb822db","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"claude_session_file","rule_version":"v1"},"version":{"status":"resolved","resolver":"claude_session_file","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"a69f046d86ac544e2ef6c2ee988023db3cfd3dba193d0324bc8895f740e1f642"} +{"hash_algorithm":"sha256","ts":"2026-09-28T06:30:25.362Z","author":"claude-hub","author_source":"asserted","agent_harness":"claude-code","agent_model":"claude-opus-5-5","agent_model_source":"probe","agent_instance":"acec329f9c06ecc0d6dbecd4","agent_provenance":{"model":{"value":"claude-opus-5-5","source":"probe"},"effort":{"value":"high","source":"environment"},"role":{"value":"implementer","source":"argv"},"topic":null,"version":{"value":"2.1.283","source":"probe"}},"op":"claim","patch":[{"op":"replace","path":"/metadata/claim_principal","value":"claude-hub"},{"op":"replace","path":"/metadata/assignee","value":"claude-hub"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-28T06:30:25.362Z"}],"before_hash":"a1e35481747046baf91e159f2d757284ba0ee8a6d65540a82d392421bbb822db","after_hash":"24a228f4dc76b02ad87e6013900093758c182c14278912e8040a392596d23f52","item_hash_version":3,"message":"Takeover approved by the user on 2026-09-28: the codex certify agent that held this claim (2026-09-26/27 session) is no longer running; claude-hub continues this item's PR.","context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"claude_session_file","rule_version":"v1"},"version":{"status":"resolved","resolver":"claude_session_file","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"c8fc4c3cffd520641fa0f855b50b3efe87e6ae3f62d7641b3aff257dfb64109b"} +{"hash_algorithm":"sha256","ts":"2026-09-28T06:30:48.394Z","author":"claude-hub","author_source":"asserted","agent_harness":"claude-code","agent_model":"claude-opus-5-5","agent_model_source":"probe","agent_instance":"acec329f9c06ecc0d6dbecd4","agent_provenance":{"model":{"value":"claude-opus-5-5","source":"probe"},"effort":{"value":"high","source":"environment"},"role":{"value":"implementer","source":"argv"},"topic":null,"version":{"value":"2.1.283","source":"probe"}},"op":"update","patch":[{"op":"replace","path":"/metadata/acceptance_criteria","value":"Install published pm-github 2026.9.26 in project scope and verify its exact managed source, activation, strict health, release gate, and privacy diff.; Keep scheduled GitHub sync disabled until its pre-push privacy gate exists.; The package manifest and lockfile resolve CLI 2026.9.27, pm-ops 2026.9.28, and pm-changelog 2026.9.25 exactly.; The launcher is byte-identical to the published pm-ops template.; CI and the disabled sync workflow use the canonical project-local package installer and pin the same pm-github version recorded in managed metadata.; Real child checkout tests reject an incomplete pm-ops directory and a dangling package link without registering merge drivers."},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-28T06:30:48.394Z"}],"before_hash":"24a228f4dc76b02ad87e6013900093758c182c14278912e8040a392596d23f52","after_hash":"67c8302d30ef99156ef46fe19a60a5c5c515c539c9a31c68172902366f600ce4","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"claude_session_file","rule_version":"v1"},"version":{"status":"resolved","resolver":"claude_session_file","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"743f8947fef690e323de7d79b7a311f4e722bbd97b8b62622e67bb31a419b297"} +{"hash_algorithm":"sha256","ts":"2026-09-28T06:30:59.718Z","author":"claude-hub","author_source":"asserted","agent_harness":"claude-code","agent_model":"claude-opus-5-5","agent_model_source":"probe","agent_instance":"acec329f9c06ecc0d6dbecd4","agent_provenance":{"model":{"value":"claude-opus-5-5","source":"probe"},"effort":{"value":"high","source":"environment"},"role":{"value":"implementer","source":"argv"},"topic":null,"version":{"value":"2.1.283","source":"probe"}},"op":"update","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-28T06:30:59.718Z"},{"op":"replace","path":"/metadata/description","value":"The tracker began with a managed pm-github 2026.8.18 copy and package tools at 2026.9.23. Refresh the project-scoped extension to 2026.9.26, pin current PM CLI/SDK 2026.9.27 with published pm-ops 2026.9.28 and pm-changelog 2026.9.25, and copy the published canonical merge-driver launcher. Install the extension through the project-local CLI so its SDK link resolves to that same host version. Preserve the disabled scheduled sync workflow."}],"before_hash":"67c8302d30ef99156ef46fe19a60a5c5c515c539c9a31c68172902366f600ce4","after_hash":"1271d8d9c8792be5a2707a6647145ef86e78ecdf8d16d721be70ceee793f1154","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"claude_session_file","rule_version":"v1"},"version":{"status":"resolved","resolver":"claude_session_file","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"49254aa93093d17ca987d89d7fbd633af87b7d124617b11d07ec0b9b42c9dd8d"} +{"hash_algorithm":"sha256","ts":"2026-09-28T06:31:14.709Z","author":"claude-hub","author_source":"asserted","agent_harness":"claude-code","agent_model":"claude-opus-5-5","agent_model_source":"probe","agent_instance":"acec329f9c06ecc0d6dbecd4","agent_provenance":{"model":{"value":"claude-opus-5-5","source":"probe"},"effort":{"value":"high","source":"environment"},"role":null,"topic":null,"version":{"value":"2.1.283","source":"probe"}},"op":"files_add","patch":[{"op":"remove","path":"/metadata/files/6"},{"op":"replace","path":"/metadata/files/5/note","value":"Broken directory and dangling link acceptance"},{"op":"replace","path":"/metadata/files/5/path","value":"test/prepare-merge-driver.test.ts"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-28T06:31:14.709Z"}],"before_hash":"1271d8d9c8792be5a2707a6647145ef86e78ecdf8d16d721be70ceee793f1154","after_hash":"9bd9af31361a67abbd6f2c3171725fce9d55170b0792b2a59f838e4c42dbba74","item_hash_version":3,"message":"Replace the launcher note: the copy is now pm-ops 2026.9.28","context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"claude_session_file","rule_version":"v1"},"version":{"status":"resolved","resolver":"claude_session_file","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"0d6aa48ffe6eea4856015bef07ce4319f178cd9117f597d4c1c42dd80cb3c62c"} +{"hash_algorithm":"sha256","ts":"2026-09-28T06:31:15.468Z","author":"claude-hub","author_source":"asserted","agent_harness":"claude-code","agent_model":"claude-opus-5-5","agent_model_source":"probe","agent_instance":"acec329f9c06ecc0d6dbecd4","agent_provenance":{"model":{"value":"claude-opus-5-5","source":"probe"},"effort":{"value":"high","source":"environment"},"role":null,"topic":null,"version":{"value":"2.1.283","source":"probe"}},"op":"files_add","patch":[{"op":"replace","path":"/metadata/files/5/note","value":"Published pm-ops 2026.9.28 canonical launcher copy"},{"op":"replace","path":"/metadata/files/5/path","value":"scripts/prepare-merge-driver.ts"},{"op":"add","path":"/metadata/files/6","value":{"path":"test/prepare-merge-driver.test.ts","scope":"project","note":"Broken directory and dangling link acceptance"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-28T06:31:15.468Z"}],"before_hash":"9bd9af31361a67abbd6f2c3171725fce9d55170b0792b2a59f838e4c42dbba74","after_hash":"440cbd33efeb89ad918a2aebf3164fda66ed3c599abc6bf8654d2933600c77d3","item_hash_version":3,"context":{"agent_provenance_outcomes":{"model":{"status":"resolved","resolver":"claude_session_file","rule_version":"v1"},"version":{"status":"resolved","resolver":"claude_session_file","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"1e88c018b6488475880b786a0711f5484c587e7375aafb9ddacc9973ba097a07"} +{"hash_algorithm":"sha256","ts":"2026-10-02T21:42:44.011Z","author":"codex-sol-land","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"6edbeed2935f1e5c041f14f3","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-land"},{"op":"replace","path":"/metadata/assignee","value":"codex-sol-land"},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-02T21:42:44.011Z"}],"before_hash":"440cbd33efeb89ad918a2aebf3164fda66ed3c599abc6bf8654d2933600c77d3","after_hash":"e359ac04f75ee3a29e0f3fc2250c88c65d5e3d4f9ee3a76db80667220a54be91","item_hash_version":3,"message":"Resume authorized fleet PR preparation after the previous agent stopped; preserve all earlier 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":"substantive","record_hash_version":1,"record_hash":"00d482b434fef0ed9ac354775da5083cd7b86e4320d999d20eb1d642a9a72305"} +{"hash_algorithm":"sha256","ts":"2026-10-02T21:42:45.135Z","author":"codex-sol-land","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"6edbeed2935f1e5c041f14f3","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/1","value":{"created_at":"2026-10-02T21:42:45.135Z","author":"codex-sol-land","text":"Resumed PR #116 preparation from remote e4d745d. Live PR: CI green, zero unresolved inline threads. Existing findings and replies retained. Checking current base, full release gate and final-head review availability; no merge or item closure."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-02T21:42:45.135Z"}],"before_hash":"e359ac04f75ee3a29e0f3fc2250c88c65d5e3d4f9ee3a76db80667220a54be91","after_hash":"3729ea2d7370af854c549b55b4728d5f80b6f9b0c9933188daf2a5a631e9e1a6","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":"560c223d6ddf720513fc9327dbabc932e77cfead775a2f2fefcafa802b5b9cfd"} +{"hash_algorithm":"sha256","ts":"2026-10-02T21:42:45.856Z","author":"codex-sol-land","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"6edbeed2935f1e5c041f14f3","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/3","value":{"command":"flock /tmp/claude-1000/heavy-gate.lock npm run release:check","scope":"project","timeout_seconds":1200,"provenance":{"author":"codex-sol-land","created_at":"2026-10-02T21:42:45.824Z","source_kind":"local_mutation","source_ref":"fix/pm-graph-github-extension-cli-compat-2026-09-27"}}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-02T21:42:45.856Z"}],"before_hash":"3729ea2d7370af854c549b55b4728d5f80b6f9b0c9933188daf2a5a631e9e1a6","after_hash":"3298da18c585ddd344c1e2e6fa0ad174fb2619f2310f67cebbe88121e63ac7f5","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":"3e64008111db28684a7effd4c82c14b420412a79deedb292fc05b398c994fe0b"} +{"hash_algorithm":"sha256","ts":"2026-10-02T21:47:55.226Z","author":"codex-sol-land","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"6edbeed2935f1e5c041f14f3","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/2","value":{"created_at":"2026-10-02T21:47:55.226Z","author":"codex-sol-land","text":"The PM-linked full gate injects a fixed PM_PATH into all real CLI child-workspace tests, conflicting with their independent tracker initialization. Stopped that unsuitable-context invocation; the unchanged CI release gate now runs directly with its normal environment under the heavy lock. A focused PM-linked workflow regression will supply linked execution evidence."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-02T21:47:55.226Z"}],"before_hash":"3298da18c585ddd344c1e2e6fa0ad174fb2619f2310f67cebbe88121e63ac7f5","after_hash":"5674e57c19e6ffafcb0541eb83e089a98d83870d20be5a075f4ead443da516be","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":"c4be170117d0775f0ac1d11cef3f08e7d4e35cf4e1b22bcacfc330fe67b36de8"} +{"hash_algorithm":"sha256","ts":"2026-10-02T21:47:56.200Z","author":"codex-sol-land","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"6edbeed2935f1e5c041f14f3","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/4","value":{"command":"node --test test/release-workflow.test.ts","scope":"project","timeout_seconds":120,"provenance":{"author":"codex-sol-land","created_at":"2026-10-02T21:47:56.173Z","source_kind":"local_mutation","source_ref":"fix/pm-graph-github-extension-cli-compat-2026-09-27"}}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-02T21:47:56.200Z"}],"before_hash":"5674e57c19e6ffafcb0541eb83e089a98d83870d20be5a075f4ead443da516be","after_hash":"c58c453433426b5c0c9206e1a14b54cfb65f55469014e90cae33b9b68f6a3b22","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":"25bf25577e393e46e807e57bad8aa8e6127ff8490e8dc552a68a8ea3e383b9bc"} +{"hash_algorithm":"sha256","ts":"2026-10-02T21:49:38.020Z","author":"codex-sol-land","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"6edbeed2935f1e5c041f14f3","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"tests_remove","patch":[{"op":"remove","path":"/metadata/tests/4"},{"op":"replace","path":"/metadata/tests/3/provenance/created_at","value":"2026-10-02T21:47:56.173Z"},{"op":"replace","path":"/metadata/tests/3/timeout_seconds","value":120},{"op":"replace","path":"/metadata/tests/3/command","value":"node --test test/release-workflow.test.ts"},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-02T21:49:38.020Z"}],"before_hash":"c58c453433426b5c0c9206e1a14b54cfb65f55469014e90cae33b9b68f6a3b22","after_hash":"20b9dc820e71a4098d151f793635a6d6ae6a9a8dc000ad50326d9570ca242b1e","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":"e37c78fc09aceb0829d4eade4830d135e26fcdfed8d4219594b8dfa1c72b97d3"} +{"hash_algorithm":"sha256","ts":"2026-10-02T21:52:49.328Z","author":"codex-sol-land","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"6edbeed2935f1e5c041f14f3","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"files_add","patch":[{"op":"add","path":"/metadata/files/7","value":{"path":"test/release-workflow.test.ts","scope":"project"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-02T21:52:49.328Z"}],"before_hash":"20b9dc820e71a4098d151f793635a6d6ae6a9a8dc000ad50326d9570ca242b1e","after_hash":"4b0da8cd90288d0c4dbc638aeffd9c55adb5bc2441e097fc0be531ac210ba4c8","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":"02a82a805a6e765630b74bf2b66bb389fca538c92d5f4e6c1531fe04a49708f3"} +{"hash_algorithm":"sha256","ts":"2026-10-02T21:52:50.267Z","author":"codex-sol-land","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"6edbeed2935f1e5c041f14f3","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"docs_add","patch":[{"op":"add","path":"/metadata/docs/3","value":{"path":"https://github.com/unbraind/pm-graph/pull/116","scope":"project"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-02T21:52:50.267Z"}],"before_hash":"4b0da8cd90288d0c4dbc638aeffd9c55adb5bc2441e097fc0be531ac210ba4c8","after_hash":"b326f669ba8e1370d1bd57012c830b6935eea63577b9ce211953bba25cfcd5e4","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":"a14c0677182e793203a2b52f2da7decf04230437748c55da673d7d9e3995e270"} +{"hash_algorithm":"sha256","ts":"2026-10-02T22:02:16.434Z","author":"codex-sol-land","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"6edbeed2935f1e5c041f14f3","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-02T22:02:16.434Z","author":"codex-sol-land","text":"Fresh npm ci and direct locked npm run release:check exit 0. Full suite: 293 pass, 0 failures/skips; configured coverage remains 99.65% lines, 94.06% branches, 100% functions. PM-linked release-workflow regression passes 8/8 and local pinned CLI strict health with required merge drivers passes. All prior findings remain resolved; unavailable substantive reviews remain blockers, and existing pm-graph-6zil owns the wider coverage target. No gate, code, hosted service or release changes."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-02T22:02:16.434Z"}],"before_hash":"b326f669ba8e1370d1bd57012c830b6935eea63577b9ce211953bba25cfcd5e4","after_hash":"898ce2c1998447c777411d2e9f0b2ad1cc5bb8c5ea67bb41c0dc6dcb9b766232","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":"54a446432814a110a25763595f9209689cd978fc30bed1109e5ad842b4544329"} +{"hash_algorithm":"sha256","ts":"2026-10-02T22:02:17.346Z","author":"codex-sol-land","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"6edbeed2935f1e5c041f14f3","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-02T22:02:17.346Z"}],"before_hash":"898ce2c1998447c777411d2e9f0b2ad1cc5bb8c5ea67bb41c0dc6dcb9b766232","after_hash":"da8d28db7e2d35bc437d36e106fae01ad39fa1d2063aa5e03828708072f523a3","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":"193cc5055032ad0400e3673e1a8f0776304df132a260a7cd2d8ea7b56cf0651a"} +{"hash_algorithm":"sha256","ts":"2026-10-02T22:24:03.817Z","author":"codex-sol-land","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"6edbeed2935f1e5c041f14f3","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/updated_at","value":"2026-10-02T22:24:03.817Z"},{"op":"add","path":"/metadata/assignee","value":"codex-sol-land"},{"op":"add","path":"/metadata/claim_principal","value":"codex-sol-land"}],"before_hash":"da8d28db7e2d35bc437d36e106fae01ad39fa1d2063aa5e03828708072f523a3","after_hash":"e1919958613074dc559adddfee29764efb5cd5ce90d69a00d0c7e73c11ef2e51","item_hash_version":3,"message":"Second review round: address new workflow and current-metadata findings while preserving historical 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":"substantive","record_hash_version":1,"record_hash":"91e682be2c9550ffa44fd41a1f030029aa70880e0007fd44e1b764281554c3c5"} +{"hash_algorithm":"sha256","ts":"2026-10-02T22:25:00.870Z","author":"codex-sol-land","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"6edbeed2935f1e5c041f14f3","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":"Original failure: managed pm-github 2026.8.18 failed strict health under global CLI 2026.9.26. Current candidate: local CLI 2026.9.27 activates pinned pm-github 2026.9.26 and strict health exits zero, as recorded in verification comments."},{"op":"replace","path":"/metadata/expected_result","value":"Managed pm-github 2026.9.26 resolves against pinned project-local CLI 2026.9.27; strict tracker health exits zero."},{"op":"replace","path":"/metadata/environment","value":"Candidate project-local ./node_modules/.bin/pm at CLI 2026.9.27; original report used global CLI 2026.9.26"},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-02T22:25:00.870Z"},{"op":"replace","path":"/metadata/title","value":"Refresh managed pm-github extension for project-local PM CLI 2026.9.27"}],"before_hash":"e1919958613074dc559adddfee29764efb5cd5ce90d69a00d0c7e73c11ef2e51","after_hash":"034e23561e09ddc624946d1467a24958d262f99e5cd8fb774e475782616f4ab8","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":"384a56f17895d4337a1d7fe71b4f8e6601bc04f666eed44a5da271d35319daee"} +{"hash_algorithm":"sha256","ts":"2026-10-02T22:25:02.051Z","author":"codex-sol-land","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"6edbeed2935f1e5c041f14f3","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"docs_add","patch":[{"op":"remove","path":"/metadata/docs/3"},{"op":"remove","path":"/metadata/docs/2/note"},{"op":"replace","path":"/metadata/docs/2/scope","value":"project"},{"op":"replace","path":"/metadata/docs/2/path","value":"https://github.com/unbraind/pm-graph/pull/116"},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-02T22:25:02.051Z"}],"before_hash":"034e23561e09ddc624946d1467a24958d262f99e5cd8fb774e475782616f4ab8","after_hash":"f7651ca4fd63d6b615952da4e2b49b7d379c1a6fc3bfa16f0ed42a45e81120f1","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":"6724a6bcdaae93acb146a2f8af362c6c25627ad6c4ac5d03c53dabaabdeae41c"} +{"hash_algorithm":"sha256","ts":"2026-10-02T22:25:03.362Z","author":"codex-sol-land","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"6edbeed2935f1e5c041f14f3","agent_provenance":{"model":{"value":"gpt-6.1-sol","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"docs_add","patch":[{"op":"add","path":"/metadata/docs/2/note","value":"Canonical source of the already-published pm-ops 2026.9.28 hoisted-install fix"},{"op":"replace","path":"/metadata/docs/2/scope","value":"global"},{"op":"replace","path":"/metadata/docs/2/path","value":"https://github.com/unbraind/pm-ops/pull/124"},{"op":"add","path":"/metadata/docs/3","value":{"path":"https://github.com/unbraind/pm-graph/pull/116","scope":"project"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-02T22:25:03.362Z"}],"before_hash":"f7651ca4fd63d6b615952da4e2b49b7d379c1a6fc3bfa16f0ed42a45e81120f1","after_hash":"53a3f216c3664cec5ce7e7cee627e39f5327ceae93fec5e8de8946dcd821cd62","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":"ec7456d9182a73b790c36e719200e60a5c5bdf435aee267be28ea7c66e873e1d"} +{"hash_algorithm":"sha256","ts":"2026-10-02T22:25:04.755Z","author":"codex-sol-land","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"6edbeed2935f1e5c041f14f3","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/install-pm-github.test.ts"},{"op":"replace","path":"/metadata/files/6/note","value":"Published pm-ops 2026.9.28 canonical launcher copy"},{"op":"replace","path":"/metadata/files/6/path","value":"scripts/prepare-merge-driver.ts"},{"op":"remove","path":"/metadata/files/5/note"},{"op":"replace","path":"/metadata/files/5/path","value":"scripts/install-pm-github.sh"},{"op":"add","path":"/metadata/files/8","value":{"path":"test/prepare-merge-driver.test.ts","scope":"project","note":"Broken directory and dangling link acceptance"}},{"op":"add","path":"/metadata/files/9","value":{"path":"test/release-workflow.test.ts","scope":"project"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-02T22:25:04.755Z"}],"before_hash":"53a3f216c3664cec5ce7e7cee627e39f5327ceae93fec5e8de8946dcd821cd62","after_hash":"c9247d5c9ad015f7baf8bec32f8b399d6b62f9277fb04918e026188ace83c756","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":"7053c55ffb8edabd21f4da0e55f8bd8ab3f4b65f47a76c5c25ce35549472dac4"} +{"hash_algorithm":"sha256","ts":"2026-10-02T22:25:06.006Z","author":"codex-sol-land","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"6edbeed2935f1e5c041f14f3","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/4","value":{"command":"node --test test/install-pm-github.test.ts","scope":"project","timeout_seconds":120,"provenance":{"author":"codex-sol-land","created_at":"2026-10-02T22:25:05.974Z","source_kind":"local_mutation","source_ref":"fix/pm-graph-github-extension-cli-compat-2026-09-27"}}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-02T22:25:06.006Z"}],"before_hash":"c9247d5c9ad015f7baf8bec32f8b399d6b62f9277fb04918e026188ace83c756","after_hash":"b01aa4a5736fe9ae9f3dbe14f87862fe5f6cee832c0bba2e855226c4e51f6811","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":"43c60b29797a041a7fdc04f5d795a5c889eaefc1446b67fce050b46af1ae47d1"} +{"hash_algorithm":"sha256","ts":"2026-10-02T22:27:43.750Z","author":"codex-sol-land","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"6edbeed2935f1e5c041f14f3","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-02T22:27:43.750Z","author":"codex-sol-land","text":"Second-round feedback: shared CI/sync installer regression failed 5/5 before extraction and passes 5/5 after, covering argv pin, tracked/untracked registry state, version mismatch and install failure. Current title/environment/expected result now reflect local CLI 2026.9.27; original failure remains explicitly labeled in actual_result, with current green result separate. The mutable docs link now identifies #124 as the source of already-published pm-ops 2026.9.28; dated history is preserved. Refuse the EACCES/ELOOP proposal because unresolved filesystem state must fail closed and original diagnostics are useful; retain the canonical byte-identical launcher. Canonical v2026.09.28 owns the real ancestor-install regression, so the duplicate consumer fixture request remains unnecessary."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-02T22:27:43.750Z"}],"before_hash":"b01aa4a5736fe9ae9f3dbe14f87862fe5f6cee832c0bba2e855226c4e51f6811","after_hash":"17efb17adc511354421c8559b4ad0f0eb2e24ba2473b39c983abdcb368779022","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":"782ce019b8a68dafe6cd88b9d0e57dd871b8d73613fe4395cb9677dba73afb0a"} +{"hash_algorithm":"sha256","ts":"2026-10-02T22:42:10.346Z","author":"codex-sol-land","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"6edbeed2935f1e5c041f14f3","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-02T22:42:10.346Z","author":"codex-sol-land","text":"Round-two review fixes: shared exact-pin extension installer now serves both workflows; five installer regressions failed before the fix and pass after it; current CLI metadata and the already-published launcher reference are corrected. Canonical lstat failure handling and duplicate ancestor coverage requests are technically refused, with evidence in their review replies. Resumed verification: npm ci, current-base rebase, fresh committed-dist comparison, strict local tracker health with required merge drivers, npm run release:check, and bun install --no-save all passed. Full gate: 298 tests, 298 pass, 0 skips; configured coverage thresholds unchanged. PM-linked test/release-workflow.test.ts passed. Earlier findings and technical refusals retained; workflow fixes are included in this gate. Exact pushed-head CI and substantive reviewer availability remain separate checks; no merge, release, publication or item closure."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-10-02T22:42:10.346Z"}],"before_hash":"17efb17adc511354421c8559b4ad0f0eb2e24ba2473b39c983abdcb368779022","after_hash":"4034d51cdcfebc4f1368fddfe79e94304dd8d82b7043a49c84de1d595557c3f1","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":"ac0a57696d9ea401f2c3dc807264960859860bf9e474ddfdafa78826bc8d7041"} +{"hash_algorithm":"sha256","ts":"2026-10-02T22:42:11.419Z","author":"codex-sol-land","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"6edbeed2935f1e5c041f14f3","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/updated_at","value":"2026-10-02T22:42:11.419Z"},{"op":"replace","path":"/metadata/status","value":"blocked"}],"before_hash":"4034d51cdcfebc4f1368fddfe79e94304dd8d82b7043a49c84de1d595557c3f1","after_hash":"a8d646750f1526b4400d3aa1b9a795c1e9f94cbdf2a2dd4b13ea3e4b5d68d1ba","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":"670893c11cad474974c6456547dba792ee7cb7523e92d033c4aae1991d9a1ebb"} +{"hash_algorithm":"sha256","ts":"2026-10-02T22:42:12.299Z","author":"codex-sol-land","author_source":"asserted","agent_harness":"codex","agent_model":"gpt-6.1-sol","agent_model_source":"probe","agent_instance":"6edbeed2935f1e5c041f14f3","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-02T22:42:12.299Z"}],"before_hash":"a8d646750f1526b4400d3aa1b9a795c1e9f94cbdf2a2dd4b13ea3e4b5d68d1ba","after_hash":"49931ca11bb42b2e52b80b1f4c5248a9aed9b4221b8164e9c6d37994a89fd2bc","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":"e77c61a5d2392040bc8a56cdb1fe99ae8dff808a90f1c8c7f5e5c4dbdcdc2f61"} diff --git a/.agents/pm/issues/pm-graph-ipvn.toon b/.agents/pm/issues/pm-graph-ipvn.toon new file mode 100644 index 00000000..7df65750 --- /dev/null +++ b/.agents/pm/issues/pm-graph-ipvn.toon @@ -0,0 +1,79 @@ +id: pm-graph-ipvn +title: Refresh managed pm-github extension for project-local PM CLI 2026.9.27 +description: "The tracker began with a managed pm-github 2026.8.18 copy and package tools at 2026.9.23. Refresh the project-scoped extension to 2026.9.26, pin current PM CLI/SDK 2026.9.27 with published pm-ops 2026.9.28 and pm-changelog 2026.9.25, and copy the published canonical merge-driver launcher. Install the extension through the project-local CLI so its SDK link resolves to that same host version. Preserve the disabled scheduled sync workflow." +type: Issue +status: blocked +priority: 1 +tags: [] +created_at: "2026-09-27T07:07:21.121Z" +updated_at: "2026-10-02T22:42:12.299Z" +author: codex +acceptance_criteria: "Install published pm-github 2026.9.26 in project scope and verify its exact managed source, activation, strict health, release gate, and privacy diff.; Keep scheduled GitHub sync disabled until its pre-push privacy gate exists.; The package manifest and lockfile resolve CLI 2026.9.27, pm-ops 2026.9.28, and pm-changelog 2026.9.25 exactly.; The launcher is byte-identical to the published pm-ops template.; CI and the disabled sync workflow use the canonical project-local package installer and pin the same pm-github version recorded in managed metadata.; Real child checkout tests reject an incomplete pm-ops directory and a dangling package link without registering merge drivers." +severity: medium +environment: Candidate project-local ./node_modules/.bin/pm at CLI 2026.9.27; original report used global CLI 2026.9.26 +repro_steps: Run pm health --strict-exit --json in fleet/pm-graph; inspect extension_host_pm_cli_version_skew and .agents/pm/extensions/pm-github/package.json. +expected_result: Managed pm-github 2026.9.26 resolves against pinned project-local CLI 2026.9.27; strict tracker health exits zero. +actual_result: "Original failure: managed pm-github 2026.8.18 failed strict health under global CLI 2026.9.26. Current candidate: local CLI 2026.9.27 activates pinned pm-github 2026.9.26 and strict health exits zero, as recorded in verification comments." +comments[6]{created_at,author,text}: + "2026-09-28T06:01:57.284Z",claude-hub,"2026-09-28: pinned pm-ops 2026.9.28 and re-copied its templates/prepare-merge-driver.ts (pm-ops#124: the omit-dev skip now checks every Node resolution path for an incomplete hoisted pm-ops, so a broken ancestor install fails instead of silently skipping the merge drivers). release:check and changelog:check pass on this branch." + "2026-10-02T21:42:45.135Z",codex-sol-land,"Resumed PR #116 preparation from remote e4d745d. Live PR: CI green, zero unresolved inline threads. Existing findings and replies retained. Checking current base, full release gate and final-head review availability; no merge or item closure." + "2026-10-02T21:47:55.226Z",codex-sol-land,"The PM-linked full gate injects a fixed PM_PATH into all real CLI child-workspace tests, conflicting with their independent tracker initialization. Stopped that unsuitable-context invocation; the unchanged CI release gate now runs directly with its normal environment under the heavy lock. A focused PM-linked workflow regression will supply linked execution evidence." + "2026-10-02T22:02:16.434Z",codex-sol-land,"Fresh npm ci and direct locked npm run release:check exit 0. Full suite: 293 pass, 0 failures/skips; configured coverage remains 99.65% lines, 94.06% branches, 100% functions. PM-linked release-workflow regression passes 8/8 and local pinned CLI strict health with required merge drivers passes. All prior findings remain resolved; unavailable substantive reviews remain blockers, and existing pm-graph-6zil owns the wider coverage target. No gate, code, hosted service or release changes." + "2026-10-02T22:27:43.750Z",codex-sol-land,"Second-round feedback: shared CI/sync installer regression failed 5/5 before extraction and passes 5/5 after, covering argv pin, tracked/untracked registry state, version mismatch and install failure. Current title/environment/expected result now reflect local CLI 2026.9.27; original failure remains explicitly labeled in actual_result, with current green result separate. The mutable docs link now identifies #124 as the source of already-published pm-ops 2026.9.28; dated history is preserved. Refuse the EACCES/ELOOP proposal because unresolved filesystem state must fail closed and original diagnostics are useful; retain the canonical byte-identical launcher. Canonical v2026.09.28 owns the real ancestor-install regression, so the duplicate consumer fixture request remains unnecessary." + "2026-10-02T22:42:10.346Z",codex-sol-land,"Round-two review fixes: shared exact-pin extension installer now serves both workflows; five installer regressions failed before the fix and pass after it; current CLI metadata and the already-published launcher reference are corrected. Canonical lstat failure handling and duplicate ancestor coverage requests are technically refused, with evidence in their review replies. Resumed verification: npm ci, current-base rebase, fresh committed-dist comparison, strict local tracker health with required merge drivers, npm run release:check, and bun install --no-save all passed. Full gate: 298 tests, 298 pass, 0 skips; configured coverage thresholds unchanged. PM-linked test/release-workflow.test.ts passed. Earlier findings and technical refusals retained; workflow fixes are included in this gate. Exact pushed-head CI and substantive reviewer availability remain separate checks; no merge, release, publication or item closure." +notes[8]{created_at,author,text}: + "2026-09-27T07:15:27.801Z",codex,"First full release:check ran 292 tests and failed exactly one assertion: the prepare launcher was not the unmodified published pm-ops template. Copied the installed pm-ops 2026.9.26 template byte for byte; will rerun the full gate. This is the published local broken-install guard, not the unmerged hoisted guard from pm-ops #124." + "2026-09-27T07:21:59.571Z",codex,"The npm registry published @unbrained/pm-cli 2026.9.27 while pm-github latest remains 2026.9.26. A real local CLI 2026.9.27 probe failed strict health with extension_host_pm_cli_version_skew:2026.9.27:2026.9.26:pm-github. Reverted the development CLI pin to the newest compatible published pair (2026.9.26) and retained the verified green release gate. Fleet certification must revisit this after pm-github 2026.9.27 is published; do not call this latest-CLI certification." + "2026-09-27T07:28:56.699Z",codex,"Greptile exact-head PR #116 found two valid gaps. Both workflows installed unversioned pm-github despite pinned managed metadata, and the launcher lacked a consumer-level test for incomplete directories and dangling links. Pinned both workflow installs to npm:pm-github@2026.9.26, removed the obsolete npm 10 and legacy manifest rewrites, added package-version readback, and added real child-checkout regression cases. Targeted 7/7 launcher tests and typecheck pass; the complete gate is being repeated." + "2026-09-27T07:35:25.509Z",codex,"Correction to prior release-order note: the 2026.9.27 health failure was caused by the project extension installer creating a pm-cli symlink to the global 2026.9.26 CLI. The latest published pm-github 2026.9.26 is compatible when installed through the project-local CLI 2026.9.27. Reinstalled it with that local CLI, verified the extension now resolves node_modules/@unbrained/pm-cli 2026.9.27, and strict health passes. The package pin now targets latest CLI/SDK 2026.9.27. This correction is append-only; the earlier inference was wrong." + "2026-09-27T07:41:37.622Z",codex,"Final local candidate after Greptile fixes: @unbrained/pm-cli 2026.9.27, pm-github 2026.9.26, pm-ops 2026.9.26, pm-changelog 2026.9.25. The canonical project-local pm package install succeeded with activation ok and extension SDK resolving to local CLI 2026.9.27. Strict health exits zero with two stale-item advisories. npm run release:check passed 293/293 tests, zero skips, 99.65% lines, 94.06% branches, 100% functions, statement coverage unmeasured, zero production audit findings, and changelog current. GitHub workflow remains disabled_manually. The four-way 100% mandate remains open in pm-graph-6zil." + "2026-09-27T08:17:04.361Z",codex,"2026-09-27: Applied defense in depth to the still-disabled GitHub issue-sync pilot after a valid CodeRabbit finding on sibling pm-jira PR #119: the checked-in sync job has if: false, so schedule/manual triggers cannot run the write-capable import even if workflow state is re-enabled accidentally. The required fail-closed pre-push privacy gate remains separate and unimplemented; this is not authorization to enable sync. The package release gate and exact-head review must rerun after this change." + "2026-09-27T08:26:18.652Z",codex,"2026-09-27 final local rerun after checked-in sync job if: false: npm run release:check exits 0, including the existing 293/293 source tests, honest 99.65% line / 94.06% branch / 100% function coverage, packed npm/Bun acceptance, changelog and release attestation gates. GitHub workflow remains disabled_manually; no fail-closed pre-push privacy gate exists yet. This candidate must stay unmerged until exact-head CI and bot review are complete, and cannot be certified at requested 100/100/100/100 coverage." + "2026-09-27T08:35:52.784Z",codex,"2026-09-27 downstream Greptile P1 on pm-todos #103 revealed the published pm-ops 2026.9.26 launcher copied here misses incomplete hoisted installs in ancestor node_modules. Canonical source issue ops-jzp5 and unmerged pm-ops #124 already fix and test this path. This PR is blocked until the reviewed source is published, this package pins and copies its new template byte for byte, full release gate and strict health pass, and exact-head bot review repeats. Earlier green CI/Greptile status does not certify this edge case." +files[10]: + - path: .agents/pm/extensions/.managed-extensions.json + scope: project + note: Exact project-scoped pm-github source + - path: .github/workflows/ci.yml + scope: project + note: Exact extension install in CI + - path: .github/workflows/pm-github-sync.yml + scope: project + note: Exact extension install while workflow remains disabled + - path: package-lock.json + scope: project + note: Resolved dependency lock + - path: package.json + scope: project + note: Compatible exact development tool pins + - path: scripts/install-pm-github.sh + scope: project + - path: scripts/prepare-merge-driver.ts + scope: project + note: Published pm-ops 2026.9.28 canonical launcher copy + - path: test/install-pm-github.test.ts + scope: project + - path: test/prepare-merge-driver.test.ts + scope: project + note: Broken directory and dangling link acceptance + - path: test/release-workflow.test.ts + scope: project +tests[5]{command,scope,timeout_seconds,provenance{author,created_at,source_kind,source_ref}}: + "npm run release:check",project,600,codex,"2026-09-27T07:22:23.666Z",local_mutation,fix/pm-graph-github-extension-cli-compat-2026-09-27 + node --test test/prepare-merge-driver.test.ts,project,120,codex,"2026-09-27T07:28:56.044Z",local_mutation,fix/pm-graph-github-extension-cli-compat-2026-09-27 + ./node_modules/.bin/pm health --strict-exit --json,project,120,codex,"2026-09-27T07:35:24.855Z",local_mutation,fix/pm-graph-github-extension-cli-compat-2026-09-27 + node --test test/release-workflow.test.ts,project,120,codex-sol-land,"2026-10-02T21:47:56.173Z",local_mutation,fix/pm-graph-github-extension-cli-compat-2026-09-27 + node --test test/install-pm-github.test.ts,project,120,codex-sol-land,"2026-10-02T22:25:05.974Z",local_mutation,fix/pm-graph-github-extension-cli-compat-2026-09-27 +docs[4]: + - path: "https://github.com/unbraind/pm-cli-companion/blob/main/.agents/pm/features/pm-cli-website-377e.toon" + scope: global + note: Fleet GitHub sync rollout + - path: "https://github.com/unbraind/pm-ops/blob/main/.agents/pm/issues/ops-jzp5.toon" + scope: global + note: Canonical hoisted broken-install source issue + - path: "https://github.com/unbraind/pm-ops/pull/124" + scope: global + note: Canonical source of the already-published pm-ops 2026.9.28 hoisted-install fix + - path: "https://github.com/unbraind/pm-graph/pull/116" + scope: project +body: "" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e10074f4..f178f3dd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,25 +39,7 @@ jobs: - name: Install project pm-github extension shell: bash - run: | - set -euo pipefail - # npm 12 emits object-shaped `npm pack --json` output, while the - # current pm installer accepts npm 10's array-shaped response. - npm10_root="${RUNNER_TEMP}/pm-npm10" - npm install --prefix "${npm10_root}" --no-save --ignore-scripts npm@10.9.3 - PATH="${npm10_root}/node_modules/.bin:${PATH}" ./node_modules/.bin/pm install npm:pm-github --project - # The published 2026.8.18 artifact still carries the obsolete `pm` - # manifest key. Normalize it to the source manifest's enforced floor - # before the strict health gate; the installed artifact is ignored. - extension_manifest=".agents/pm/extensions/pm-github/manifest.json" - jq 'del(.pm) | .pm_min_version = "2026.8.20"' "${extension_manifest}" > "${RUNNER_TEMP}/pm-github-manifest.json" - mv "${RUNNER_TEMP}/pm-github-manifest.json" "${extension_manifest}" - managed_registry=".agents/pm/extensions/.managed-extensions.json" - if git ls-files --error-unmatch "${managed_registry}" > /dev/null 2>&1; then - git restore -- "${managed_registry}" - else - rm -f "${managed_registry}" - fi + run: bash scripts/install-pm-github.sh - name: Verify tracked pm project health shell: bash diff --git a/.github/workflows/pm-github-sync.yml b/.github/workflows/pm-github-sync.yml index 15f29847..a962f9f7 100644 --- a/.github/workflows/pm-github-sync.yml +++ b/.github/workflows/pm-github-sync.yml @@ -15,6 +15,8 @@ concurrency: jobs: sync: + # Imported issue bodies need a fail-closed pre-push privacy gate first. + if: ${{ false }} runs-on: ubuntu-latest env: GH_TOKEN: ${{ github.token }} @@ -54,24 +56,7 @@ jobs: - name: Install project pm-github extension shell: bash - run: | - set -euo pipefail - # npm 12 emits object-shaped `npm pack --json` output, while the - # current pm installer accepts npm 10's array-shaped response. - npm10_root="${RUNNER_TEMP}/pm-npm10" - npm install --prefix "${npm10_root}" --no-save --ignore-scripts npm@10.9.3 - PATH="${npm10_root}/node_modules/.bin:${PATH}" ./node_modules/.bin/pm install npm:pm-github --project - # The published 2026.8.18 artifact still carries the obsolete `pm` - # manifest key. Normalize it to the source manifest's enforced floor. - extension_manifest=".agents/pm/extensions/pm-github/manifest.json" - jq 'del(.pm) | .pm_min_version = "2026.8.20"' "${extension_manifest}" > "${RUNNER_TEMP}/pm-github-manifest.json" - mv "${RUNNER_TEMP}/pm-github-manifest.json" "${extension_manifest}" - managed_registry=".agents/pm/extensions/.managed-extensions.json" - if git ls-files --error-unmatch "${managed_registry}" > /dev/null 2>&1; then - git restore -- "${managed_registry}" - else - rm -f "${managed_registry}" - fi + run: bash scripts/install-pm-github.sh - name: Validate GitHub access run: ./node_modules/.bin/pm github validate --repo "${REPOSITORY}" diff --git a/package-lock.json b/package-lock.json index 9b07abd8..30546770 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,12 +15,12 @@ "@babel/eslint-parser": "^8.0.5", "@babel/plugin-syntax-typescript": "^8.0.3", "@types/node": "^26.2.0", - "@unbrained/pm-cli": "2026.9.23", + "@unbrained/pm-cli": "2026.9.27", "eslint": "^10.10.0", "fast-glob": "^3.3.3", "jscpd": "^4.3.0", - "pm-changelog": "2026.9.23", - "pm-ops": "2026.9.23", + "pm-changelog": "2026.9.25", + "pm-ops": "2026.9.28", "typescript": "^7.0.2" }, "engines": { @@ -823,9 +823,9 @@ } }, "node_modules/@sentry/core": { - "version": "10.75.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.75.0.tgz", - "integrity": "sha512-5wDQpQqjJ6RHdPR+z6Q+47XlwoxRKBv0yyB0LKHqL/1azPOQbR+nllyLmmQDcoJpaksuLSmLA1q6hFX7gjDT2w==", + "version": "10.75.1", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.75.1.tgz", + "integrity": "sha512-+/+UanewqPK+oJvDQIHWKLUqnsa0iymEThOPCaFBA8ulbQh9k8lsz8V+NtJwP4G3ncclfzp15tzqVwn6iugV4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -836,9 +836,9 @@ } }, "node_modules/@sentry/node": { - "version": "10.75.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-10.75.0.tgz", - "integrity": "sha512-XdYW+SEiscQnuugh1hMldfnHurmleKSTSDqgfro6Y1yd7s0r2csnZ5/SEYxIeL4lSl1QXg1lIA1pBmAXjcdnKA==", + "version": "10.75.1", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-10.75.1.tgz", + "integrity": "sha512-qiWGwh0KiBoq4vEl0FbxFKw0xnOKxuKCaEVdtwMZLAGw1ef77NOCdie7e/Fmcsk9c++Ck4D8NmIjQm6BidRVSQ==", "dev": true, "license": "MIT", "dependencies": { @@ -846,10 +846,10 @@ "@opentelemetry/instrumentation": "^0.220.0", "@opentelemetry/sdk-trace-base": "^2.9.0", "@sentry/conventions": "^0.16.0", - "@sentry/core": "10.75.0", - "@sentry/node-core": "10.75.0", - "@sentry/opentelemetry": "10.75.0", - "@sentry/server-utils": "10.75.0", + "@sentry/core": "10.75.1", + "@sentry/node-core": "10.75.1", + "@sentry/opentelemetry": "10.75.1", + "@sentry/server-utils": "10.75.1", "import-in-the-middle": "^3.0.0" }, "engines": { @@ -857,15 +857,15 @@ } }, "node_modules/@sentry/node-core": { - "version": "10.75.0", - "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-10.75.0.tgz", - "integrity": "sha512-+E3KSX1oMqhpWQ23hj6NblIVUzLy3T2oceU7DfMX1s1ar+npaQZxR5K0/cMGcQgS1LLm8Jqwqo/lrZlKTCDm5A==", + "version": "10.75.1", + "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-10.75.1.tgz", + "integrity": "sha512-HR0Iy7oNFOP26cwaRi33ZZnvlUSMFzXbZoRgYtBAkqUHDNQA6LWG1N1OoIdKNRJzDkGu/zefbM50Amqgyy1u1Q==", "dev": true, "license": "MIT", "dependencies": { "@sentry/conventions": "^0.16.0", - "@sentry/core": "10.75.0", - "@sentry/opentelemetry": "10.75.0", + "@sentry/core": "10.75.1", + "@sentry/opentelemetry": "10.75.1", "import-in-the-middle": "^3.0.0" }, "engines": { @@ -897,14 +897,14 @@ } }, "node_modules/@sentry/opentelemetry": { - "version": "10.75.0", - "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-10.75.0.tgz", - "integrity": "sha512-reJoMtuHMuaiztoDVoaeitc22eHlTAvz2qpFhibWyzukJlF8oXB+o8EvDN9mmDDMedU89c//cXRcnPBlJvUxcw==", + "version": "10.75.1", + "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-10.75.1.tgz", + "integrity": "sha512-leRKyFkEgV47Qo2wKCMEIYxPgnp67C+wYFg0GPreX5owRde0l18F5BEmsYUU57WAjBKBDo2idrrEEQaU15uH8g==", "dev": true, "license": "MIT", "dependencies": { "@sentry/conventions": "^0.16.0", - "@sentry/core": "10.75.0" + "@sentry/core": "10.75.1" }, "engines": { "node": ">=18" @@ -916,14 +916,14 @@ } }, "node_modules/@sentry/server-utils": { - "version": "10.75.0", - "resolved": "https://registry.npmjs.org/@sentry/server-utils/-/server-utils-10.75.0.tgz", - "integrity": "sha512-7fIa9vFGNzB13hmxl8Sip3xImSkqpc4wETzuQ7CLzVOwPvwI6y/gVEm0pxRhtJSq8SzfOp26eJWl80u8v78Osg==", + "version": "10.75.1", + "resolved": "https://registry.npmjs.org/@sentry/server-utils/-/server-utils-10.75.1.tgz", + "integrity": "sha512-HuA/bCtthA5x/AjYD5WUbG6CBcYJb0WAWKNgrgNkUWtll6eMqG3+7LO4PBcGRbZtlg1OFgClJm4iQFgRN7+ZZg==", "dev": true, "license": "MIT", "dependencies": { "@sentry/conventions": "^0.16.0", - "@sentry/core": "10.75.0" + "@sentry/core": "10.75.1" }, "engines": { "node": ">=18" @@ -1331,13 +1331,13 @@ } }, "node_modules/@unbrained/pm-cli": { - "version": "2026.9.23", - "resolved": "https://registry.npmjs.org/@unbrained/pm-cli/-/pm-cli-2026.9.23.tgz", - "integrity": "sha512-tL1u+NDa6UkJyJaJR3j7noqi6byFlQdgWSZsFDG/k6k31LTBCQJNfX42EhgBE8kR100O61DleJSaMCtPq+LT9g==", + "version": "2026.9.27", + "resolved": "https://registry.npmjs.org/@unbrained/pm-cli/-/pm-cli-2026.9.27.tgz", + "integrity": "sha512-l7m3GIm50oMecjXYnzA+RuzHgFD/uAOZko3eRJXfT+pYV9pceh4xvJ9dbD+35p2mY/zvUNiZjggCOOrWVuswSA==", "dev": true, "license": "MIT", "dependencies": { - "@sentry/node": "10.75.0", + "@sentry/node": "10.75.1", "@toon-format/toon": "^4.1.1", "@types/node": ">=22", "commander": "^15.0.0", @@ -3242,9 +3242,9 @@ } }, "node_modules/pm-changelog": { - "version": "2026.9.23", - "resolved": "https://registry.npmjs.org/pm-changelog/-/pm-changelog-2026.9.23.tgz", - "integrity": "sha512-hrHFbRgz/LyiCBN9ic0I1C//SRL/zjU5fxcyCeCAnM2qTrz14A7f9ayMXeiu/ChDkVFMxfz8Ps2j3TuUG6K1QA==", + "version": "2026.9.25", + "resolved": "https://registry.npmjs.org/pm-changelog/-/pm-changelog-2026.9.25.tgz", + "integrity": "sha512-j2l97jlJIfuMiB7KDi7oIr9MWxdQvqnDx/JwE3pxC31fDw3MywnSmaTcE9/gV6sVlZbQkOSxnxooHzDwRo+1+g==", "dev": true, "license": "MIT", "bin": { @@ -3258,9 +3258,9 @@ } }, "node_modules/pm-ops": { - "version": "2026.9.23", - "resolved": "https://registry.npmjs.org/pm-ops/-/pm-ops-2026.9.23.tgz", - "integrity": "sha512-FglZHOXjsuG8WWf9Ca90/IX1u4ZCxVTvHpwMaiA0TAWBx/lLalM2Ic12gtWZvm3OAJsMMuXvfRBHWxwYLzESsg==", + "version": "2026.9.28", + "resolved": "https://registry.npmjs.org/pm-ops/-/pm-ops-2026.9.28.tgz", + "integrity": "sha512-MjsVk6uGYz8X3OxVuBHuBUEjcoUb3ubqSCG/hWvYOlj8AI8gbc3IPsIUGfDECH6WYP63B8hYjvc6Ahv3DdbIyQ==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 139e6979..c04316fa 100644 --- a/package.json +++ b/package.json @@ -34,12 +34,12 @@ "@babel/eslint-parser": "^8.0.5", "@babel/plugin-syntax-typescript": "^8.0.3", "@types/node": "^26.2.0", - "@unbrained/pm-cli": "2026.9.23", + "@unbrained/pm-cli": "2026.9.27", "eslint": "^10.10.0", "fast-glob": "^3.3.3", "jscpd": "^4.3.0", - "pm-changelog": "2026.9.23", - "pm-ops": "2026.9.23", + "pm-changelog": "2026.9.25", + "pm-ops": "2026.9.28", "typescript": "^7.0.2" }, "files": [ diff --git a/scripts/install-pm-github.sh b/scripts/install-pm-github.sh new file mode 100644 index 00000000..d733b9f2 --- /dev/null +++ b/scripts/install-pm-github.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +# Install the same verified project extension in CI and the disabled sync job. +set -euo pipefail + +pm_github_version=2026.9.26 +./node_modules/.bin/pm package install "npm:pm-github@${pm_github_version}" --project +node -e 'if (require("./.agents/pm/extensions/pm-github/package.json").version !== process.argv[1]) process.exit(1)' "${pm_github_version}" + +managed_registry=".agents/pm/extensions/.managed-extensions.json" +if git ls-files --error-unmatch "${managed_registry}" > /dev/null 2>&1; then + git restore -- "${managed_registry}" +else + rm -f "${managed_registry}" +fi diff --git a/scripts/prepare-merge-driver.ts b/scripts/prepare-merge-driver.ts index 66e512e9..728ece4a 100644 --- a/scripts/prepare-merge-driver.ts +++ b/scripts/prepare-merge-driver.ts @@ -7,13 +7,15 @@ * therefore imports nothing from pm-ops: it resolves the installer entry from * the package root and runs it in a child process. Only a missing pm-ops package skips, with one * notice; any other resolution failure (for example a pm-ops too old to export - * the entry) and any installer failure fail the install. + * the entry, or a `pm-ops` directory whose package.json is gone) and any + * installer failure fail the install. * * Canonical copy: `pm-ops/templates/prepare-merge-driver.ts`. Copy it * unchanged to `scripts/prepare-merge-driver.ts`. */ import { spawnSync } from "node:child_process"; +import { lstatSync } from "node:fs"; import { createRequire } from "node:module"; import { join } from "node:path"; @@ -26,12 +28,20 @@ try { // Only an absent pm-ops package may skip. Probing its package.json tells that // apart from an installed pm-ops that cannot serve the entry (exports without // it, no exports map, a missing file): those resolve or fail differently, and - // the original error is rethrown. + // the original error is rethrown. A probe that finds no package.json is not + // yet proof of absence: a broken install can leave `node_modules/pm-ops` (a + // directory or a dangling link) with no package.json in any ancestor Node + // searches. Such an entry also counts as present. Node returns null paths + // only for built-in modules; pm-ops/package.json is a package specifier. let packagePresent = true; try { resolver.resolve("pm-ops/package.json"); } catch (probe) { - packagePresent = !(probe instanceof Error && "code" in probe && probe.code === "MODULE_NOT_FOUND"); + packagePresent = + !(probe instanceof Error && "code" in probe && probe.code === "MODULE_NOT_FOUND") || + resolver.resolve.paths("pm-ops/package.json")!.some( + (directory) => lstatSync(join(directory, "pm-ops"), { throwIfNoEntry: false }) !== undefined, + ); } if (packagePresent) throw error; } diff --git a/test/install-pm-github.test.ts b/test/install-pm-github.test.ts new file mode 100644 index 00000000..e1d486dc --- /dev/null +++ b/test/install-pm-github.test.ts @@ -0,0 +1,80 @@ +/** Exercises the shared CI installer against real Git state and a controlled package installer. */ +import assert from "node:assert/strict"; +import { spawnSync } from "node:child_process"; +import { chmodSync, mkdirSync, mkdtempSync, readFileSync, writeFileSync, rmSync } from "node:fs"; +import { tmpdir } from "node:os"; +import { join } from "node:path"; +import test, { type TestContext } from "node:test"; + +const installer = join(process.cwd(), "scripts/install-pm-github.sh"); +const registry = ".agents/pm/extensions/.managed-extensions.json"; +const managed = JSON.parse(readFileSync(registry, "utf8")) as { entries: { name: string; source: { input: string } }[] }; +const expectedSource = managed.entries.find((entry) => entry.name === "pm-github")!.source.input; +const expectedVersion = expectedSource.slice("npm:pm-github@".length); + +/** Builds a fixture that records argv and mutates only its own registry and package metadata. */ +function fixture(t: TestContext, tracked: boolean): string { + const directory = mkdtempSync(join(tmpdir(), "graph-github-install-")); + t.after(() => rmSync(directory, { recursive: true, force: true })); + mkdirSync(join(directory, "node_modules/.bin"), { recursive: true }); + mkdirSync(join(directory, ".agents/pm/extensions"), { recursive: true }); + assert.equal(spawnSync("git", ["init", "-q"], { cwd: directory }).status, 0); + if (tracked) { + writeFileSync(join(directory, registry), "original registry\n"); + assert.equal(spawnSync("git", ["add", registry], { cwd: directory }).status, 0); + } + const fakePm = join(directory, "node_modules/.bin/pm"); + writeFileSync(fakePm, `#!/usr/bin/env bash +set -euo pipefail +printf '%s\\n' "$@" > installer-argv.txt +if [ "\${FIXTURE_INSTALL_FAIL:-0}" != 0 ]; then exit "$FIXTURE_INSTALL_FAIL"; fi +mkdir -p .agents/pm/extensions/pm-github +printf '{"version":"%s"}\\n' "$FIXTURE_INSTALLED_VERSION" > .agents/pm/extensions/pm-github/package.json +printf 'installer registry\\n' > .agents/pm/extensions/.managed-extensions.json +`); + chmodSync(fakePm, 0o755); + return directory; +} + +/** Runs the actual shared installer while controlling only the fixture dependency's response. */ +function install(directory: string, version = expectedVersion, fail = "0") { + return spawnSync("bash", [installer], { + cwd: directory, + encoding: "utf8", + env: { ...process.env, FIXTURE_INSTALLED_VERSION: version, FIXTURE_INSTALL_FAIL: fail }, + }); +} + +test("both Ubuntu workflows use the one tested extension installer", () => { + for (const path of [".github/workflows/ci.yml", ".github/workflows/pm-github-sync.yml"]) { + const workflow = readFileSync(path, "utf8"); + assert.match(workflow, /run: bash scripts\/install-pm-github\.sh/); + assert.doesNotMatch(workflow, /pm package install npm:pm-github@/); + } +}); + +test("the pinned install restores a tracked registry byte for byte", (t) => { + const directory = fixture(t, true); + const result = install(directory); + assert.equal(result.status, 0, result.stderr); + assert.equal(readFileSync(join(directory, "installer-argv.txt"), "utf8"), `package\ninstall\n${expectedSource}\n--project\n`); + assert.equal(readFileSync(join(directory, registry), "utf8"), "original registry\n"); +}); + +test("the installer removes its transient untracked registry", (t) => { + const directory = fixture(t, false); + assert.equal(install(directory).status, 0); + assert.throws(() => readFileSync(join(directory, registry)), { code: "ENOENT" }); +}); + +test("a mismatched installed version fails before restoring the registry", (t) => { + const directory = fixture(t, true); + assert.equal(install(directory, "0.0.0").status, 1); + assert.equal(readFileSync(join(directory, registry), "utf8"), "installer registry\n"); +}); + +test("installer failure propagates without a package version probe", (t) => { + const directory = fixture(t, false); + assert.equal(install(directory, expectedVersion, "9").status, 9); + assert.throws(() => readFileSync(join(directory, "./.agents/pm/extensions/pm-github/package.json")), { code: "ENOENT" }); +}); diff --git a/test/prepare-merge-driver.test.ts b/test/prepare-merge-driver.test.ts index c3bb230f..8ebadf82 100644 --- a/test/prepare-merge-driver.test.ts +++ b/test/prepare-merge-driver.test.ts @@ -33,9 +33,10 @@ const declaredDrivers = [ * Create a consumer checkout: a fresh Git repository carrying this * repository's `.gitattributes` and tracker settings. `pmOps` selects what * `node_modules/pm-ops` is: absent (an omit-dev install), the pinned package, - * or a stale pm-ops whose exports predate the launcher entry. + * a stale pm-ops whose exports predate the launcher entry, or a broken + * extraction/link without package.json. */ -function checkout(name: string, pmOps: "absent" | "pinned" | "stale"): string { +function checkout(name: string, pmOps: "absent" | "pinned" | "stale" | "broken" | "dangling"): string { const directory = join(scratch, name); mkdirSync(join(directory, ".agents", "pm"), { recursive: true }); assert.equal(spawnSync("git", ["init", "-q"], { cwd: directory }).status, 0); @@ -53,6 +54,11 @@ function checkout(name: string, pmOps: "absent" | "pinned" | "stale"): string { JSON.stringify({ name: "pm-ops", type: "module", exports: { "./merge-driver": "./merge-driver.js" } }), ); } + if (pmOps === "broken") mkdirSync(join(directory, "node_modules", "pm-ops"), { recursive: true }); + if (pmOps === "dangling") { + mkdirSync(join(directory, "node_modules")); + symlinkSync(join(directory, "missing-pm-ops"), join(directory, "node_modules", "pm-ops"), "dir"); + } return directory; } @@ -109,6 +115,16 @@ test("a pm-ops too old to export the launcher entry fails the install", posixOnl assert.match(result.stderr, /ERR_PACKAGE_PATH_NOT_EXPORTED/); }); +test("broken pm-ops directory and dangling link fail without skipping merge drivers", posixOnly, () => { + for (const kind of ["broken", "dangling"] as const) { + const directory = checkout(kind, kind); + const result = prepare(directory, hostPath); + assert.notEqual(result.status, 0, `${kind}: ${result.stderr}`); + assert.doesNotMatch(result.stderr, /skipping merge-driver install/); + assert.deepEqual(registeredDrivers(directory), []); + } +}); + test("a failing pm merge install fails the install with the same status", posixOnly, () => { const result = prepare(checkout("failing-pm", "pinned"), stubPm("failing-pm", 7)); assert.equal(result.status, 7, result.stderr);