diff --git a/.agents/pm/extensions/.managed-extensions.json b/.agents/pm/extensions/.managed-extensions.json index ccff33c79..dcd26d5b7 100644 --- a/.agents/pm/extensions/.managed-extensions.json +++ b/.agents/pm/extensions/.managed-extensions.json @@ -1,12 +1,12 @@ { "version": 1, - "updated_at": "2026-09-09T01:11:38.001Z", + "updated_at": "2026-09-09T18:42:47.461Z", "entries": [ { "name": "pm-changelog", "directory": "pm-changelog", "scope": "project", - "manifest_version": "2026.9.8", + "manifest_version": "2026.9.9", "manifest_entry": "./dist/extension.js", "capabilities": [ "commands", @@ -68,13 +68,13 @@ "preflight_ownership": [] }, "installed_at": "2026-05-23T20:26:03.509Z", - "updated_at": "2026-09-08T08:52:58.389Z", + "updated_at": "2026-09-09T16:45:53.335Z", "source": { "kind": "npm", "input": "npm:pm-changelog", "location": "package", "package": "pm-changelog", - "version": "2026.9.8" + "version": "2026.9.9" } } ] diff --git a/.agents/pm/history/pm-3i9q8g.jsonl b/.agents/pm/history/pm-3i9q8g.jsonl index 9fb5796d9..745aac95f 100644 --- a/.agents/pm/history/pm-3i9q8g.jsonl +++ b/.agents/pm/history/pm-3i9q8g.jsonl @@ -3,3 +3,28 @@ {"ts":"2026-08-05T18:08:45.416Z","author":"harness:claude-code","author_source":"detected","agent_harness":"claude-code","agent_model":"claude-opus-5","agent_model_source":"probe","agent_instance":"ac5e22eebf92a6af581282d9","agent_provenance":{"model":{"value":"claude-opus-5","source":"probe"},"effort":{"value":"xhigh","source":"environment"},"role":{"value":"1","source":"environment"},"topic":null,"version":{"value":"2.1.222","source":"probe"}},"op":"update","patch":[{"op":"add","path":"/metadata/dependencies/6","value":{"id":"pm-6apl","kind":"related","created_at":"2026-08-05T18:08:45.316Z","author":"harness:claude-code","source_kind":"cli:update:dep","author_source":"detected"}},{"op":"add","path":"/metadata/dependencies/7","value":{"id":"pm-ez1dfg","kind":"related","created_at":"2026-08-05T18:08:45.316Z","author":"harness:claude-code","source_kind":"cli:update:dep","author_source":"detected"}},{"op":"add","path":"/metadata/dependencies/8","value":{"id":"pm-qljv","kind":"related","created_at":"2026-08-05T18:08:45.316Z","author":"harness:claude-code","source_kind":"cli:update:dep","author_source":"detected"}},{"op":"add","path":"/metadata/dependencies/9","value":{"id":"pm-tqel","kind":"related","created_at":"2026-08-05T18:08:45.316Z","author":"harness:claude-code","source_kind":"cli:update:dep","author_source":"detected"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-08-05T18:08:45.416Z"}],"before_hash":"3a98f981bdf64416a5c60c915a206aa6ceab797412950d0082bc34ee46446bbc","after_hash":"ec67fbf013159dba869a502c8215c368acf137c6cda2d1f1f89ebbe9d84fea33","message":"Ops and history-family neighbours"} {"ts":"2026-08-14T10:14:38.784Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_instance":"1c223b8f3e70d83c3c8536ed","agent_provenance":{"model":null,"effort":null,"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-m08hza","lineage:pm-m08hza","lineage:pm-m2u1","lineage:pm-doxj"]},"topic":{"value":"pm-m08hza","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-m08hza","lineage:pm-m08hza","lineage:pm-m2u1","lineage:pm-doxj"]}},"op":"update","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-08-14T10:14:38.784Z"},{"op":"replace","path":"/metadata/description","value":"Place normalize and reindex under the diagnostics and maintenance noun, and reconcile events with the canonical history and activity read surface. Preserve existing spellings as hidden aliases so consolidation reduces discovery cost without removing shell or automation compatibility."}],"before_hash":"ec67fbf013159dba869a502c8215c368acf137c6cda2d1f1f89ebbe9d84fea33","after_hash":"89bb6b81b03eb9ad6382c86e682caa2fc823999cb32ed42dca7ab035f8125109","item_hash_version":2,"message":"Backfill command-destination task description"} {"ts":"2026-09-08T13:32:41.149Z","author":"harness:claude-code","author_source":"detected","agent_harness":"claude-code","agent_model":"claude-fable-5-1","agent_model_source":"probe","agent_instance":"72ded8f654edba84116a543f","agent_provenance":{"model":{"value":"claude-fable-5-1","source":"probe"},"effort":{"value":"xhigh","source":"environment"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-n8a6e7","lineage:pm-n8a6e7","lineage:pm-ydp6","lineage:pm-doxj"]},"topic":{"value":"pm-n8a6e7","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-n8a6e7","lineage:pm-n8a6e7","lineage:pm-ydp6","lineage:pm-doxj"]},"version":{"value":"2.1.263","source":"probe"}},"op":"update","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-08T13:32:41.149Z"},{"op":"add","path":"/metadata/expected_result","value":"normalize and reindex live under the maintenance noun and events resolves against the history and activity surface, with every current spelling kept as an alias."}],"before_hash":"89bb6b81b03eb9ad6382c86e682caa2fc823999cb32ed42dca7ab035f8125109","after_hash":"1c0c3b05197f8ed836d9b059b41a8da30f5b2f73d21dedab3e2106760612926d","item_hash_version":3,"message":"Record the observable end state this item is expected to produce","event_class":"maintenance","record_hash_version":1,"record_hash":"cd846ce847fdf72d9fad027425513f16280902f91a031d7d718b81d75be4fead"} +{"ts":"2026-09-09T04:08:04.956Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","claim:pm-kcs4","lineage:pm-6apl","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","claim:pm-kcs4","lineage:pm-6apl","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"claim","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:08:04.956Z"},{"op":"add","path":"/metadata/assignee","value":"harness:codex"},{"op":"add","path":"/metadata/claim_principal","value":"harness:codex#64e674a82ebbe431153d7b1d"}],"before_hash":"1c0c3b05197f8ed836d9b059b41a8da30f5b2f73d21dedab3e2106760612926d","after_hash":"bb7bb802831dfd1cd77fd72c170e38328b998f2866d65ff8ce0088d690fa81d5","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"7e225ba82c85f8b26c0884cbae67304ce510f8b1acabcd8ceb19ef6c1c418a67"} +{"ts":"2026-09-09T04:08:05.720Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"update","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:08:05.720Z"},{"op":"replace","path":"/metadata/status","value":"in_progress"}],"before_hash":"bb7bb802831dfd1cd77fd72c170e38328b998f2866d65ff8ce0088d690fa81d5","after_hash":"3a3d20dc4695f237ab61fd4208aa6992d3e28351590b18cb2e3469f494cfe649","item_hash_version":3,"message":"Integrate maintenance and event reads into canonical namespaces","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"6c9d0041d021ffd47b9e3441e15037dad93548257985b936b198a9a58a299c71"} +{"ts":"2026-09-09T04:24:18.293Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"files_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:24:18.293Z"},{"op":"add","path":"/metadata/files","value":[{"path":"src/cli/command-namespaces.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/cli/help-content.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/cli/main.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/agent-capability-contracts.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/agent/item-addressing.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/cli-bootstrap.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/cli-contracts.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/cli-contracts/command-aliases.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/cli-contracts/flag-lexicon-contracts.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/cli-contracts/grammar-contracts.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/cli-contracts/runtime-contracts.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/completion.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/index.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"tests/integration/context-ops-namespace.integration.spec.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"tests/unit/cli/command-namespaces.spec.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"tests/unit/sdk/cli-contracts/grammar-contracts.spec.ts","scope":"project","note":"Shared native namespace contracts and verification"}]}],"before_hash":"3a3d20dc4695f237ab61fd4208aa6992d3e28351590b18cb2e3469f494cfe649","after_hash":"fc8a9339086f6bbce4a0ce635e233e1ef0db8ec5276fe572aaa2358af00607bd","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"cbacdfaf6632cb8367988cd6c017b4c9ed75d1734876b82fdfc347c5cb834d77"} +{"ts":"2026-09-09T04:24:18.940Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"docs_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:24:18.940Z"},{"op":"add","path":"/metadata/docs","value":[{"path":"docs/COMMAND_NAMESPACES.md","scope":"project","note":"Native commands compatibility and package ownership"}]}],"before_hash":"fc8a9339086f6bbce4a0ce635e233e1ef0db8ec5276fe572aaa2358af00607bd","after_hash":"a80451e05075240a97bda6df5689dfca12d3c1296979cdb17f4c54052fcb262b","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"a6b5a3b3f786387fc081c77dddc0e8e27c280d5badc0c953d560f0a5aa9f7f85"} +{"ts":"2026-09-09T04:24:19.603Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"tests_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:24:19.603Z"},{"op":"add","path":"/metadata/tests","value":[{"command":"node scripts/run-tests.mjs test -- tests/unit/cli/command-namespaces.spec.ts tests/unit/sdk/cli-contracts tests/integration/context-ops-namespace.integration.spec.ts","scope":"project","timeout_seconds":240,"provenance":{"author":"harness:codex","created_at":"2026-09-09T04:24:19.565Z","source_kind":"local_mutation","source_ref":"feat/context-ops-command-namespaces"}}]}],"before_hash":"a80451e05075240a97bda6df5689dfca12d3c1296979cdb17f4c54052fcb262b","after_hash":"aed0d0333d4b1a4461ec33f25acfcea81481c7cef1bf0562e15917a8f1084a74","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"60c8011cfae5541952fc1adcfe6addd6d26849a48445384a53fc8db74e98384c"} +{"ts":"2026-09-09T04:24:20.123Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"comment_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:24:20.123Z"},{"op":"add","path":"/metadata/comments","value":[{"created_at":"2026-09-09T04:24:20.123Z","author":"harness:codex","text":"Implementation evidence: native command node placement preserves existing SDK handlers; bootstrap aliases, runtime contracts, capability routing, package availability, positional addressing, and three shell completions share declared mappings. TDD reproduced missing namespace support, then verified native/legacy argv and real isolated tracker reads. Broader quality gates and package acceptance are in progress."}]}],"before_hash":"aed0d0333d4b1a4461ec33f25acfcea81481c7cef1bf0562e15917a8f1084a74","after_hash":"143e92deae0e80a08aba988bd2f822164736b09487a870f691f490d677c25f44","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"79664925f4429a1379ff13393ef30e179639f3768cd756776f0105f6028c7136"} +{"ts":"2026-09-09T04:42:07.697Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"files_add","patch":[{"op":"replace","path":"/metadata/files/15/path","value":"src/sdk/index.ts"},{"op":"replace","path":"/metadata/files/14/path","value":"src/sdk/completion.ts"},{"op":"replace","path":"/metadata/files/13/path","value":"src/sdk/cli-contracts/runtime-contracts.ts"},{"op":"replace","path":"/metadata/files/12/path","value":"src/sdk/cli-contracts/grammar-contracts.ts"},{"op":"replace","path":"/metadata/files/11/path","value":"src/sdk/cli-contracts/flag-lexicon-contracts.ts"},{"op":"replace","path":"/metadata/files/10/path","value":"src/sdk/cli-contracts/command-aliases.ts"},{"op":"replace","path":"/metadata/files/9/path","value":"src/sdk/cli-contracts.ts"},{"op":"replace","path":"/metadata/files/8/path","value":"src/sdk/cli-bootstrap.ts"},{"op":"replace","path":"/metadata/files/7/path","value":"src/sdk/agent/item-addressing.ts"},{"op":"replace","path":"/metadata/files/6/path","value":"src/sdk/agent-capability-contracts.ts"},{"op":"replace","path":"/metadata/files/5/path","value":"src/cli/main.ts"},{"op":"replace","path":"/metadata/files/4/note","value":"Namespace discovery compatibility and release verification"},{"op":"replace","path":"/metadata/files/4/path","value":"src/cli/help-json-payload.ts"},{"op":"replace","path":"/metadata/files/3/path","value":"src/cli/help-content.ts"},{"op":"replace","path":"/metadata/files/2/path","value":"src/cli/command-namespaces.ts"},{"op":"replace","path":"/metadata/files/1/note","value":"Namespace discovery compatibility and release verification"},{"op":"replace","path":"/metadata/files/1/path","value":"sdk/public-surface.json"},{"op":"replace","path":"/metadata/files/0/note","value":"Namespace discovery compatibility and release verification"},{"op":"replace","path":"/metadata/files/0/path","value":"scripts/release/flag-invocation-parity.mjs"},{"op":"add","path":"/metadata/files/16","value":{"path":"tests/fixtures/contracts/full.json","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/files/17","value":{"path":"tests/integration/context-ops-namespace.integration.spec.ts","scope":"project","note":"Shared native namespace contracts and verification"}},{"op":"add","path":"/metadata/files/18","value":{"path":"tests/integration/contract-command-enumeration.integration.spec.ts","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/files/19","value":{"path":"tests/integration/help-runtime.spec.ts","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/files/20","value":{"path":"tests/integration/release-readiness-runtime.spec.ts","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/files/21","value":{"path":"tests/unit/cli/command-namespaces.spec.ts","scope":"project","note":"Shared native namespace contracts and verification"}},{"op":"add","path":"/metadata/files/22","value":{"path":"tests/unit/commands/completion-command.spec.ts","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/files/23","value":{"path":"tests/unit/commands/contracts-command.spec.ts","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/files/24","value":{"path":"tests/unit/sdk/cli-contracts/grammar-contracts.spec.ts","scope":"project","note":"Shared native namespace contracts and verification"}},{"op":"add","path":"/metadata/files/25","value":{"path":"tests/unit/sdk/contracts-full-projection.spec.ts","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:42:07.697Z"}],"before_hash":"143e92deae0e80a08aba988bd2f822164736b09487a870f691f490d677c25f44","after_hash":"edae8017273aea017f022617967fa7f39f6ddc1cb9ad21304474cb56f1adb4cc","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"e14fd0e87ac03ab925564528cb70452dbc5530f4289f581547a55afa8d313e07"} +{"ts":"2026-09-09T04:42:08.378Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"docs_add","patch":[{"op":"add","path":"/metadata/docs/1","value":{"path":"docs/generated/AGENT_CAPABILITY_ROUTING.md","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/docs/2","value":{"path":"docs/generated/AGENT_COMMAND_SURFACE.md","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/docs/3","value":{"path":"docs/generated/FLAG_LEXICON_BUDGETS.md","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/docs/4","value":{"path":"docs/README.md","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/docs/5","value":{"path":"packages/pm-governance-audit/README.md","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/docs/6","value":{"path":"packages/pm-search-advanced/README.md","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:42:08.378Z"}],"before_hash":"edae8017273aea017f022617967fa7f39f6ddc1cb9ad21304474cb56f1adb4cc","after_hash":"fce5bd7b177f04cfe1079d52b003b8fc1d3384e575ec45777303027f549faf5b","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"b19005df9f68c0870f0dc7ce600b24b5e03655fb537135a204c204ac74383524"} +{"ts":"2026-09-09T04:42:08.994Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/1","value":{"created_at":"2026-09-09T04:42:08.994Z","author":"harness:codex","text":"Verification update: focused native/legacy and help/contract suite exercised 271 cases; 270 passed and one obsolete package-hint expectation was corrected. Native JSON help now retains optional-package installation recovery. GitHub live inventory found no open issues or PRs and no open Dependabot/code-scanning/secret-scanning alerts. Full coverage and static gates must finish before closure."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:42:08.994Z"}],"before_hash":"fce5bd7b177f04cfe1079d52b003b8fc1d3384e575ec45777303027f549faf5b","after_hash":"58b9af035a6c47fa995a3be5d33189fbd73ac805d70832371d2b122395c56e7e","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"03dadc547e5c6aba321acdf21f1f44ca5da66f6375fb133a8d6dfa2f51135234"} +{"ts":"2026-09-09T04:56:37.711Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/2","value":{"created_at":"2026-09-09T04:56:37.711Z","author":"harness:codex","text":"Manual acceptance passed in a disposable workspace using real search-advanced and governance-audit packages: ops reindex keyword refresh, ops normalize dry-run, five native/legacy JSON output comparisons, focus persistence and history verification. Scoped native contract reads now include the package descriptor; unavailable native JSON help includes package installation recovery."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:56:37.711Z"}],"before_hash":"58b9af035a6c47fa995a3be5d33189fbd73ac805d70832371d2b122395c56e7e","after_hash":"e7f7afa5e0dd21b98ea9c432aefcfc84578e1560eb917b21d94e60fa068c0748","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"27efdac801e4ead5e273cb16a226044b1667af0b25c29a21fc584adbe4327990"} +{"ts":"2026-09-09T05:12:18.117Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"files_add","patch":[{"op":"replace","path":"/metadata/files/25/note","value":"Shared native namespace contracts and verification"},{"op":"replace","path":"/metadata/files/25/path","value":"tests/unit/sdk/cli-contracts/grammar-contracts.spec.ts"},{"op":"replace","path":"/metadata/files/24/note","value":"Namespace discovery compatibility and release verification"},{"op":"replace","path":"/metadata/files/24/path","value":"tests/unit/commands/contracts-command.spec.ts"},{"op":"replace","path":"/metadata/files/23/path","value":"tests/unit/commands/completion-command.spec.ts"},{"op":"replace","path":"/metadata/files/22/note","value":"Shared native namespace contracts and verification"},{"op":"replace","path":"/metadata/files/22/path","value":"tests/unit/cli/command-namespaces.spec.ts"},{"op":"replace","path":"/metadata/files/21/note","value":"Namespace discovery compatibility and release verification"},{"op":"replace","path":"/metadata/files/21/path","value":"tests/integration/release-readiness-runtime.spec.ts"},{"op":"replace","path":"/metadata/files/20/path","value":"tests/integration/help-runtime.spec.ts"},{"op":"replace","path":"/metadata/files/19/path","value":"tests/integration/contract-command-enumeration.integration.spec.ts"},{"op":"replace","path":"/metadata/files/18/note","value":"Shared native namespace contracts and verification"},{"op":"replace","path":"/metadata/files/18/path","value":"tests/integration/context-ops-namespace.integration.spec.ts"},{"op":"replace","path":"/metadata/files/17/note","value":"Exercise real source handlers through shared output capture for truthful CLI coverage"},{"op":"replace","path":"/metadata/files/17/path","value":"tests/helpers/cliRunner.ts"},{"op":"add","path":"/metadata/files/26","value":{"path":"tests/unit/sdk/contracts-full-projection.spec.ts","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:12:18.117Z"}],"before_hash":"e7f7afa5e0dd21b98ea9c432aefcfc84578e1560eb917b21d94e60fa068c0748","after_hash":"e77dd32bf09db1d0224f240376be4053acbde2a4e0a5ddc5052b7426d8a99468","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"a92872f1cc93a4ff978d3c907a47a065d2d9845cc6b7f98f34773a1413d227d1"} +{"ts":"2026-09-09T05:15:08.362Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"test_run_track","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:15:08.362Z"},{"op":"add","path":"/metadata/test_runs","value":[{"run_id":"test-local-mttn9v3o-jfup1e","kind":"test","status":"passed","started_at":"2026-09-09T05:14:48.527Z","finished_at":"2026-09-09T05:15:08.340Z","recorded_at":"2026-09-09T05:15:08.340Z","passed":1,"failed":0,"skipped":0,"executions":[{"command":"node scripts/run-tests.mjs test -- tests/unit/cli/command-namespaces.spec.ts tests/unit/sdk/cli-contracts tests/integration/context-ops-namespace.integration.spec.ts","requested_pm_context_mode":"schema","pm_context_mode":"schema","workspace_context_mode":"source","trust_reason":"local_source_ref"}]}]}],"before_hash":"e77dd32bf09db1d0224f240376be4053acbde2a4e0a5ddc5052b7426d8a99468","after_hash":"d6b2ec562963d20707211ade9bc65117b7254b6abd00d0a9dccef5886ef12324","item_hash_version":3,"message":"Track test run summary (test-local-mttn9v3o-jfup1e)","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"fd27e6bcd91a57de617a921a45ff88d892d3ca075a1a238204fcbabb1f136b88"} +{"ts":"2026-09-09T05:15:39.214Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/3","value":{"created_at":"2026-09-09T05:15:39.213Z","author":"harness:codex","text":"Verification: linked sandbox-safe suite passed 42 tests across 8 files. Real search-advanced reindex and governance-audit normalize dry-run succeeded after package installation in an isolated workspace. Native and legacy JSON/help contracts, missing-provider recovery hints, default item history, and history events passed. Independent npm/Bun tarball installs resolved both public SDK entrypoints and native command paths."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:15:39.214Z"}],"before_hash":"d6b2ec562963d20707211ade9bc65117b7254b6abd00d0a9dccef5886ef12324","after_hash":"afc48f7cf7c3a7c79d204941562484104b694904df9a590cde9f7c90fab6f90f","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"fa5ab0fe22eab35362dc434fe4bf94c85f1ece5f5298382859b83b8c4da274c5"} +{"ts":"2026-09-09T05:19:58.494Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"learning_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:19:58.494Z"},{"op":"add","path":"/metadata/learnings","value":[{"created_at":"2026-09-09T05:19:58.494Z","author":"harness:codex","text":"Install namespace placement after package registration, move the existing Commander node, and resolve contracts through the stable operation identity. This preserves optional package boundaries and avoids cloned handler/parser drift."}]}],"before_hash":"afc48f7cf7c3a7c79d204941562484104b694904df9a590cde9f7c90fab6f90f","after_hash":"d7b8be4420b9cb9f1f35b3a28f4f65e5c087aeb31fd0b2937b0cb8ad3ef8a105","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"14201ba33e7982262a61bb0d46adf429dc235b7dcbb73564a82e36cfd5dfdf44"} +{"ts":"2026-09-09T05:23:15.296Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"docs_add","patch":[{"op":"replace","path":"/metadata/docs/6/path","value":"packages/pm-governance-audit/README.md"},{"op":"replace","path":"/metadata/docs/5/path","value":"docs/README.md"},{"op":"replace","path":"/metadata/docs/4/path","value":"docs/generated/FLAG_LEXICON_BUDGETS.md"},{"op":"replace","path":"/metadata/docs/3/path","value":"docs/generated/AGENT_COMMAND_SURFACE.md"},{"op":"replace","path":"/metadata/docs/2/path","value":"docs/generated/AGENT_CAPABILITY_ROUTING.md"},{"op":"replace","path":"/metadata/docs/1/note","value":"Native commands compatibility and package ownership"},{"op":"replace","path":"/metadata/docs/1/path","value":"docs/COMMAND_NAMESPACES.md"},{"op":"replace","path":"/metadata/docs/0/note","value":"Package-generated reviewed delivery attribution"},{"op":"replace","path":"/metadata/docs/0/path","value":"CHANGELOG.md"},{"op":"add","path":"/metadata/docs/7","value":{"path":"packages/pm-search-advanced/README.md","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:23:15.296Z"}],"before_hash":"d7b8be4420b9cb9f1f35b3a28f4f65e5c087aeb31fd0b2937b0cb8ad3ef8a105","after_hash":"f2225a802bc8d70c3da6e39ef7b8e038c71d5633aabf9c4778546a05b85b0f1f","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"c7f0ad1e0e00c213eb614dd1299e877da9648321888fb832d39296303df6f8b3"} +{"ts":"2026-09-09T05:29:24.692Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"release-operator","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","release:pm-6apl"]},"topic":{"value":"pm-3i9q8g","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","release:pm-6apl"]}},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/4","value":{"created_at":"2026-09-09T05:29:24.692Z","author":"harness:codex","text":"Final verification: 8639 tests in 655 files passed; exact coverage 100/100/100/100 with zero uncovered counts (63818 statements, 48528 branches, 13248 functions, 61196 lines). Full static gates and source documentation requirements passed without relaxed thresholds. Linked suites, typecheck, secret scan, native/legacy temporary-workspace acceptance, real package installation, independent npm/Bun SDK consumers, and npx/bunx packed smoke with 13 packages passed. GitHub issue/PR and security alert inventories were clear before opening this delivery PR."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:29:24.692Z"}],"before_hash":"f2225a802bc8d70c3da6e39ef7b8e038c71d5633aabf9c4778546a05b85b0f1f","after_hash":"99680ce10ddad46b9c8f4b3683463bf09fc7fde4e7e0fcd6634f72b8e1975727","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"3000b10ab5e654f42bf30d8ea644819c6df751a4588cc66086f82e0810364fc6"} +{"ts":"2026-09-09T05:29:25.719Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"release-operator","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","release:pm-6apl"]},"topic":{"value":"pm-3i9q8g","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","release:pm-6apl"]}},"op":"close","patch":[{"op":"replace","path":"/metadata/expected_result","value":"Maintenance providers remain optional and keep their existing handlers while native and legacy invocation results agree."},{"op":"remove","path":"/metadata/assignee"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:29:25.719Z"},{"op":"replace","path":"/metadata/status","value":"closed"},{"op":"add","path":"/metadata/closed_at","value":"2026-09-09T05:29:25.659Z"},{"op":"add","path":"/metadata/completed_at","value":"2026-09-09T05:29:25.659Z"},{"op":"add","path":"/metadata/resolution","value":"Delivered package-owned ops normalize and ops reindex plus history events with native discovery and compatibility aliases."},{"op":"add","path":"/metadata/actual_result","value":"All namespace acceptance checks passed; 8639 tests and exact 100/100/100/100 coverage; full static and distribution gates passed."},{"op":"add","path":"/metadata/close_reason","value":"Implementation and verification complete; closure and changelog are included in the reviewed delivery."}],"before_hash":"99680ce10ddad46b9c8f4b3683463bf09fc7fde4e7e0fcd6634f72b8e1975727","after_hash":"e1aaada72d0b11d3518da6760cde8f1dbe5442c84fc21d33478e3941d7e1b152","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"87dc5e6f5482f3e5a2abc01de14ce78127c5fcc0e85bd687b81d88b56d31727d"} +{"ts":"2026-09-09T05:29:26.275Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"release-operator","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","release:pm-6apl"]},"topic":{"value":"pm-3i9q8g","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","release:pm-6apl"]}},"op":"release","patch":[{"op":"remove","path":"/metadata/claim_principal"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:29:26.275Z"}],"before_hash":"e1aaada72d0b11d3518da6760cde8f1dbe5442c84fc21d33478e3941d7e1b152","after_hash":"c28ab5fc79c6165533a526d9f4122f1226fed51aa6be6009117d26a9cbb81271","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"54fa52369e9c85be7c6c738cedcf6fbf4fe1bf38cdcee34a53663ffcc2b1ec3e"} +{"ts":"2026-09-09T05:58:46.770Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","claim:pm-kcs4","lineage:pm-6apl","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","claim:pm-kcs4","lineage:pm-6apl","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"update","patch":[{"op":"remove","path":"/metadata/close_reason"},{"op":"remove","path":"/metadata/actual_result"},{"op":"remove","path":"/metadata/expected_result"},{"op":"remove","path":"/metadata/resolution"},{"op":"remove","path":"/metadata/completed_at"},{"op":"remove","path":"/metadata/closed_at"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:58:46.770Z"},{"op":"replace","path":"/metadata/status","value":"in_progress"}],"before_hash":"c28ab5fc79c6165533a526d9f4122f1226fed51aa6be6009117d26a9cbb81271","after_hash":"b9e5edbe75ff2fa726cd0ecec57cbee7545841b75de6fbae823c7f42d00083cc","item_hash_version":3,"message":"Reopen for PR 1225 reviewer improvements and final CI namespace baseline correction","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"d129f641d3a9c663a7e3363a124a2c6ead4724a2579e3a6a03aa0196bfaf5452"} +{"ts":"2026-09-09T05:58:47.300Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","claim:pm-kcs4","lineage:pm-6apl","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","claim:pm-kcs4","lineage:pm-6apl","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"claim","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:58:47.300Z"},{"op":"add","path":"/metadata/assignee","value":"harness:codex"},{"op":"add","path":"/metadata/claim_principal","value":"harness:codex#64e674a82ebbe431153d7b1d"}],"before_hash":"b9e5edbe75ff2fa726cd0ecec57cbee7545841b75de6fbae823c7f42d00083cc","after_hash":"8376cb63169f9eda68e1d4ceaa780bc88c9cac772eb2db67de22af14ff203da0","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"9c2255438d81c07ad13a67a304c5f27eceaf33bfbfb7b4fcf3a8b6e9a4a16f24"} +{"ts":"2026-09-09T06:02:44.826Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"update","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T06:02:44.826Z"},{"op":"replace","path":"/metadata/title","value":"Native pm ops normalize, pm ops reindex and pm history events with compatibility aliases"}],"before_hash":"8376cb63169f9eda68e1d4ceaa780bc88c9cac772eb2db67de22af14ff203da0","after_hash":"ab6f40a9c4fc23c2b16f0e31c21317eb7b1722cf1625bc2f3c9bc8c14bb852b3","item_hash_version":3,"message":"Use delivered namespace behavior in package-generated changelog per PR 1225 review","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"dbab5d6b82d9b7346f4bf007e102cb21f4de41ef46af1cce57087b6908853b02"} +{"ts":"2026-09-09T16:47:28.278Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":null,"topic":null},"op":"test_run_track","patch":[{"op":"add","path":"/metadata/test_runs/1","value":{"run_id":"test-local-mtuc07ig-i652ld","kind":"test","status":"passed","started_at":"2026-09-09T16:47:07.556Z","finished_at":"2026-09-09T16:47:28.264Z","recorded_at":"2026-09-09T16:47:28.264Z","passed":1,"failed":0,"skipped":0,"executions":[{"command":"node scripts/run-tests.mjs test -- tests/unit/cli/command-namespaces.spec.ts tests/unit/sdk/cli-contracts tests/integration/context-ops-namespace.integration.spec.ts","requested_pm_context_mode":"schema","pm_context_mode":"schema","workspace_context_mode":"source","trust_reason":"local_source_ref"}]}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T16:47:28.278Z"}],"before_hash":"ab6f40a9c4fc23c2b16f0e31c21317eb7b1722cf1625bc2f3c9bc8c14bb852b3","after_hash":"1fe161bf163973bdb8eac793cebc8bfe498e6656314c86e91ddc268ea9649530","item_hash_version":3,"message":"Track test run summary (test-local-mtuc07ig-i652ld)","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"d3764b1efe11b65f64a21a12ed926b2ae63a41a49480b4e86a8857bc603a39a1"} +{"ts":"2026-09-09T16:51:33.254Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":null,"topic":null},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/5","value":{"created_at":"2026-09-09T16:51:33.254Z","author":"harness:codex","text":"Review verification: 8639 tests across 655 files passed, exact coverage 100/100/100/100 with zero uncovered counts (63823 statements, 48528 branches, 13252 functions, 61201 lines). Full static quality, typecheck and the 57-surface token gate passed without relaxed existing ceilings. Each canonical linked namespace suite passed 42 tests; the new token-measurement link passed 12 tests. CodeRabbit accepted the three strengthened test assertions. The latest pm-changelog 2026.9.9 is installed; outcome titles feed package-generated release notes. PR 1225 requires a fresh hosted review on the forthcoming push."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T16:51:33.254Z"}],"before_hash":"1fe161bf163973bdb8eac793cebc8bfe498e6656314c86e91ddc268ea9649530","after_hash":"39ac3098c178b11fdea0499a65ece20ef09d4b21c649b5a711a91dd31a5b53c0","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"f58b693fd272df49fde7e1b58e9c0cb491b81ace95856ae73637cfd6de9ba0ab"} +{"ts":"2026-09-09T16:51:34.077Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"close","patch":[{"op":"remove","path":"/metadata/assignee"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T16:51:34.077Z"},{"op":"replace","path":"/metadata/status","value":"closed"},{"op":"add","path":"/metadata/closed_at","value":"2026-09-09T16:51:34.029Z"},{"op":"add","path":"/metadata/completed_at","value":"2026-09-09T16:51:34.029Z"},{"op":"add","path":"/metadata/resolution","value":"Native ops normalize, ops reindex and history events preserve package ownership and compatibility aliases, with explicit unavailable and installed action-availability assertions."},{"op":"add","path":"/metadata/expected_result","value":"Optional operations stay unavailable before installation and available after activation; native and legacy invocations retain equivalent outputs."},{"op":"add","path":"/metadata/actual_result","value":"Full static gates, typecheck, 8639 tests and exact 100/100/100/100 coverage passed; linked acceptance, package behavior and token budget checks passed."},{"op":"add","path":"/metadata/close_reason","value":"Implementation and review corrections verified locally; hosted rereview and merge remain separate delivery evidence."}],"before_hash":"39ac3098c178b11fdea0499a65ece20ef09d4b21c649b5a711a91dd31a5b53c0","after_hash":"8d98bab6c9dc4ba2b4a1721a2169f9a90023afc3e7423279fa6ccd826d3f920e","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"b947a7765f7c8eebc6e9d463f8af4610c19b453afb77c876018020914389dd90"} +{"ts":"2026-09-09T16:51:34.760Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"release","patch":[{"op":"remove","path":"/metadata/claim_principal"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T16:51:34.760Z"}],"before_hash":"8d98bab6c9dc4ba2b4a1721a2169f9a90023afc3e7423279fa6ccd826d3f920e","after_hash":"5bff62dcbf393a4a8a6a4e0fe6b22943d41d17e7203cd163d6a4834275117758","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"3bfde6b066c49cbd716f35f34a4c152ab74be4ff35e73aaec24dca009ed5c569"} diff --git a/.agents/pm/history/pm-6apl.jsonl b/.agents/pm/history/pm-6apl.jsonl index c4f5f4d96..1e7ce78b4 100644 --- a/.agents/pm/history/pm-6apl.jsonl +++ b/.agents/pm/history/pm-6apl.jsonl @@ -7,3 +7,46 @@ {"ts":"2026-07-29T04:57:53.379Z","author":"harness:claude-code","author_source":"detected","agent_harness":"claude-code","agent_instance":"ee7c90c0692fe79dacd0a597","agent_provenance":{"model":null,"effort":{"value":"xhigh","source":"environment"}},"op":"update","patch":[{"op":"add","path":"/metadata/dependencies/5","value":{"id":"pm-pbyu","kind":"implements","created_at":"2026-07-29T04:57:53.171Z","author":"harness:claude-code","source_kind":"cli:update:dep","author_source":"detected"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-07-29T04:57:53.379Z"}],"before_hash":"c9860e75e126c1ed26add16fa329e5a7e327e75ff6e0b03b7090b5d991b4eca9","after_hash":"aa7f60df771d636f947dc714e9497fb8f6fb5a05acb3d6da1f575d4fedd6f42e","message":"Tranche delivers the noun-verb grammar this ADR proposes; the item's own description names it"} {"ts":"2026-07-31T06:08:54.692Z","author":"harness:claude-code","author_source":"detected","agent_harness":"claude-code","agent_instance":"bbccd5ce4f6ac18346c324e7","agent_provenance":{"model":null,"effort":{"value":"xhigh","source":"environment"}},"op":"update","patch":[{"op":"add","path":"/metadata/dependencies/6","value":{"id":"pm-hb7ug8","kind":"blocked_by","created_at":"2026-07-31T06:08:54.394Z","author":"harness:claude-code","source_kind":"cli:update:dep","author_source":"detected"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-07-31T06:08:54.692Z"}],"before_hash":"aa7f60df771d636f947dc714e9497fb8f6fb5a05acb3d6da1f575d4fedd6f42e","after_hash":"9c3bace2e25050c9ef37d58b96f63e160f1a25d2ee3ba1a13a7b11777d58a726","message":"Sequencing evidence 2026-07-31: 18 output-bounding flag spellings across 19 read commands, widest pairwise availability disagreement 10, four read surfaces with zero bounding flags; two recorded simplification axes conclude noun consolidation is a null move until the bounding set is uniform"} {"ts":"2026-09-08T13:32:52.588Z","author":"harness:claude-code","author_source":"detected","agent_harness":"claude-code","agent_model":"claude-fable-5-1","agent_model_source":"probe","agent_instance":"72ded8f654edba84116a543f","agent_provenance":{"model":{"value":"claude-fable-5-1","source":"probe"},"effort":{"value":"xhigh","source":"environment"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-n8a6e7","lineage:pm-n8a6e7","lineage:pm-ydp6","lineage:pm-doxj"]},"topic":{"value":"pm-n8a6e7","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-n8a6e7","lineage:pm-n8a6e7","lineage:pm-ydp6","lineage:pm-doxj"]},"version":{"value":"2.1.263","source":"probe"}},"op":"update","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-08T13:32:52.588Z"},{"op":"add","path":"/metadata/expected_result","value":"stats, health, validate, gc, telemetry and eval are verbs of pm ops with byte-identical output, and every old spelling keeps working as an alias."}],"before_hash":"9c3bace2e25050c9ef37d58b96f63e160f1a25d2ee3ba1a13a7b11777d58a726","after_hash":"6c3e1c6fae26f1c5c869e84b9ef2c0546031788cee1cc6ae127b16107d32ee96","item_hash_version":3,"message":"Record the observable end state this item is expected to produce","event_class":"maintenance","record_hash_version":1,"record_hash":"35d6f0d68abd3e16817a6f498556ba2e97207ba2016ee7644aa68377280bfbf6"} +{"ts":"2026-09-09T04:08:03.657Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-kcs4","lineage:pm-kcs4","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-kcs4","lineage:pm-kcs4","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"claim","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:08:03.657Z"},{"op":"add","path":"/metadata/assignee","value":"harness:codex"},{"op":"add","path":"/metadata/claim_principal","value":"harness:codex#64e674a82ebbe431153d7b1d"}],"before_hash":"6c3e1c6fae26f1c5c869e84b9ef2c0546031788cee1cc6ae127b16107d32ee96","after_hash":"9ccacf40faf5bea3a5bec9f068fe5aabb089a1ef4edb9a580fc9de1ae433fc4e","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"264ed8701557e77f580551e7f885610171ef8306d615674344733476354b87c9"} +{"ts":"2026-09-09T04:08:04.370Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","claim:pm-kcs4","lineage:pm-6apl","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","claim:pm-kcs4","lineage:pm-6apl","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"update","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:08:04.370Z"},{"op":"replace","path":"/metadata/status","value":"in_progress"}],"before_hash":"9ccacf40faf5bea3a5bec9f068fe5aabb089a1ef4edb9a580fc9de1ae433fc4e","after_hash":"53b242f5e7f172740e51d26b7aa5b7de71e51896ec56d62faba5cab79f70ba8b","item_hash_version":3,"message":"Implement operations namespace with SDK-owned compatibility contracts","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"058b9ae0b83c2a49ec26043aad61a1edaad424eca8ce6a9383f41d28abd1a19f"} +{"ts":"2026-09-09T04:24:15.816Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"files_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:24:15.816Z"},{"op":"add","path":"/metadata/files","value":[{"path":"src/cli/command-namespaces.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/cli/help-content.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/cli/main.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/agent-capability-contracts.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/agent/item-addressing.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/cli-bootstrap.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/cli-contracts.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/cli-contracts/command-aliases.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/cli-contracts/flag-lexicon-contracts.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/cli-contracts/grammar-contracts.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/cli-contracts/runtime-contracts.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/completion.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/index.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"tests/integration/context-ops-namespace.integration.spec.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"tests/unit/cli/command-namespaces.spec.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"tests/unit/sdk/cli-contracts/grammar-contracts.spec.ts","scope":"project","note":"Shared native namespace contracts and verification"}]}],"before_hash":"53b242f5e7f172740e51d26b7aa5b7de71e51896ec56d62faba5cab79f70ba8b","after_hash":"8dd080bc85692f5f34c356a49e60a703b0ae529c47d78acc7e80ccb389235417","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"bd725aced6e7f4b02b305f28f426d68338d7a7f7a8e156286d3ab9e0a0831524"} +{"ts":"2026-09-09T04:24:16.438Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"docs_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:24:16.438Z"},{"op":"add","path":"/metadata/docs","value":[{"path":"docs/COMMAND_NAMESPACES.md","scope":"project","note":"Native commands compatibility and package ownership"}]}],"before_hash":"8dd080bc85692f5f34c356a49e60a703b0ae529c47d78acc7e80ccb389235417","after_hash":"eb290b00c46f4620897abcd040070ecbced88d7153aada33bab0cc3cb86b4028","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"097d5c79a6ef20ae8df164e98098177ca569b275a8afa05406683905805e24ea"} +{"ts":"2026-09-09T04:24:17.028Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"tests_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:24:17.028Z"},{"op":"add","path":"/metadata/tests","value":[{"command":"node scripts/run-tests.mjs test -- tests/unit/cli/command-namespaces.spec.ts tests/unit/sdk/cli-contracts tests/integration/context-ops-namespace.integration.spec.ts","scope":"project","timeout_seconds":240,"provenance":{"author":"harness:codex","created_at":"2026-09-09T04:24:17.002Z","source_kind":"local_mutation","source_ref":"feat/context-ops-command-namespaces"}}]}],"before_hash":"eb290b00c46f4620897abcd040070ecbced88d7153aada33bab0cc3cb86b4028","after_hash":"68a2864491adfe608c28521011c411a12628e7dba047b3e05aface6d75faaf7d","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"3b66cd53ea9f55e6c8564f35dc98f7961d13a8eea27b1146839065a2028d08db"} +{"ts":"2026-09-09T04:24:17.594Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"comment_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:24:17.594Z"},{"op":"add","path":"/metadata/comments","value":[{"created_at":"2026-09-09T04:24:17.594Z","author":"harness:codex","text":"Implementation evidence: native command node placement preserves existing SDK handlers; bootstrap aliases, runtime contracts, capability routing, package availability, positional addressing, and three shell completions share declared mappings. TDD reproduced missing namespace support, then verified native/legacy argv and real isolated tracker reads. Broader quality gates and package acceptance are in progress."}]}],"before_hash":"68a2864491adfe608c28521011c411a12628e7dba047b3e05aface6d75faaf7d","after_hash":"ac004a96bb978146b93015d1b7ecb41e9b7ecdc5469aceb12ea79a8f3a60db63","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"04d6fa10bf976b59b51a4f8c93f8e75df3bcfab42d336ced5d1feda9f0f3455c"} +{"ts":"2026-09-09T04:42:05.834Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"files_add","patch":[{"op":"replace","path":"/metadata/files/15/path","value":"src/sdk/index.ts"},{"op":"replace","path":"/metadata/files/14/path","value":"src/sdk/completion.ts"},{"op":"replace","path":"/metadata/files/13/path","value":"src/sdk/cli-contracts/runtime-contracts.ts"},{"op":"replace","path":"/metadata/files/12/path","value":"src/sdk/cli-contracts/grammar-contracts.ts"},{"op":"replace","path":"/metadata/files/11/path","value":"src/sdk/cli-contracts/flag-lexicon-contracts.ts"},{"op":"replace","path":"/metadata/files/10/path","value":"src/sdk/cli-contracts/command-aliases.ts"},{"op":"replace","path":"/metadata/files/9/path","value":"src/sdk/cli-contracts.ts"},{"op":"replace","path":"/metadata/files/8/path","value":"src/sdk/cli-bootstrap.ts"},{"op":"replace","path":"/metadata/files/7/path","value":"src/sdk/agent/item-addressing.ts"},{"op":"replace","path":"/metadata/files/6/path","value":"src/sdk/agent-capability-contracts.ts"},{"op":"replace","path":"/metadata/files/5/path","value":"src/cli/main.ts"},{"op":"replace","path":"/metadata/files/4/note","value":"Namespace discovery compatibility and release verification"},{"op":"replace","path":"/metadata/files/4/path","value":"src/cli/help-json-payload.ts"},{"op":"replace","path":"/metadata/files/3/path","value":"src/cli/help-content.ts"},{"op":"replace","path":"/metadata/files/2/path","value":"src/cli/command-namespaces.ts"},{"op":"replace","path":"/metadata/files/1/note","value":"Namespace discovery compatibility and release verification"},{"op":"replace","path":"/metadata/files/1/path","value":"sdk/public-surface.json"},{"op":"replace","path":"/metadata/files/0/note","value":"Namespace discovery compatibility and release verification"},{"op":"replace","path":"/metadata/files/0/path","value":"scripts/release/flag-invocation-parity.mjs"},{"op":"add","path":"/metadata/files/16","value":{"path":"tests/fixtures/contracts/full.json","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/files/17","value":{"path":"tests/integration/context-ops-namespace.integration.spec.ts","scope":"project","note":"Shared native namespace contracts and verification"}},{"op":"add","path":"/metadata/files/18","value":{"path":"tests/integration/contract-command-enumeration.integration.spec.ts","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/files/19","value":{"path":"tests/integration/help-runtime.spec.ts","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/files/20","value":{"path":"tests/integration/release-readiness-runtime.spec.ts","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/files/21","value":{"path":"tests/unit/cli/command-namespaces.spec.ts","scope":"project","note":"Shared native namespace contracts and verification"}},{"op":"add","path":"/metadata/files/22","value":{"path":"tests/unit/commands/completion-command.spec.ts","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/files/23","value":{"path":"tests/unit/commands/contracts-command.spec.ts","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/files/24","value":{"path":"tests/unit/sdk/cli-contracts/grammar-contracts.spec.ts","scope":"project","note":"Shared native namespace contracts and verification"}},{"op":"add","path":"/metadata/files/25","value":{"path":"tests/unit/sdk/contracts-full-projection.spec.ts","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:42:05.834Z"}],"before_hash":"ac004a96bb978146b93015d1b7ecb41e9b7ecdc5469aceb12ea79a8f3a60db63","after_hash":"3dd09096081d58518c5067be3fddbd3f378bd91a1796ac83fde12fad5e320f01","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"2e5ff2ca85628c8a222b023f821721fc30287be4334364f7f290169b05b27ab8"} +{"ts":"2026-09-09T04:42:06.403Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"docs_add","patch":[{"op":"add","path":"/metadata/docs/1","value":{"path":"docs/generated/AGENT_CAPABILITY_ROUTING.md","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/docs/2","value":{"path":"docs/generated/AGENT_COMMAND_SURFACE.md","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/docs/3","value":{"path":"docs/generated/FLAG_LEXICON_BUDGETS.md","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/docs/4","value":{"path":"docs/README.md","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/docs/5","value":{"path":"packages/pm-governance-audit/README.md","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/docs/6","value":{"path":"packages/pm-search-advanced/README.md","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:42:06.403Z"}],"before_hash":"3dd09096081d58518c5067be3fddbd3f378bd91a1796ac83fde12fad5e320f01","after_hash":"bd30f6eb85f0d83b978c01d5b4782b90573d9d06b467daf47feb5eddc92c3a2d","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"735704154d7e412286178c654444e311c322362c7c16ae27a9c94314fa2b7f1f"} +{"ts":"2026-09-09T04:42:07.069Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/1","value":{"created_at":"2026-09-09T04:42:07.069Z","author":"harness:codex","text":"Verification update: focused native/legacy and help/contract suite exercised 271 cases; 270 passed and one obsolete package-hint expectation was corrected. Native JSON help now retains optional-package installation recovery. GitHub live inventory found no open issues or PRs and no open Dependabot/code-scanning/secret-scanning alerts. Full coverage and static gates must finish before closure."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:42:07.069Z"}],"before_hash":"bd30f6eb85f0d83b978c01d5b4782b90573d9d06b467daf47feb5eddc92c3a2d","after_hash":"4875e07005978b9bce916febd4b8a7c0d9b7a4b79cb4718ffa9f1fe71495b120","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"73ec7e31392fd6b23852b3ba09290e423b702b5e347600abecb94fc0edde95db"} +{"ts":"2026-09-09T05:05:51.867Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/2","value":{"created_at":"2026-09-09T05:05:51.867Z","author":"harness:codex","text":"Distribution and safety evidence: packed local tarball installed independently with npm and Bun; both Node and Bun executed native/legacy CLI parity and imported the new SDK aliases/resolver through both published SDK entrypoints. Bash, Zsh and Fish syntax validation passed; real Fish completion returned native flags with global option values interleaved. Sentry 14-day gate returned critical=0/high=0; secret scan and all three GitHub alert inventories were clear."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:05:51.867Z"}],"before_hash":"4875e07005978b9bce916febd4b8a7c0d9b7a4b79cb4718ffa9f1fe71495b120","after_hash":"244a960bf7c87b629b3bc067e0ef01c40539ee55018384bab4e4c90a43d34554","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"338d30c44f23e4294c11dda80ff9fad2a7defef9df5d4ae191453d41f3151327"} +{"ts":"2026-09-09T05:12:16.749Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"files_add","patch":[{"op":"replace","path":"/metadata/files/25/note","value":"Shared native namespace contracts and verification"},{"op":"replace","path":"/metadata/files/25/path","value":"tests/unit/sdk/cli-contracts/grammar-contracts.spec.ts"},{"op":"replace","path":"/metadata/files/24/note","value":"Namespace discovery compatibility and release verification"},{"op":"replace","path":"/metadata/files/24/path","value":"tests/unit/commands/contracts-command.spec.ts"},{"op":"replace","path":"/metadata/files/23/path","value":"tests/unit/commands/completion-command.spec.ts"},{"op":"replace","path":"/metadata/files/22/note","value":"Shared native namespace contracts and verification"},{"op":"replace","path":"/metadata/files/22/path","value":"tests/unit/cli/command-namespaces.spec.ts"},{"op":"replace","path":"/metadata/files/21/note","value":"Namespace discovery compatibility and release verification"},{"op":"replace","path":"/metadata/files/21/path","value":"tests/integration/release-readiness-runtime.spec.ts"},{"op":"replace","path":"/metadata/files/20/path","value":"tests/integration/help-runtime.spec.ts"},{"op":"replace","path":"/metadata/files/19/path","value":"tests/integration/contract-command-enumeration.integration.spec.ts"},{"op":"replace","path":"/metadata/files/18/note","value":"Shared native namespace contracts and verification"},{"op":"replace","path":"/metadata/files/18/path","value":"tests/integration/context-ops-namespace.integration.spec.ts"},{"op":"replace","path":"/metadata/files/17/note","value":"Exercise real source handlers through shared output capture for truthful CLI coverage"},{"op":"replace","path":"/metadata/files/17/path","value":"tests/helpers/cliRunner.ts"},{"op":"add","path":"/metadata/files/26","value":{"path":"tests/unit/sdk/contracts-full-projection.spec.ts","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:12:16.749Z"}],"before_hash":"244a960bf7c87b629b3bc067e0ef01c40539ee55018384bab4e4c90a43d34554","after_hash":"1dbcd125db9f8e08968ad2aeeef31a61ef24abad5f8cf48327938bb21ef0cdcf","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"d861d8bce10e18eefa70d74db918152ec23d68ba993240b95a756fd55913586f"} +{"ts":"2026-09-09T05:13:46.283Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"test_run_track","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:13:46.283Z"},{"op":"add","path":"/metadata/test_runs","value":[{"run_id":"test-local-mttn83ru-ljbmsy","kind":"test","status":"passed","started_at":"2026-09-09T05:13:23.931Z","finished_at":"2026-09-09T05:13:46.265Z","recorded_at":"2026-09-09T05:13:46.265Z","passed":1,"failed":0,"skipped":0,"executions":[{"command":"node scripts/run-tests.mjs test -- tests/unit/cli/command-namespaces.spec.ts tests/unit/sdk/cli-contracts tests/integration/context-ops-namespace.integration.spec.ts","requested_pm_context_mode":"schema","pm_context_mode":"schema","workspace_context_mode":"source","trust_reason":"local_source_ref"}]}]}],"before_hash":"1dbcd125db9f8e08968ad2aeeef31a61ef24abad5f8cf48327938bb21ef0cdcf","after_hash":"a0bc4f48ffaa96cc5b4cb157538ce158c2ea39eb59125b5352e943631ae39356","item_hash_version":3,"message":"Track test run summary (test-local-mttn83ru-ljbmsy)","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"30e312710f5008e7330958a0d23da96736ce13a2fafc68f9334e6cf2e05042b6"} +{"ts":"2026-09-09T05:15:21.025Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/3","value":{"created_at":"2026-09-09T05:15:21.025Z","author":"harness:codex","text":"Verification: linked sandbox-safe suite passed 42 tests across 8 files. Repository static gates, duplication checks, typecheck, source documentation coverage, package boundaries, grammar census (187/187), flag invocation parity (84 commands; 3855 flags), token budgets, MCP deprecations, graph composition, and record integrity passed. Native operations preserve existing SDK and MCP identities and machine-readable results."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:15:21.025Z"}],"before_hash":"a0bc4f48ffaa96cc5b4cb157538ce158c2ea39eb59125b5352e943631ae39356","after_hash":"c6d88dc35b868f6e75063ca049444f7575686b8aa8789b0c70420ba087638ba9","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"3164f46c9987416439973d180c34f6b2fd6f9969e4d2d75b6588fc9363ca7030"} +{"ts":"2026-09-09T05:19:57.922Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"learning_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:19:57.922Z"},{"op":"add","path":"/metadata/learnings","value":[{"created_at":"2026-09-09T05:19:57.922Z","author":"harness:codex","text":"When testing CLI orchestration coverage, invoke the instrumented source entrypoint through real transport capture. Executing dist verifies distribution behavior but does not prove source branch coverage."}]}],"before_hash":"c6d88dc35b868f6e75063ca049444f7575686b8aa8789b0c70420ba087638ba9","after_hash":"28db2f54aca016dce81f993950a69b237d296b957c901ce8c836826f0727206d","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"f87dac78fd7d8e0629bdcf6f75bf668f427db2aec5bbd4b85472607593c89957"} +{"ts":"2026-09-09T05:21:00.622Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"files_add","patch":[{"op":"replace","path":"/metadata/files/26/note","value":"Shared native namespace contracts and verification"},{"op":"replace","path":"/metadata/files/26/path","value":"tests/unit/sdk/cli-contracts/grammar-contracts.spec.ts"},{"op":"replace","path":"/metadata/files/25/note","value":"Await actual documentation gate completion to prevent full-coverage output racing the next fixture"},{"op":"replace","path":"/metadata/files/25/path","value":"tests/unit/scripts/release/docs-skills-gate.spec.ts"},{"op":"add","path":"/metadata/files/27","value":{"path":"tests/unit/sdk/contracts-full-projection.spec.ts","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:21:00.622Z"}],"before_hash":"28db2f54aca016dce81f993950a69b237d296b957c901ce8c836826f0727206d","after_hash":"804b831da3f0a26990b9c461e957cded0df772ecdf98a3e4406e708d88145cd0","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"fd107f5fbc94ac7201bcdff243dc1dc0434205a2808c28277f86a87b7e363d17"} +{"ts":"2026-09-09T05:21:01.180Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/4","value":{"created_at":"2026-09-09T05:21:01.180Z","author":"harness:codex","text":"Full-coverage run reproduced a docs-skills fixture race: its three-second polling deadline expired before the asynchronous gate emitted JSON, and delayed full-mode output contaminated the next links-only fixture. Replacing this bounded polling assumption with awaiting the actual output completion promise; existing test timeout and all quality thresholds remain unchanged."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:21:01.180Z"}],"before_hash":"804b831da3f0a26990b9c461e957cded0df772ecdf98a3e4406e708d88145cd0","after_hash":"d1bc9e6d959ad2e106332df307233b649241bd1605e74edbf410c81d1613c325","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"b70046c1183c00ab3eb6b4682feaf033e38d3b94266dbd9f2cbe71c9d331b4b1"} +{"ts":"2026-09-09T05:23:14.083Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"docs_add","patch":[{"op":"replace","path":"/metadata/docs/6/path","value":"packages/pm-governance-audit/README.md"},{"op":"replace","path":"/metadata/docs/5/path","value":"docs/README.md"},{"op":"replace","path":"/metadata/docs/4/path","value":"docs/generated/FLAG_LEXICON_BUDGETS.md"},{"op":"replace","path":"/metadata/docs/3/path","value":"docs/generated/AGENT_COMMAND_SURFACE.md"},{"op":"replace","path":"/metadata/docs/2/path","value":"docs/generated/AGENT_CAPABILITY_ROUTING.md"},{"op":"replace","path":"/metadata/docs/1/note","value":"Native commands compatibility and package ownership"},{"op":"replace","path":"/metadata/docs/1/path","value":"docs/COMMAND_NAMESPACES.md"},{"op":"replace","path":"/metadata/docs/0/note","value":"Package-generated reviewed delivery attribution"},{"op":"replace","path":"/metadata/docs/0/path","value":"CHANGELOG.md"},{"op":"add","path":"/metadata/docs/7","value":{"path":"packages/pm-search-advanced/README.md","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:23:14.083Z"}],"before_hash":"d1bc9e6d959ad2e106332df307233b649241bd1605e74edbf410c81d1613c325","after_hash":"cae67df4261a3029bfd9cb7945a41a28f539f8348e4712d7c64b71563b7e7f10","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"10f9b47ee3298a67fa6bedd1c34fecb1f45433b97555dca58bef9b30fa5bec05"} +{"ts":"2026-09-09T05:29:22.960Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"release-operator","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","release:pm-kcs4"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","release:pm-kcs4"]}},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/5","value":{"created_at":"2026-09-09T05:29:22.960Z","author":"harness:codex","text":"Final verification: 8639 tests in 655 files passed; exact coverage 100/100/100/100 with zero uncovered counts (63818 statements, 48528 branches, 13248 functions, 61196 lines). Full static gates and source documentation requirements passed without relaxed thresholds. Linked suites, typecheck, secret scan, native/legacy temporary-workspace acceptance, real package installation, independent npm/Bun SDK consumers, and npx/bunx packed smoke with 13 packages passed. GitHub issue/PR and security alert inventories were clear before opening this delivery PR."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:29:22.960Z"}],"before_hash":"cae67df4261a3029bfd9cb7945a41a28f539f8348e4712d7c64b71563b7e7f10","after_hash":"86fe2740e34e7f97b185cff674f41c7b64ec1a1e8e4d416c76a50fabb3e7f822","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"251599c064531bd50c7f1dfce67c22a080477c48ef0993f9cc50409bce154677"} +{"ts":"2026-09-09T05:29:23.552Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"release-operator","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","release:pm-kcs4"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","release:pm-kcs4"]}},"op":"close","patch":[{"op":"replace","path":"/metadata/expected_result","value":"All workspace diagnostics and linked-test operations retain flag and output compatibility under ops."},{"op":"remove","path":"/metadata/assignee"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:29:23.552Z"},{"op":"replace","path":"/metadata/status","value":"closed"},{"op":"add","path":"/metadata/closed_at","value":"2026-09-09T05:29:23.513Z"},{"op":"add","path":"/metadata/completed_at","value":"2026-09-09T05:29:23.513Z"},{"op":"add","path":"/metadata/resolution","value":"Delivered native ops stats health validate gc telemetry eval and test-all with stable SDK and MCP operations."},{"op":"add","path":"/metadata/actual_result","value":"All namespace acceptance checks passed; 8639 tests and exact 100/100/100/100 coverage; full static and distribution gates passed."},{"op":"add","path":"/metadata/close_reason","value":"Implementation and verification complete; closure and changelog are included in the reviewed delivery."}],"before_hash":"86fe2740e34e7f97b185cff674f41c7b64ec1a1e8e4d416c76a50fabb3e7f822","after_hash":"b3785c8b64a6cdb5f3b5a9ae2fb33abd1965e4dd76b176f997213f0dd05696d9","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"83636feaece4ee2cc50860154946efdf97d41d35b665679e231fb48387ad09d1"} +{"ts":"2026-09-09T05:29:24.115Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"release-operator","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","release:pm-kcs4"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","release:pm-kcs4"]}},"op":"release","patch":[{"op":"remove","path":"/metadata/claim_principal"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:29:24.115Z"}],"before_hash":"b3785c8b64a6cdb5f3b5a9ae2fb33abd1965e4dd76b176f997213f0dd05696d9","after_hash":"9d0651aec018d0a3771a36865d3c9e54394f47d346d1bc610b6c3f5ed7bfd65e","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"05175bc565f18a0daea4b2133210d3ce051af752363832c65b675348f0257fa7"} +{"ts":"2026-09-09T05:36:31.107Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":null,"topic":null},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/6","value":{"created_at":"2026-09-09T05:36:31.107Z","author":"harness:codex","text":"Reviewed closeout checks: defect-evidence gate passed with zero findings. Full-population history validation checked 2727 items with zero drift or identity discontinuities. Resolution validation returned its existing warning class for 170 historical records; this delivery records resolution, expected_result, and actual_result atomically for all three selected tasks. Registry confirmed pm-changelog 2026.9.8 latest; package-generated changelog and check passed after a cache-preferred retry for transient npm DNS failures."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:36:31.107Z"}],"before_hash":"9d0651aec018d0a3771a36865d3c9e54394f47d346d1bc610b6c3f5ed7bfd65e","after_hash":"a499697363674f6f6afcde9835ec9be2e8a6f595cb60e11d9cccdd9bbf46844c","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"3dfce0c18e5d8cd3272ec6300d0442dd34fc06738db5a6a64d09f9d6c03fe485"} +{"ts":"2026-09-09T05:58:45.521Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-kcs4","lineage:pm-kcs4","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-kcs4","lineage:pm-kcs4","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"update","patch":[{"op":"remove","path":"/metadata/close_reason"},{"op":"remove","path":"/metadata/actual_result"},{"op":"remove","path":"/metadata/expected_result"},{"op":"remove","path":"/metadata/resolution"},{"op":"remove","path":"/metadata/completed_at"},{"op":"remove","path":"/metadata/closed_at"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:58:45.521Z"},{"op":"replace","path":"/metadata/status","value":"in_progress"}],"before_hash":"a499697363674f6f6afcde9835ec9be2e8a6f595cb60e11d9cccdd9bbf46844c","after_hash":"f13c58ce6015c1f2802ef212b9889a5fad8eb98f1079214eee5472d4e307cf38","item_hash_version":3,"message":"Reopen for PR 1225 reviewer improvements and final CI namespace baseline correction","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"2400b0b1df9cdc8c4a80f8e74dcf38ef6413fda0a2a151965c61b41868eeaade"} +{"ts":"2026-09-09T05:58:46.087Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-kcs4","lineage:pm-kcs4","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-kcs4","lineage:pm-kcs4","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"claim","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:58:46.087Z"},{"op":"add","path":"/metadata/assignee","value":"harness:codex"},{"op":"add","path":"/metadata/claim_principal","value":"harness:codex#64e674a82ebbe431153d7b1d"}],"before_hash":"f13c58ce6015c1f2802ef212b9889a5fad8eb98f1079214eee5472d4e307cf38","after_hash":"77723d680a3b27b59554cebb5f48519b48f13cda132592cb81551a6d3a3df3dd","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"02a11c471ae9126c2272df56153f8093080e616d76e35137882dc8c4c49f7668"} +{"ts":"2026-09-09T05:59:36.018Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"files_add","patch":[{"op":"replace","path":"/metadata/files/27/note","value":"Regression coverage for canonical namespaced help measurement"},{"op":"replace","path":"/metadata/files/27/path","value":"tests/unit/scripts/measure-agent-token-surface.spec.ts"},{"op":"replace","path":"/metadata/files/26/note","value":"Namespace discovery compatibility and release verification"},{"op":"replace","path":"/metadata/files/26/path","value":"tests/unit/commands/contracts-command.spec.ts"},{"op":"replace","path":"/metadata/files/25/note","value":"Namespace discovery compatibility and release verification"},{"op":"replace","path":"/metadata/files/25/path","value":"tests/unit/commands/completion-command.spec.ts"},{"op":"replace","path":"/metadata/files/24/note","value":"Shared native namespace contracts and verification"},{"op":"replace","path":"/metadata/files/24/path","value":"tests/unit/cli/command-namespaces.spec.ts"},{"op":"replace","path":"/metadata/files/23/path","value":"tests/integration/release-readiness-runtime.spec.ts"},{"op":"replace","path":"/metadata/files/22/note","value":"Namespace discovery compatibility and release verification"},{"op":"replace","path":"/metadata/files/22/path","value":"tests/integration/help-runtime.spec.ts"},{"op":"replace","path":"/metadata/files/21/path","value":"tests/integration/contract-command-enumeration.integration.spec.ts"},{"op":"replace","path":"/metadata/files/20/note","value":"Shared native namespace contracts and verification"},{"op":"replace","path":"/metadata/files/20/path","value":"tests/integration/context-ops-namespace.integration.spec.ts"},{"op":"replace","path":"/metadata/files/19/note","value":"Exercise real source handlers through shared output capture for truthful CLI coverage"},{"op":"replace","path":"/metadata/files/19/path","value":"tests/helpers/cliRunner.ts"},{"op":"replace","path":"/metadata/files/18/note","value":"Namespace discovery compatibility and release verification"},{"op":"replace","path":"/metadata/files/18/path","value":"tests/fixtures/contracts/full.json"},{"op":"replace","path":"/metadata/files/17/note","value":"Shared native namespace contracts and verification"},{"op":"replace","path":"/metadata/files/17/path","value":"src/sdk/index.ts"},{"op":"replace","path":"/metadata/files/16/note","value":"Shared native namespace contracts and verification"},{"op":"replace","path":"/metadata/files/16/path","value":"src/sdk/completion.ts"},{"op":"replace","path":"/metadata/files/15/path","value":"src/sdk/cli-contracts/runtime-contracts.ts"},{"op":"replace","path":"/metadata/files/14/path","value":"src/sdk/cli-contracts/grammar-contracts.ts"},{"op":"replace","path":"/metadata/files/13/path","value":"src/sdk/cli-contracts/flag-lexicon-contracts.ts"},{"op":"replace","path":"/metadata/files/12/path","value":"src/sdk/cli-contracts/command-aliases.ts"},{"op":"replace","path":"/metadata/files/11/path","value":"src/sdk/cli-contracts.ts"},{"op":"replace","path":"/metadata/files/10/path","value":"src/sdk/cli-bootstrap.ts"},{"op":"replace","path":"/metadata/files/9/path","value":"src/sdk/agent/item-addressing.ts"},{"op":"replace","path":"/metadata/files/8/path","value":"src/sdk/agent-capability-contracts.ts"},{"op":"replace","path":"/metadata/files/7/path","value":"src/cli/main.ts"},{"op":"replace","path":"/metadata/files/6/note","value":"Namespace discovery compatibility and release verification"},{"op":"replace","path":"/metadata/files/6/path","value":"src/cli/help-json-payload.ts"},{"op":"replace","path":"/metadata/files/5/path","value":"src/cli/help-content.ts"},{"op":"replace","path":"/metadata/files/4/note","value":"Shared native namespace contracts and verification"},{"op":"replace","path":"/metadata/files/4/path","value":"src/cli/command-namespaces.ts"},{"op":"replace","path":"/metadata/files/3/note","value":"Namespace discovery compatibility and release verification"},{"op":"replace","path":"/metadata/files/3/path","value":"sdk/public-surface.json"},{"op":"replace","path":"/metadata/files/2/note","value":"Namespace discovery compatibility and release verification"},{"op":"replace","path":"/metadata/files/2/path","value":"scripts/release/flag-invocation-parity.mjs"},{"op":"replace","path":"/metadata/files/1/note","value":"Keep canonical namespace help measured by unchanged token-surface budgets"},{"op":"replace","path":"/metadata/files/1/path","value":"scripts/measure-agent-token-surface.mjs"},{"op":"replace","path":"/metadata/files/0/note","value":"Rename next and validate identities without increasing budgets"},{"op":"replace","path":"/metadata/files/0/path","value":"scripts/agent-token-surface-baseline.json"},{"op":"add","path":"/metadata/files/28","value":{"path":"tests/unit/scripts/release/docs-skills-gate.spec.ts","scope":"project","note":"Await actual documentation gate completion to prevent full-coverage output racing the next fixture"}},{"op":"add","path":"/metadata/files/29","value":{"path":"tests/unit/sdk/cli-contracts/grammar-contracts.spec.ts","scope":"project","note":"Shared native namespace contracts and verification"}},{"op":"add","path":"/metadata/files/30","value":{"path":"tests/unit/sdk/contracts-full-projection.spec.ts","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:59:36.018Z"}],"before_hash":"77723d680a3b27b59554cebb5f48519b48f13cda132592cb81551a6d3a3df3dd","after_hash":"3999477d342a99a8282a61a5315d016ccb181f48e39555675f39ef1bcea2f9c1","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"5413972d0ee756bb90be557389542e1bce0f573bb2bd5854df515f429725c196"} +{"ts":"2026-09-09T05:59:47.138Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/7","value":{"created_at":"2026-09-09T05:59:47.138Z","author":"harness:codex","text":"PR 1225 review round 1: CI coverage, static quality, typecheck, compatibility, all OS runtime jobs and hosted analyzers passed. The smoke gate found stale token-baseline command identities next/validate after they moved under namespaces. Correcting discovery to measure canonical core leaves and renaming only those baseline keys while preserving every numeric ceiling. CodeRabbit also identified stronger help/availability/completion assertions and outcome-oriented changelog wording; Sourcery and cubic reported provider quota limits."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:59:47.138Z"}],"before_hash":"3999477d342a99a8282a61a5315d016ccb181f48e39555675f39ef1bcea2f9c1","after_hash":"f46206aba06099b91497375f7669b719a4b28830b64fd1b61f4fba4c1586d903","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"41dc48315341fa6b1562c98bf5b53896c9a95cb3b614c61e4e36612cedcaa932"} +{"ts":"2026-09-09T06:02:44.252Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"update","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T06:02:44.252Z"},{"op":"replace","path":"/metadata/title","value":"Native pm ops diagnostics and maintenance with compatible root commands"}],"before_hash":"f46206aba06099b91497375f7669b719a4b28830b64fd1b61f4fba4c1586d903","after_hash":"1dccbd9005a5a77babaece2fefc1e976202c7cbc4fbc29bb0070a008db71b218","item_hash_version":3,"message":"Use delivered namespace behavior in package-generated changelog per PR 1225 review","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"cf6d81accb41b0fed3296104a7afb23b18d3227149ea6e9a2646857dd2935a3f"} +{"ts":"2026-09-09T16:37:45.661Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":null,"topic":null},"op":"tests_add","patch":[{"op":"add","path":"/metadata/tests/1","value":{"command":"node scripts/run-tests.mjs test -- tests/unit/scripts/measure-agent-token-surface.spec.ts","scope":"project","timeout_seconds":240,"provenance":{"author":"harness:codex","created_at":"2026-09-09T16:37:45.530Z","source_kind":"local_mutation","source_ref":"feat/context-ops-command-namespaces"}}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T16:37:45.661Z"}],"before_hash":"1dccbd9005a5a77babaece2fefc1e976202c7cbc4fbc29bb0070a008db71b218","after_hash":"28b3843f54ebb1a82128f19d26d71b196a3e407205a30c27229e541dd44a9872","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"b0be783a7166b8d3dcfcb7279ff014e14b63fd93c26b9b60c3775f8c2e00f1b7"} +{"ts":"2026-09-09T16:37:47.785Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":null,"topic":null},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/8","value":{"created_at":"2026-09-09T16:37:47.785Z","author":"harness:codex","text":"Review correction: canonical context next and ops validate remain measured after their root aliases leave default help. Existing per-command and aggregate ceilings are unchanged; the new ops root has its own bounded baseline. Shortened navigation rationale to fit its inherited ceiling. The 57-surface gate passed. Added regression checks for native help leaves, unavailable optional reindex and installed availability, completion row alignment, and docstrings for touched named functions."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T16:37:47.785Z"}],"before_hash":"28b3843f54ebb1a82128f19d26d71b196a3e407205a30c27229e541dd44a9872","after_hash":"9774d89e726adb5fe8557882a4569f348dd31d7a5a52dcf1089dfc7e41739517","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"251e8895a58e5c157a2462de0482232915949291646c30a85603dcfe4836b6e3"} +{"ts":"2026-09-09T16:43:30.996Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":null,"topic":null},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/9","value":{"created_at":"2026-09-09T16:43:30.996Z","author":"harness:codex","text":"Release health evidence refreshed: scheduled Auto Release 34324368050 and Release v2026.9.9 run 34326222024 succeeded. Fresh public-registry acceptance of 2026.9.9 passed every declared bin through npx and bunx, including CLI contracts, stdio MCP, HTTP discovery, and missing-bin negative controls. This publication predates PR 1225 and is not publication evidence for the namespace changes."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T16:43:30.996Z"}],"before_hash":"9774d89e726adb5fe8557882a4569f348dd31d7a5a52dcf1089dfc7e41739517","after_hash":"3901330b6883863d7868a69d55f070b1c9e6fe2fbe5a7c652a58d7143007d625","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"8fd8dd0da550a8edb405790057e23f27b63aa853d020a8f23e3f09e2bc77533a"} +{"ts":"2026-09-09T16:46:28.669Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":null,"topic":null},"op":"files_add","patch":[{"op":"replace","path":"/metadata/files/30/note","value":"Shared native namespace contracts and verification"},{"op":"replace","path":"/metadata/files/30/path","value":"tests/unit/sdk/cli-contracts/grammar-contracts.spec.ts"},{"op":"replace","path":"/metadata/files/29/note","value":"Await actual documentation gate completion to prevent full-coverage output racing the next fixture"},{"op":"replace","path":"/metadata/files/29/path","value":"tests/unit/scripts/release/docs-skills-gate.spec.ts"},{"op":"replace","path":"/metadata/files/28/note","value":"Regression coverage for canonical namespaced help measurement"},{"op":"replace","path":"/metadata/files/28/path","value":"tests/unit/scripts/measure-agent-token-surface.spec.ts"},{"op":"replace","path":"/metadata/files/27/note","value":"Namespace discovery compatibility and release verification"},{"op":"replace","path":"/metadata/files/27/path","value":"tests/unit/commands/contracts-command.spec.ts"},{"op":"replace","path":"/metadata/files/26/path","value":"tests/unit/commands/completion-command.spec.ts"},{"op":"replace","path":"/metadata/files/25/note","value":"Shared native namespace contracts and verification"},{"op":"replace","path":"/metadata/files/25/path","value":"tests/unit/cli/command-namespaces.spec.ts"},{"op":"replace","path":"/metadata/files/24/note","value":"Namespace discovery compatibility and release verification"},{"op":"replace","path":"/metadata/files/24/path","value":"tests/integration/release-readiness-runtime.spec.ts"},{"op":"replace","path":"/metadata/files/23/path","value":"tests/integration/help-runtime.spec.ts"},{"op":"replace","path":"/metadata/files/22/path","value":"tests/integration/contract-command-enumeration.integration.spec.ts"},{"op":"replace","path":"/metadata/files/21/note","value":"Shared native namespace contracts and verification"},{"op":"replace","path":"/metadata/files/21/path","value":"tests/integration/context-ops-namespace.integration.spec.ts"},{"op":"replace","path":"/metadata/files/20/note","value":"Exercise real source handlers through shared output capture for truthful CLI coverage"},{"op":"replace","path":"/metadata/files/20/path","value":"tests/helpers/cliRunner.ts"},{"op":"replace","path":"/metadata/files/19/note","value":"Namespace discovery compatibility and release verification"},{"op":"replace","path":"/metadata/files/19/path","value":"tests/fixtures/contracts/full.json"},{"op":"replace","path":"/metadata/files/18/note","value":"Shared native namespace contracts and verification"},{"op":"replace","path":"/metadata/files/18/path","value":"src/sdk/index.ts"},{"op":"replace","path":"/metadata/files/17/path","value":"src/sdk/completion.ts"},{"op":"replace","path":"/metadata/files/16/path","value":"src/sdk/cli-contracts/runtime-contracts.ts"},{"op":"replace","path":"/metadata/files/15/path","value":"src/sdk/cli-contracts/grammar-contracts.ts"},{"op":"replace","path":"/metadata/files/14/path","value":"src/sdk/cli-contracts/flag-lexicon-contracts.ts"},{"op":"replace","path":"/metadata/files/13/path","value":"src/sdk/cli-contracts/command-aliases.ts"},{"op":"replace","path":"/metadata/files/12/path","value":"src/sdk/cli-contracts.ts"},{"op":"replace","path":"/metadata/files/11/path","value":"src/sdk/cli-bootstrap.ts"},{"op":"replace","path":"/metadata/files/10/path","value":"src/sdk/agent/item-addressing.ts"},{"op":"replace","path":"/metadata/files/9/path","value":"src/sdk/agent-capability-contracts.ts"},{"op":"replace","path":"/metadata/files/8/path","value":"src/cli/main.ts"},{"op":"replace","path":"/metadata/files/7/note","value":"Namespace discovery compatibility and release verification"},{"op":"replace","path":"/metadata/files/7/path","value":"src/cli/help-json-payload.ts"},{"op":"replace","path":"/metadata/files/6/note","value":"Shared native namespace contracts and verification"},{"op":"replace","path":"/metadata/files/6/path","value":"src/cli/help-content.ts"},{"op":"replace","path":"/metadata/files/5/path","value":"src/cli/command-namespaces.ts"},{"op":"replace","path":"/metadata/files/4/note","value":"Namespace discovery compatibility and release verification"},{"op":"replace","path":"/metadata/files/4/path","value":"sdk/public-surface.json"},{"op":"replace","path":"/metadata/files/3/path","value":"scripts/release/flag-invocation-parity.mjs"},{"op":"replace","path":"/metadata/files/2/note","value":"Keep canonical namespace help measured by unchanged token-surface budgets"},{"op":"replace","path":"/metadata/files/2/path","value":"scripts/measure-agent-token-surface.mjs"},{"op":"replace","path":"/metadata/files/1/note","value":"Rename next and validate identities without increasing budgets"},{"op":"replace","path":"/metadata/files/1/path","value":"scripts/agent-token-surface-baseline.json"},{"op":"replace","path":"/metadata/files/0/note","value":"Latest package-owned changelog generator used for reviewed namespace delivery"},{"op":"replace","path":"/metadata/files/0/path","value":".agents/pm/extensions/.managed-extensions.json"},{"op":"add","path":"/metadata/files/31","value":{"path":"tests/unit/sdk/contracts-full-projection.spec.ts","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T16:46:28.669Z"}],"before_hash":"3901330b6883863d7868a69d55f070b1c9e6fe2fbe5a7c652a58d7143007d625","after_hash":"3eed1978ce91093a86e3abf314e33d8f8349b8885decc0c844bf9823dc3b5c41","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"1cf129cbb95e352cde1394e10707174178a14018596d0b8c9383bb9cef726557"} +{"ts":"2026-09-09T16:47:06.583Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":null,"topic":null},"op":"test_run_track","patch":[{"op":"add","path":"/metadata/test_runs/1","value":{"run_id":"test-local-mtubzqrn-tck45x","kind":"test","status":"passed","started_at":"2026-09-09T16:46:41.382Z","finished_at":"2026-09-09T16:47:06.563Z","recorded_at":"2026-09-09T16:47:06.563Z","passed":2,"failed":0,"skipped":0,"executions":[{"command":"node scripts/run-tests.mjs test -- tests/unit/cli/command-namespaces.spec.ts tests/unit/sdk/cli-contracts tests/integration/context-ops-namespace.integration.spec.ts","requested_pm_context_mode":"schema","pm_context_mode":"schema","workspace_context_mode":"source","trust_reason":"local_source_ref"},{"command":"node scripts/run-tests.mjs test -- tests/unit/scripts/measure-agent-token-surface.spec.ts","requested_pm_context_mode":"schema","pm_context_mode":"schema","workspace_context_mode":"source","trust_reason":"local_source_ref"}]}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T16:47:06.583Z"}],"before_hash":"3eed1978ce91093a86e3abf314e33d8f8349b8885decc0c844bf9823dc3b5c41","after_hash":"ec6a8fe9d6130d025acaa227126e3f065c17fb50dbb5a2169d191e1a03e8bcf3","item_hash_version":3,"message":"Track test run summary (test-local-mtubzqrn-tck45x)","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"cdad03d0d9da32f3b2453be2d2cec045cf6ea1270cb789e6822f148f57dc1e49"} +{"ts":"2026-09-09T16:50:22.303Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"update","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T16:50:22.303Z"},{"op":"replace","path":"/metadata/title","value":"Native pm ops stats, health, validate, gc, telemetry, eval and test-all with compatible root commands"}],"before_hash":"ec6a8fe9d6130d025acaa227126e3f065c17fb50dbb5a2169d191e1a03e8bcf3","after_hash":"d43f138b34d9108d65545c062b61deb8825a2c350197fe34d8fd05b8f8f9bea9","item_hash_version":3,"message":"Name the delivered operations explicitly in the generated changelog","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"c844370799cad5624f69d37e5c5e683a7595668e18b0bd5671dbdea9ec75d075"} +{"ts":"2026-09-09T16:51:31.203Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":null,"topic":null},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/10","value":{"created_at":"2026-09-09T16:51:31.203Z","author":"harness:codex","text":"Review verification: 8639 tests across 655 files passed, exact coverage 100/100/100/100 with zero uncovered counts (63823 statements, 48528 branches, 13252 functions, 61201 lines). Full static quality, typecheck and the 57-surface token gate passed without relaxed existing ceilings. Each canonical linked namespace suite passed 42 tests; the new token-measurement link passed 12 tests. CodeRabbit accepted the three strengthened test assertions. The latest pm-changelog 2026.9.9 is installed; outcome titles feed package-generated release notes. PR 1225 requires a fresh hosted review on the forthcoming push."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T16:51:31.203Z"}],"before_hash":"d43f138b34d9108d65545c062b61deb8825a2c350197fe34d8fd05b8f8f9bea9","after_hash":"61e17e064b0ac937deac0194381b5f23235f13c4f018bc6bee407b35d366be59","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"0136cea0da5e7994145a59e3093ad40680882c6e47392b4f099fd9e926e55d8c"} +{"ts":"2026-09-09T16:51:31.959Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"close","patch":[{"op":"remove","path":"/metadata/assignee"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T16:51:31.959Z"},{"op":"replace","path":"/metadata/status","value":"closed"},{"op":"add","path":"/metadata/closed_at","value":"2026-09-09T16:51:31.916Z"},{"op":"add","path":"/metadata/completed_at","value":"2026-09-09T16:51:31.916Z"},{"op":"add","path":"/metadata/resolution","value":"Native ops diagnostics and maintenance reuse existing SDK operations, retain compatible root commands, and preserve token measurement of canonical core leaves under existing budgets."},{"op":"add","path":"/metadata/expected_result","value":"All operation paths, package boundaries and discovery surfaces remain compatible; canonical help stays inside inherited token ceilings."},{"op":"add","path":"/metadata/actual_result","value":"Full static gates, typecheck, 8639 tests and exact 100/100/100/100 coverage passed; linked acceptance, package behavior and token budget checks passed."},{"op":"add","path":"/metadata/close_reason","value":"Implementation and review corrections verified locally; hosted rereview and merge remain separate delivery evidence."}],"before_hash":"61e17e064b0ac937deac0194381b5f23235f13c4f018bc6bee407b35d366be59","after_hash":"adb156585b43f6d29f38460ad4ae78d824a40912f475a82efc63a65ecf7af1e6","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"649433e9d332ca11be953dddd88a8a50c8aee4349bddb6d5274b02490d0d6dd0"} +{"ts":"2026-09-09T16:51:32.567Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"release","patch":[{"op":"remove","path":"/metadata/claim_principal"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T16:51:32.567Z"}],"before_hash":"adb156585b43f6d29f38460ad4ae78d824a40912f475a82efc63a65ecf7af1e6","after_hash":"2fd2814d8c334fadaf05944aab989dd503b026fc837b40d1c5e298fb0f566053","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"dcaf59fbfd498399676f8dac283440385a2badc3740c0810224857c332441a70"} +{"ts":"2026-09-09T17:13:27.552Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-kcs4","lineage:pm-kcs4","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-kcs4","lineage:pm-kcs4","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"update","patch":[{"op":"remove","path":"/metadata/close_reason"},{"op":"remove","path":"/metadata/actual_result"},{"op":"remove","path":"/metadata/expected_result"},{"op":"remove","path":"/metadata/resolution"},{"op":"remove","path":"/metadata/completed_at"},{"op":"remove","path":"/metadata/closed_at"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T17:13:27.552Z"},{"op":"replace","path":"/metadata/status","value":"in_progress"}],"before_hash":"2fd2814d8c334fadaf05944aab989dd503b026fc837b40d1c5e298fb0f566053","after_hash":"7c06492aed16b59ad07c9ca178b5de4d7754e86d53c558f9aa1ce24eabc24a01","item_hash_version":3,"message":"Document token-measurement test helpers and preserve ratcheted namespace budgets during review","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"5f45d3b7d82b734b7ebf26292a0b819e8597da55a96ca414c9178d98e1cc4fda"} +{"ts":"2026-09-09T17:13:28.146Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-kcs4","lineage:pm-kcs4","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-kcs4","lineage:pm-kcs4","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"claim","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T17:13:28.146Z"},{"op":"add","path":"/metadata/assignee","value":"harness:codex"},{"op":"add","path":"/metadata/claim_principal","value":"harness:codex#5e44b6e6b45de792bb038ba5"}],"before_hash":"7c06492aed16b59ad07c9ca178b5de4d7754e86d53c558f9aa1ce24eabc24a01","after_hash":"5e1db1dbe2874a0a339db46c141b0e2b2c6515a9dc2a7e2cb174a6d474f8bdfd","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"cc1e890d17228edfddcbc488d8a75d1d1a9f4eeae399aa6a138b85ff23a5280d"} +{"ts":"2026-09-09T17:17:24.520Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","claim:pm-kcs4","lineage:pm-6apl","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","claim:pm-kcs4","lineage:pm-6apl","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/11","value":{"created_at":"2026-09-09T17:17:24.520Z","author":"harness:codex","text":"Review round 2: rejected a proposed baseline reset with measured evidence: ops validate 4158 <= 4870 bytes, context next 2112 <= 2165, ops 1446 <= 1591, total help 231168 <= 251257. Regeneration would raise context next to 2324 bytes, violating the retained-ceiling requirement. Added descriptive JSDoc throughout the maintained measurement script and fixture helpers, and inlined its trivial single-use argument-key wrapper. All touched named callables now have JSDoc according to the TypeScript AST."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T17:17:24.520Z"}],"before_hash":"5e1db1dbe2874a0a339db46c141b0e2b2c6515a9dc2a7e2cb174a6d474f8bdfd","after_hash":"816df6cc83b08472dfc03a8ceb039ba36593f76b025a5bbf0d0bf0b3425e176f","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"d3161747a39dae22a961eeca8ad0f46fa7eed9ffd5e35a9d0a38dafb14cf9b81"} +{"ts":"2026-09-09T17:18:47.734Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","claim:pm-kcs4","lineage:pm-6apl","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","claim:pm-kcs4","lineage:pm-6apl","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"test_run_track","patch":[{"op":"add","path":"/metadata/test_runs/2","value":{"run_id":"test-local-mtud4how-dsn5jl","kind":"test","status":"passed","started_at":"2026-09-09T17:18:15.175Z","finished_at":"2026-09-09T17:18:47.695Z","recorded_at":"2026-09-09T17:18:47.695Z","passed":2,"failed":0,"skipped":0,"executions":[{"command":"node scripts/run-tests.mjs test -- tests/unit/cli/command-namespaces.spec.ts tests/unit/sdk/cli-contracts tests/integration/context-ops-namespace.integration.spec.ts","requested_pm_context_mode":"schema","pm_context_mode":"schema","workspace_context_mode":"source","trust_reason":"local_source_ref"},{"command":"node scripts/run-tests.mjs test -- tests/unit/scripts/measure-agent-token-surface.spec.ts","requested_pm_context_mode":"schema","pm_context_mode":"schema","workspace_context_mode":"source","trust_reason":"local_source_ref"}]}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T17:18:47.734Z"}],"before_hash":"816df6cc83b08472dfc03a8ceb039ba36593f76b025a5bbf0d0bf0b3425e176f","after_hash":"673ad603ac41378d933f44427ee39f8dfba0881d42b717698bbb3e158ffa1c67","item_hash_version":3,"message":"Track test run summary (test-local-mtud4how-dsn5jl)","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"9dc2d7a3bc0ac35f531bb7ac75463eaf078153be60b34c751a90cd87eea41e0a"} +{"ts":"2026-09-09T17:37:59.350Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","claim:pm-kcs4","lineage:pm-6apl","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","claim:pm-kcs4","lineage:pm-6apl","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/12","value":{"created_at":"2026-09-09T17:37:59.350Z","author":"harness:codex","text":"Verification note: the first final coverage attempt overlapped full static quality and timed out one existing whole-repository absence-tolerance scan at 30 seconds; 8638 other tests passed. The unchanged focused file then passed all 19 tests in 3.15 seconds. Full static quality completed successfully. A fresh full coverage run is executing alone; no test timeout, exclusion, baseline or coverage threshold was changed."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T17:37:59.350Z"}],"before_hash":"673ad603ac41378d933f44427ee39f8dfba0881d42b717698bbb3e158ffa1c67","after_hash":"fd040b56f5957e9dd71e0c1c491d6a747ff90ee28b7f3df1a330795c330d8eb4","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"856aa15278526de2dea3c80f4ec2a9796cf61d1d3cae1db80e7eca365940e9be"} +{"ts":"2026-09-09T17:39:15.307Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"release-operator","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","release:pm-kcs4"]},"topic":{"value":"pm-6apl","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","release:pm-kcs4"]}},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/13","value":{"created_at":"2026-09-09T17:39:15.307Z","author":"harness:codex","text":"Final review correction verification: the isolated full suite passed 8639 tests in 655 files with exact 100/100/100/100 and zero uncovered counts: 63824 statements, 48530 branches, 13252 functions, 61202 lines. Full static quality and typecheck passed; both items passed both sandboxed linked commands. Real Fish reproduced the original leak and passed context/ctx positives plus focus/next negatives after correction. All touched named callables have descriptive JSDoc by AST inspection; this is scoped evidence, not a repository-wide function-documentation percentage. Every received review artifact was reacted to and replied to; the baseline-reset finding was rejected with unchanged-ceiling measurements. Final hosted verification follows the correction push in PR 1225."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T17:39:15.307Z"}],"before_hash":"fd040b56f5957e9dd71e0c1c491d6a747ff90ee28b7f3df1a330795c330d8eb4","after_hash":"756c5677421cf852142e72cf554d330d1540137a390a868f490483811cbee4e3","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"c4ea4f10ea2eb338ca83daa8cb229d46fc9942ad28ebf8bec4530e025cc395d5"} +{"ts":"2026-09-09T17:39:16.460Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"release-operator","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","release:pm-kcs4"]},"topic":{"value":"pm-6apl","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","release:pm-kcs4"]}},"op":"close","patch":[{"op":"remove","path":"/metadata/assignee"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T17:39:16.460Z"},{"op":"replace","path":"/metadata/status","value":"closed"},{"op":"add","path":"/metadata/closed_at","value":"2026-09-09T17:39:16.400Z"},{"op":"add","path":"/metadata/completed_at","value":"2026-09-09T17:39:16.400Z"},{"op":"add","path":"/metadata/resolution","value":"Delivered native ops diagnostics and maintenance with compatible root aliases and unchanged SDK/MCP operation identities. Canonical namespace help remains measured under inherited token ceilings; maintained measurement helpers are documented."},{"op":"add","path":"/metadata/expected_result","value":"Ops commands preserve machine-readable results and extension ownership while canonical help stays within existing token ceilings."},{"op":"add","path":"/metadata/actual_result","value":"Full static gates, linked tests, typecheck, package acceptance and 8639-test exact coverage passed. Canonical help measurements remain below all existing ceilings; baseline values were not relaxed."},{"op":"add","path":"/metadata/close_reason","value":"Implementation and review corrections verified for PR 1225."}],"before_hash":"756c5677421cf852142e72cf554d330d1540137a390a868f490483811cbee4e3","after_hash":"fc33539e8b0b4a60dd5af4bd052c65d9dc2354018f5c922bdf2fc0e6eb996f4a","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"c15f35295965e30e37a497d14cdfc0508eeb4e80dd34fcc6797008f9bcc8ce44"} +{"ts":"2026-09-09T17:39:17.490Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"release-operator","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","release:pm-kcs4"]},"topic":{"value":"pm-6apl","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","release:pm-kcs4"]}},"op":"release","patch":[{"op":"remove","path":"/metadata/claim_principal"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T17:39:17.490Z"}],"before_hash":"fc33539e8b0b4a60dd5af4bd052c65d9dc2354018f5c922bdf2fc0e6eb996f4a","after_hash":"f2e2ea75d3c2ca6fe0659612cca7790cbb392795a01ac608a3f48e9f439ed12a","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"5abda491fa7b9312db65d45c0c5ea7bacf1f7a6655d3a8fba4e17063f83469d5"} diff --git a/.agents/pm/history/pm-euqm7x.jsonl b/.agents/pm/history/pm-euqm7x.jsonl index c18f85a09..da8bc2f99 100644 --- a/.agents/pm/history/pm-euqm7x.jsonl +++ b/.agents/pm/history/pm-euqm7x.jsonl @@ -45,3 +45,5 @@ {"ts":"2026-09-05T05:47:57.761Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"81580b7f6e74cc5c635f728f","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"high","source":"probe"},"role":{"value":"release-operator","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-euqm7x","release:pm-08mt4k"]},"topic":{"value":"pm-euqm7x","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-euqm7x","release:pm-08mt4k"]}},"op":"close","patch":[{"op":"remove","path":"/metadata/assignee"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-05T05:47:57.761Z"},{"op":"replace","path":"/metadata/status","value":"closed"},{"op":"add","path":"/metadata/closed_at","value":"2026-09-05T05:47:57.720Z"},{"op":"add","path":"/metadata/completed_at","value":"2026-09-05T05:47:57.720Z"},{"op":"add","path":"/metadata/resolution","value":"Windows verifier cleanup fixture uses the production readiness deadline with bounded harness headroom, and canonical PM test_runs now records a fresh successful verifier and coverage execution."},{"op":"add","path":"/metadata/expected_result","value":"Preserve historical failures while recording a current successful structured run through trusted sandboxed linked commands."},{"op":"add","path":"/metadata/actual_result","value":"test-local-mtnymukk-ufy7hi passed both canonical commands, zero failed or skipped; focused verifier 31 tests and full coverage 8422 tests pass. Prior foreign-source trust refusal remains preserved and classified in comments."},{"op":"add","path":"/metadata/close_reason","value":"Implementation and review corrections verified; PR publication remains a separate operational claim."}],"before_hash":"56d7204d210ca589ceae6406285f6484c78e624c3e3b79e972c0c19803a36a33","after_hash":"270307ec90d9f172fb7f382d8b8b0200c600c486a96f5c93b6fcb2b9a3d91087","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"1f671cdf7cd579c51f814c8a34176b5b8fb52f10fe77b9167bae9e76be2025d0"} {"ts":"2026-09-05T05:47:58.280Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"81580b7f6e74cc5c635f728f","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"high","source":"probe"},"role":{"value":"release-operator","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-euqm7x","release:pm-08mt4k"]},"topic":{"value":"pm-euqm7x","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-euqm7x","release:pm-08mt4k"]}},"op":"release","patch":[{"op":"remove","path":"/metadata/claim_principal"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-05T05:47:58.280Z"}],"before_hash":"270307ec90d9f172fb7f382d8b8b0200c600c486a96f5c93b6fcb2b9a3d91087","after_hash":"5383111b47860f4e94f02202bd633cc65f406c84d038390613c2704975051d20","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"939f941e50818adbadffe59244e1c0f5c31c4d16f39035a9ae7fbde2bf20af5a"} {"ts":"2026-09-05T05:55:15.735Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"81580b7f6e74cc5c635f728f","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"high","source":"probe"},"role":null,"topic":null},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/11","value":{"created_at":"2026-09-05T05:55:15.735Z","author":"harness:codex","text":"Final consolidated rereview correction passed pnpm quality:static after all item closures, full typecheck, 8422 tests / 608 files at exact 100/100/100/100, and the real 8-task transcript corpus. Latest pm-changelog regenerated the reviewed changelog; no active item ownership remains. The fresh canonical verifier/coverage test run has passed=2, failed=0. New hosted review and publication remain separate subsequent evidence."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-05T05:55:15.735Z"}],"before_hash":"5383111b47860f4e94f02202bd633cc65f406c84d038390613c2704975051d20","after_hash":"774a17a715059dd0d9f94d2b540e74b598cf5637495d8e4f5a6fcce29f2410d8","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"3441b0e32a4b0d67225973800803cd62374b2db0db17d023ba797b89bdcaff47"} +{"ts":"2026-09-09T16:41:17.901Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":null,"topic":null},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/12","value":{"created_at":"2026-09-09T16:41:17.901Z","author":"harness:codex","text":"GH-1226 recurrence evidence: scheduled Nightly Validation run 34331273789 at 9181e96779f7b1eba6f71aaa51a54c821c43c745 failed only the nested HTTP server invalid-discovery assertion on Windows Node 24. The evaluator returned its explicit readiness-timeout diagnostic; unlike the repaired historical empty-stderr case, the outer harness did not preempt cleanup. Requested an unchanged-source failed-job rerun to distinguish transient startup pressure from a reproducible defect. No thresholds or timeout contracts were changed."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T16:41:17.901Z"}],"before_hash":"774a17a715059dd0d9f94d2b540e74b598cf5637495d8e4f5a6fcce29f2410d8","after_hash":"e06b09f128be4d2a2f62d148feb86f6bc26cc066b6248bfab29cfec9eea5b335","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"3188a34dfb0435bf8a0f6c370d3c948890d6357049b5392cdc9ccbb23bac8c27"} +{"ts":"2026-09-09T16:56:39.327Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":null,"topic":null},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/13","value":{"created_at":"2026-09-09T16:56:39.326Z","author":"harness:codex","text":"GH-1226 final discriminator: failed-job rerun attempt 2 of Nightly Validation 34331273789 passed on unchanged source 9181e96779f7b1eba6f71aaa51a54c821c43c745. Windows Node 24 and every retained matrix leg are green. This establishes an intermittent readiness-timeout occurrence, not a source repair; the original failing attempt and strict invalid-discovery assertion remain preserved. No timeout, assertion or gate was relaxed. The public 2026.9.9 package independently passed all npx/bunx CLI and MCP entrypoints."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T16:56:39.327Z"}],"before_hash":"e06b09f128be4d2a2f62d148feb86f6bc26cc066b6248bfab29cfec9eea5b335","after_hash":"5c48b6355015be21b72e71740167456f1b0996a11ae93ef32bdfeceeb4c3859b","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"1529486785cd2aa20582c48cf51d4dd1d1acec16df59c1b681c1b2245d58fc60"} diff --git a/.agents/pm/history/pm-kcs4.jsonl b/.agents/pm/history/pm-kcs4.jsonl index 10ed71c81..86e1dccd6 100644 --- a/.agents/pm/history/pm-kcs4.jsonl +++ b/.agents/pm/history/pm-kcs4.jsonl @@ -3,3 +3,36 @@ {"ts":"2026-07-26T05:55:23.189Z","author":"harness:claude-code","author_source":"detected","agent_harness":"claude-code","op":"update","patch":[{"op":"add","path":"/metadata/dependencies/4","value":{"id":"pm-n7rr","kind":"implements","created_at":"2026-07-26T05:55:22.960Z"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-07-26T05:55:23.189Z"}],"before_hash":"dbaf11896fee04d2d7f9a1072f3654dcaba2778415e59c19a6a67bfec6b50afc","after_hash":"2a4109e8f2985086d261f9a07328229664125d2ea9ce63cceb8213a79e885396","message":"Strategic reachability edge: mirror the hierarchy rung into the typed layer so every active item resolves to an outcome milestone through an explainable implements path (pm-bzmeaa invariant), which the parent chain alone cannot express because it terminates at the roadmap root rather than at an outcome"} {"ts":"2026-07-31T06:08:46.726Z","author":"harness:claude-code","author_source":"detected","agent_harness":"claude-code","agent_instance":"bbccd5ce4f6ac18346c324e7","agent_provenance":{"model":null,"effort":{"value":"xhigh","source":"environment"}},"op":"update","patch":[{"op":"add","path":"/metadata/dependencies/5","value":{"id":"pm-hb7ug8","kind":"blocked_by","created_at":"2026-07-31T06:08:46.480Z","author":"harness:claude-code","source_kind":"cli:update:dep","author_source":"detected"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-07-31T06:08:46.726Z"}],"before_hash":"2a4109e8f2985086d261f9a07328229664125d2ea9ce63cceb8213a79e885396","after_hash":"4cdbec58a247f164355994b122ef64072ecc6ea247142a0f3f5c983468bd9972","message":"Sequencing evidence 2026-07-31: 18 output-bounding flag spellings across 19 read commands, widest pairwise availability disagreement 10, four read surfaces with zero bounding flags; two recorded simplification axes conclude noun consolidation is a null move until the bounding set is uniform"} {"ts":"2026-09-08T13:32:55.294Z","author":"harness:claude-code","author_source":"detected","agent_harness":"claude-code","agent_model":"claude-fable-5-1","agent_model_source":"probe","agent_instance":"72ded8f654edba84116a543f","agent_provenance":{"model":{"value":"claude-fable-5-1","source":"probe"},"effort":{"value":"xhigh","source":"environment"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-n8a6e7","lineage:pm-n8a6e7","lineage:pm-ydp6","lineage:pm-doxj"]},"topic":{"value":"pm-n8a6e7","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-n8a6e7","lineage:pm-n8a6e7","lineage:pm-ydp6","lineage:pm-doxj"]},"version":{"value":"2.1.263","source":"probe"}},"op":"update","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-08T13:32:55.294Z"},{"op":"add","path":"/metadata/expected_result","value":"next and focus are verbs of the context noun with identical payloads, and pm next and pm focus keep working forever as aliases."}],"before_hash":"4cdbec58a247f164355994b122ef64072ecc6ea247142a0f3f5c983468bd9972","after_hash":"c26ff1057506d1c3d2e874b89d564557d0d8b3728f13bec3dbb41d4817a7372e","item_hash_version":3,"message":"Record the observable end state this item is expected to produce","event_class":"maintenance","record_hash_version":1,"record_hash":"003f3387f74f85197124cb3bff27a7c4cf3d2d10d1d23904cd94bc4bd52faaf5"} +{"ts":"2026-09-09T04:08:02.439Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"claim","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:08:02.439Z"},{"op":"add","path":"/metadata/assignee","value":"harness:codex"},{"op":"add","path":"/metadata/claim_principal","value":"harness:codex#64e674a82ebbe431153d7b1d"}],"before_hash":"c26ff1057506d1c3d2e874b89d564557d0d8b3728f13bec3dbb41d4817a7372e","after_hash":"82d43e5bab456dc7bed6f7603123d2c30564297f25ba3ccf9b83455a47bc31b0","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"a028f91c45230e2b41a55a9f8f185b1079a06be27005967f25692ffbf195d605"} +{"ts":"2026-09-09T04:08:03.088Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-kcs4","lineage:pm-kcs4","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-kcs4","lineage:pm-kcs4","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"update","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:08:03.088Z"},{"op":"replace","path":"/metadata/status","value":"in_progress"}],"before_hash":"82d43e5bab456dc7bed6f7603123d2c30564297f25ba3ccf9b83455a47bc31b0","after_hash":"95df662b769599b6da8e49ee774ac75a3ec42eec0526c94eba968bdfcc29ec3b","item_hash_version":3,"message":"Implement context navigation namespace with SDK-owned compatibility contracts","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"1c71b825dfe756568ef42b61e0816ed3a127c865f97ea9747a38a11c834096e8"} +{"ts":"2026-09-09T04:24:13.593Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"files_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:24:13.593Z"},{"op":"add","path":"/metadata/files","value":[{"path":"src/cli/command-namespaces.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/cli/help-content.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/cli/main.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/agent-capability-contracts.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/agent/item-addressing.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/cli-bootstrap.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/cli-contracts.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/cli-contracts/command-aliases.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/cli-contracts/flag-lexicon-contracts.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/cli-contracts/grammar-contracts.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/cli-contracts/runtime-contracts.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/completion.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"src/sdk/index.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"tests/integration/context-ops-namespace.integration.spec.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"tests/unit/cli/command-namespaces.spec.ts","scope":"project","note":"Shared native namespace contracts and verification"},{"path":"tests/unit/sdk/cli-contracts/grammar-contracts.spec.ts","scope":"project","note":"Shared native namespace contracts and verification"}]}],"before_hash":"95df662b769599b6da8e49ee774ac75a3ec42eec0526c94eba968bdfcc29ec3b","after_hash":"bcf8187ad74e3db36bd03dc24bd6ec7da814b05c941e2195b80ece83cf32f36a","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"ddd03b2f9e2d10f1e591b354b393ebb7121d78a18278dbf4f48ff4a38ab47242"} +{"ts":"2026-09-09T04:24:14.160Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"docs_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:24:14.160Z"},{"op":"add","path":"/metadata/docs","value":[{"path":"docs/COMMAND_NAMESPACES.md","scope":"project","note":"Native commands compatibility and package ownership"}]}],"before_hash":"bcf8187ad74e3db36bd03dc24bd6ec7da814b05c941e2195b80ece83cf32f36a","after_hash":"ac7e5357736a82e8fbd00dc21c94120aba7bbc361d37d8bfb2d4fc9d0d443388","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"196ac5efa582061f25e6d3b338d8e8b0fb86807b92dfe030cb139650228c6f3b"} +{"ts":"2026-09-09T04:24:14.725Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"tests_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:24:14.725Z"},{"op":"add","path":"/metadata/tests","value":[{"command":"node scripts/run-tests.mjs test -- tests/unit/cli/command-namespaces.spec.ts tests/unit/sdk/cli-contracts tests/integration/context-ops-namespace.integration.spec.ts","scope":"project","timeout_seconds":240,"provenance":{"author":"harness:codex","created_at":"2026-09-09T04:24:14.680Z","source_kind":"local_mutation","source_ref":"feat/context-ops-command-namespaces"}}]}],"before_hash":"ac7e5357736a82e8fbd00dc21c94120aba7bbc361d37d8bfb2d4fc9d0d443388","after_hash":"df11e5fa07f3ba2f98f4826e939f4535e81fa688b6c0a24ec4f5145ea0cd3709","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"79f145de3a140ded8effe72e23160c8c69b0d15d6bb92cc397036a6dfd1022cd"} +{"ts":"2026-09-09T04:24:15.265Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"comment_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:24:15.265Z"},{"op":"add","path":"/metadata/comments","value":[{"created_at":"2026-09-09T04:24:15.265Z","author":"harness:codex","text":"Implementation evidence: native command node placement preserves existing SDK handlers; bootstrap aliases, runtime contracts, capability routing, package availability, positional addressing, and three shell completions share declared mappings. TDD reproduced missing namespace support, then verified native/legacy argv and real isolated tracker reads. Broader quality gates and package acceptance are in progress."}]}],"before_hash":"df11e5fa07f3ba2f98f4826e939f4535e81fa688b6c0a24ec4f5145ea0cd3709","after_hash":"475352fa59a11b6130066fabcd15aeb472fbb6af724d37877bb6b917d6ff353f","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"c2e6aa4b7162e70a5d6a7ed7dc79ff73ab09a544b6ca80023c075b7b7a9e9a1a"} +{"ts":"2026-09-09T04:42:03.981Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"files_add","patch":[{"op":"replace","path":"/metadata/files/15/path","value":"src/sdk/index.ts"},{"op":"replace","path":"/metadata/files/14/path","value":"src/sdk/completion.ts"},{"op":"replace","path":"/metadata/files/13/path","value":"src/sdk/cli-contracts/runtime-contracts.ts"},{"op":"replace","path":"/metadata/files/12/path","value":"src/sdk/cli-contracts/grammar-contracts.ts"},{"op":"replace","path":"/metadata/files/11/path","value":"src/sdk/cli-contracts/flag-lexicon-contracts.ts"},{"op":"replace","path":"/metadata/files/10/path","value":"src/sdk/cli-contracts/command-aliases.ts"},{"op":"replace","path":"/metadata/files/9/path","value":"src/sdk/cli-contracts.ts"},{"op":"replace","path":"/metadata/files/8/path","value":"src/sdk/cli-bootstrap.ts"},{"op":"replace","path":"/metadata/files/7/path","value":"src/sdk/agent/item-addressing.ts"},{"op":"replace","path":"/metadata/files/6/path","value":"src/sdk/agent-capability-contracts.ts"},{"op":"replace","path":"/metadata/files/5/path","value":"src/cli/main.ts"},{"op":"replace","path":"/metadata/files/4/note","value":"Namespace discovery compatibility and release verification"},{"op":"replace","path":"/metadata/files/4/path","value":"src/cli/help-json-payload.ts"},{"op":"replace","path":"/metadata/files/3/path","value":"src/cli/help-content.ts"},{"op":"replace","path":"/metadata/files/2/path","value":"src/cli/command-namespaces.ts"},{"op":"replace","path":"/metadata/files/1/note","value":"Namespace discovery compatibility and release verification"},{"op":"replace","path":"/metadata/files/1/path","value":"sdk/public-surface.json"},{"op":"replace","path":"/metadata/files/0/note","value":"Namespace discovery compatibility and release verification"},{"op":"replace","path":"/metadata/files/0/path","value":"scripts/release/flag-invocation-parity.mjs"},{"op":"add","path":"/metadata/files/16","value":{"path":"tests/fixtures/contracts/full.json","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/files/17","value":{"path":"tests/integration/context-ops-namespace.integration.spec.ts","scope":"project","note":"Shared native namespace contracts and verification"}},{"op":"add","path":"/metadata/files/18","value":{"path":"tests/integration/contract-command-enumeration.integration.spec.ts","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/files/19","value":{"path":"tests/integration/help-runtime.spec.ts","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/files/20","value":{"path":"tests/integration/release-readiness-runtime.spec.ts","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/files/21","value":{"path":"tests/unit/cli/command-namespaces.spec.ts","scope":"project","note":"Shared native namespace contracts and verification"}},{"op":"add","path":"/metadata/files/22","value":{"path":"tests/unit/commands/completion-command.spec.ts","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/files/23","value":{"path":"tests/unit/commands/contracts-command.spec.ts","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/files/24","value":{"path":"tests/unit/sdk/cli-contracts/grammar-contracts.spec.ts","scope":"project","note":"Shared native namespace contracts and verification"}},{"op":"add","path":"/metadata/files/25","value":{"path":"tests/unit/sdk/contracts-full-projection.spec.ts","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:42:03.981Z"}],"before_hash":"475352fa59a11b6130066fabcd15aeb472fbb6af724d37877bb6b917d6ff353f","after_hash":"f90eac6e9baaabe6134de5db7cccecf5aeac018e2ea47800bd88aba8240da326","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"87047f7fd431f779dd6dc5de3b8a6f8e72cb37a7a62369456ba9c974aa855805"} +{"ts":"2026-09-09T04:42:04.561Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"docs_add","patch":[{"op":"add","path":"/metadata/docs/1","value":{"path":"docs/generated/AGENT_CAPABILITY_ROUTING.md","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/docs/2","value":{"path":"docs/generated/AGENT_COMMAND_SURFACE.md","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/docs/3","value":{"path":"docs/generated/FLAG_LEXICON_BUDGETS.md","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/docs/4","value":{"path":"docs/README.md","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/docs/5","value":{"path":"packages/pm-governance-audit/README.md","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"add","path":"/metadata/docs/6","value":{"path":"packages/pm-search-advanced/README.md","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:42:04.561Z"}],"before_hash":"f90eac6e9baaabe6134de5db7cccecf5aeac018e2ea47800bd88aba8240da326","after_hash":"666ad9ce4db4ee07757a72d745d3f1dc97647e0a575697467f4752b5e488df26","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"f09e319aec123ba61392633f818ef5c4a56d3fbb05b0f43c4b823fc0e3042a50"} +{"ts":"2026-09-09T04:42:05.181Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/1","value":{"created_at":"2026-09-09T04:42:05.181Z","author":"harness:codex","text":"Verification update: focused native/legacy and help/contract suite exercised 271 cases; 270 passed and one obsolete package-hint expectation was corrected. Native JSON help now retains optional-package installation recovery. GitHub live inventory found no open issues or PRs and no open Dependabot/code-scanning/secret-scanning alerts. Full coverage and static gates must finish before closure."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:42:05.181Z"}],"before_hash":"666ad9ce4db4ee07757a72d745d3f1dc97647e0a575697467f4752b5e488df26","after_hash":"69b7e23731e144c50bc0f6e80e8933da91df178e6991511bd740d2228ad4679e","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"0520ad5af01dac05be7b838bb7d15057161f121ce90bd1da7e9ea6248d5f214b"} +{"ts":"2026-09-09T04:56:37.104Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/2","value":{"created_at":"2026-09-09T04:56:37.103Z","author":"harness:codex","text":"Coverage checkpoint: all 8,637 tests passed; exact global coverage reported 99.99 statements, 99.98 branches, 99.98 functions, 99.99 lines. Added behavioral cases for the remaining eight branches, two functions and one line without exclusions or threshold changes; 26 focused tests now pass. Compact summary now suppresses duplicate root aliases only in unscoped summary mode, retaining full and explicit alias contracts; the unchanged completed-task token gate passes."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T04:56:37.104Z"}],"before_hash":"69b7e23731e144c50bc0f6e80e8933da91df178e6991511bd740d2228ad4679e","after_hash":"a2fd4401249b83dada9855e749707940319da3e50788d15a55479fda4b370e4a","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"94154b7cdc354b411d6d5b73cb2a81036f62ed50987de20dce0ad20b8f321f81"} +{"ts":"2026-09-09T05:12:15.513Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"files_add","patch":[{"op":"replace","path":"/metadata/files/25/note","value":"Shared native namespace contracts and verification"},{"op":"replace","path":"/metadata/files/25/path","value":"tests/unit/sdk/cli-contracts/grammar-contracts.spec.ts"},{"op":"replace","path":"/metadata/files/24/note","value":"Namespace discovery compatibility and release verification"},{"op":"replace","path":"/metadata/files/24/path","value":"tests/unit/commands/contracts-command.spec.ts"},{"op":"replace","path":"/metadata/files/23/path","value":"tests/unit/commands/completion-command.spec.ts"},{"op":"replace","path":"/metadata/files/22/note","value":"Shared native namespace contracts and verification"},{"op":"replace","path":"/metadata/files/22/path","value":"tests/unit/cli/command-namespaces.spec.ts"},{"op":"replace","path":"/metadata/files/21/note","value":"Namespace discovery compatibility and release verification"},{"op":"replace","path":"/metadata/files/21/path","value":"tests/integration/release-readiness-runtime.spec.ts"},{"op":"replace","path":"/metadata/files/20/path","value":"tests/integration/help-runtime.spec.ts"},{"op":"replace","path":"/metadata/files/19/path","value":"tests/integration/contract-command-enumeration.integration.spec.ts"},{"op":"replace","path":"/metadata/files/18/note","value":"Shared native namespace contracts and verification"},{"op":"replace","path":"/metadata/files/18/path","value":"tests/integration/context-ops-namespace.integration.spec.ts"},{"op":"replace","path":"/metadata/files/17/note","value":"Exercise real source handlers through shared output capture for truthful CLI coverage"},{"op":"replace","path":"/metadata/files/17/path","value":"tests/helpers/cliRunner.ts"},{"op":"add","path":"/metadata/files/26","value":{"path":"tests/unit/sdk/contracts-full-projection.spec.ts","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:12:15.513Z"}],"before_hash":"a2fd4401249b83dada9855e749707940319da3e50788d15a55479fda4b370e4a","after_hash":"fcb3d7a288de2fa38a08d91b47cdc4a88b02bbe0f7e4fa33137bfd9bb1100386","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"35faba994d3593ba205584f5861eca5f3ae3539625cab8ec09978a95aaf8dd44"} +{"ts":"2026-09-09T05:13:09.310Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"test_run_track","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:13:09.310Z"},{"op":"add","path":"/metadata/test_runs","value":[{"run_id":"test-local-mttn7b8b-r62xzt","kind":"test","status":"passed","started_at":"2026-09-09T05:12:46.368Z","finished_at":"2026-09-09T05:13:09.274Z","recorded_at":"2026-09-09T05:13:09.274Z","passed":1,"failed":0,"skipped":0,"executions":[{"command":"node scripts/run-tests.mjs test -- tests/unit/cli/command-namespaces.spec.ts tests/unit/sdk/cli-contracts tests/integration/context-ops-namespace.integration.spec.ts","requested_pm_context_mode":"schema","pm_context_mode":"schema","workspace_context_mode":"source","trust_reason":"local_source_ref"}]}]}],"before_hash":"fcb3d7a288de2fa38a08d91b47cdc4a88b02bbe0f7e4fa33137bfd9bb1100386","after_hash":"ab7a8afe3b634e279982a2e0f0d0df88a1ef72af991afdba67ce88fb8356587f","item_hash_version":3,"message":"Track test run summary (test-local-mttn7b8b-r62xzt)","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"4c21ba4b4e7364dcb13594100886bb2f77abca0e0fe66ff7206d83c1696416b8"} +{"ts":"2026-09-09T05:15:20.146Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/3","value":{"created_at":"2026-09-09T05:15:20.146Z","author":"harness:codex","text":"Verification: linked sandbox-safe suite passed 42 tests across 8 files. Final typecheck passed across source, SDK type tests, packages, and examples. Compact contracts summary measured 4075 tokens versus the unchanged 4111-token ceiling; composite task measured 12631 versus 12667. Native context defaults and focus persistence passed real temporary-workspace and independent npm/Bun package acceptance."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:15:20.146Z"}],"before_hash":"ab7a8afe3b634e279982a2e0f0d0df88a1ef72af991afdba67ce88fb8356587f","after_hash":"d9a4c5c5952f76f1a0079e306b3b6e4cd7fa1baa457a85a00888e2c02dc9ddd5","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"da40c44e2691ddeda63efddbe8a6655ea1e3261fa864e437fe23aac8ce96eb4a"} +{"ts":"2026-09-09T05:19:57.338Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"learning_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:19:57.338Z"},{"op":"add","path":"/metadata/learnings","value":[{"created_at":"2026-09-09T05:19:57.338Z","author":"harness:codex","text":"Keep command spelling normalization separate from SDK operation identity: namespace discovery can change without changing context selection, focus persistence, extension hooks, or MCP actions."}]}],"before_hash":"d9a4c5c5952f76f1a0079e306b3b6e4cd7fa1baa457a85a00888e2c02dc9ddd5","after_hash":"43fe680e2cda198950f5acfde3c9fb4b3da2bca0f46a99e72e2db283f5546e7d","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"c58f9251ee5b1945967caf1ec30bdc18c80a0b14d858120b749fe1d50416ef7d"} +{"ts":"2026-09-09T05:23:13.035Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"docs_add","patch":[{"op":"replace","path":"/metadata/docs/6/path","value":"packages/pm-governance-audit/README.md"},{"op":"replace","path":"/metadata/docs/5/path","value":"docs/README.md"},{"op":"replace","path":"/metadata/docs/4/path","value":"docs/generated/FLAG_LEXICON_BUDGETS.md"},{"op":"replace","path":"/metadata/docs/3/path","value":"docs/generated/AGENT_COMMAND_SURFACE.md"},{"op":"replace","path":"/metadata/docs/2/path","value":"docs/generated/AGENT_CAPABILITY_ROUTING.md"},{"op":"replace","path":"/metadata/docs/1/note","value":"Native commands compatibility and package ownership"},{"op":"replace","path":"/metadata/docs/1/path","value":"docs/COMMAND_NAMESPACES.md"},{"op":"replace","path":"/metadata/docs/0/note","value":"Package-generated reviewed delivery attribution"},{"op":"replace","path":"/metadata/docs/0/path","value":"CHANGELOG.md"},{"op":"add","path":"/metadata/docs/7","value":{"path":"packages/pm-search-advanced/README.md","scope":"project","note":"Namespace discovery compatibility and release verification"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:23:13.035Z"}],"before_hash":"43fe680e2cda198950f5acfde3c9fb4b3da2bca0f46a99e72e2db283f5546e7d","after_hash":"1bd69d9048bae1ef0a841a5c3868b036429e587b15a65d5ad9f407f1d06c5a6f","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"5cb9f0b5c94bc2f9f3589bef4c135bb1bc24159ffd87dc715c2ec3cdd27f8957"} +{"ts":"2026-09-09T05:29:21.198Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/4","value":{"created_at":"2026-09-09T05:29:21.198Z","author":"harness:codex","text":"Final verification: 8639 tests in 655 files passed; exact coverage 100/100/100/100 with zero uncovered counts (63818 statements, 48528 branches, 13248 functions, 61196 lines). Full static gates and source documentation requirements passed without relaxed thresholds. Linked suites, typecheck, secret scan, native/legacy temporary-workspace acceptance, real package installation, independent npm/Bun SDK consumers, and npx/bunx packed smoke with 13 packages passed. GitHub issue/PR and security alert inventories were clear before opening this delivery PR."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:29:21.198Z"}],"before_hash":"1bd69d9048bae1ef0a841a5c3868b036429e587b15a65d5ad9f407f1d06c5a6f","after_hash":"f1f062ca41ff3733052468e9044da9b498a1c21f7354f9a5904315c5bffafaae","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"b12c6777669529d1103e90fd4eb3d477d187699c119b321946934ba1b5cc0da8"} +{"ts":"2026-09-09T05:29:21.856Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"close","patch":[{"op":"replace","path":"/metadata/expected_result","value":"Native context navigation and legacy aliases preserve payloads and focus persistence with bounded discovery."},{"op":"remove","path":"/metadata/assignee"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:29:21.856Z"},{"op":"replace","path":"/metadata/status","value":"closed"},{"op":"add","path":"/metadata/closed_at","value":"2026-09-09T05:29:21.810Z"},{"op":"add","path":"/metadata/completed_at","value":"2026-09-09T05:29:21.810Z"},{"op":"add","path":"/metadata/resolution","value":"Delivered native context next and context focus with permanent compatibility aliases and unchanged SDK semantics."},{"op":"add","path":"/metadata/actual_result","value":"All namespace acceptance checks passed; 8639 tests and exact 100/100/100/100 coverage; full static and distribution gates passed."},{"op":"add","path":"/metadata/close_reason","value":"Implementation and verification complete; closure and changelog are included in the reviewed delivery."}],"before_hash":"f1f062ca41ff3733052468e9044da9b498a1c21f7354f9a5904315c5bffafaae","after_hash":"68e9a14fcc71362b81ef72ff0c9bdb409a2c0dee09e98f95186e99cfae390458","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"8296a2ad3d1c0e02cc204f2f4289d7cc053a500e4f0373699f2e776ca9f59921"} +{"ts":"2026-09-09T05:29:22.434Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"release","patch":[{"op":"remove","path":"/metadata/claim_principal"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:29:22.434Z"}],"before_hash":"68e9a14fcc71362b81ef72ff0c9bdb409a2c0dee09e98f95186e99cfae390458","after_hash":"8e50625940e638daf939f7f611158eeb619e57e5be9e885b79cc04020a59a8bf","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"c22ff5ea65cefcec597752a67af374d6a0276aa5ed859d17dcb438a14e0648ec"} +{"ts":"2026-09-09T05:58:44.366Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"update","patch":[{"op":"remove","path":"/metadata/close_reason"},{"op":"remove","path":"/metadata/actual_result"},{"op":"remove","path":"/metadata/expected_result"},{"op":"remove","path":"/metadata/resolution"},{"op":"remove","path":"/metadata/completed_at"},{"op":"remove","path":"/metadata/closed_at"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:58:44.366Z"},{"op":"replace","path":"/metadata/status","value":"in_progress"}],"before_hash":"8e50625940e638daf939f7f611158eeb619e57e5be9e885b79cc04020a59a8bf","after_hash":"fb2eba9069c2ca41b888e06f442bf0008895df5a79250db22d6c7e7aa8975b62","item_hash_version":3,"message":"Reopen for PR 1225 reviewer improvements and final CI namespace baseline correction","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"3c6df1ada7e8c3363c6dc22eda584f84ec1b78a02aceb6fd941893881ef246e1"} +{"ts":"2026-09-09T05:58:44.883Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"claim","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T05:58:44.883Z"},{"op":"add","path":"/metadata/assignee","value":"harness:codex"},{"op":"add","path":"/metadata/claim_principal","value":"harness:codex#64e674a82ebbe431153d7b1d"}],"before_hash":"fb2eba9069c2ca41b888e06f442bf0008895df5a79250db22d6c7e7aa8975b62","after_hash":"010d626b72cecb925d8224827a45852d9074207a21322a9a6b2148c25af85aac","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"26b04c1431767e7258d68d315dfc5f7ab1dad0ae66e532f9322b85140530a709"} +{"ts":"2026-09-09T06:02:43.678Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"64e674a82ebbe431153d7b1d","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-3i9q8g+pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-3i9q8g","claim:pm-6apl","claim:pm-kcs4","lineage:pm-3i9q8g","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"update","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T06:02:43.678Z"},{"op":"replace","path":"/metadata/title","value":"Native pm context next and pm context focus with permanent navigation aliases"}],"before_hash":"010d626b72cecb925d8224827a45852d9074207a21322a9a6b2148c25af85aac","after_hash":"776811dfc4a2c7f06ff068c4144eba4a427e6524dd7f7f43ace625d28695efdc","item_hash_version":3,"message":"Use delivered namespace behavior in package-generated changelog per PR 1225 review","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"3556aa968c7b7723bc6382b9cf41087db0072648fd99f79cad0e3df9ba0b96d5"} +{"ts":"2026-09-09T16:46:40.025Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":null,"topic":null},"op":"test_run_track","patch":[{"op":"add","path":"/metadata/test_runs/1","value":{"run_id":"test-local-mtubz69r-4doqoh","kind":"test","status":"passed","started_at":"2026-09-09T16:46:16.728Z","finished_at":"2026-09-09T16:46:39.999Z","recorded_at":"2026-09-09T16:46:39.999Z","passed":1,"failed":0,"skipped":0,"executions":[{"command":"node scripts/run-tests.mjs test -- tests/unit/cli/command-namespaces.spec.ts tests/unit/sdk/cli-contracts tests/integration/context-ops-namespace.integration.spec.ts","requested_pm_context_mode":"schema","pm_context_mode":"schema","workspace_context_mode":"source","trust_reason":"local_source_ref"}]}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T16:46:40.025Z"}],"before_hash":"776811dfc4a2c7f06ff068c4144eba4a427e6524dd7f7f43ace625d28695efdc","after_hash":"44c7011d7e530996eedb9df495052c21c25998aade4af9af14ed4ac206bc486e","item_hash_version":3,"message":"Track test run summary (test-local-mtubz69r-4doqoh)","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"acb2b3ed0d150abc0bd9a1565a93fc6ce0aa333c3d1fbe4348a20a9316622096"} +{"ts":"2026-09-09T16:51:27.523Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":null,"topic":null},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/5","value":{"created_at":"2026-09-09T16:51:27.523Z","author":"harness:codex","text":"Review verification: 8639 tests across 655 files passed, exact coverage 100/100/100/100 with zero uncovered counts (63823 statements, 48528 branches, 13252 functions, 61201 lines). Full static quality, typecheck and the 57-surface token gate passed without relaxed existing ceilings. Each canonical linked namespace suite passed 42 tests; the new token-measurement link passed 12 tests. CodeRabbit accepted the three strengthened test assertions. The latest pm-changelog 2026.9.9 is installed; outcome titles feed package-generated release notes. PR 1225 requires a fresh hosted review on the forthcoming push."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T16:51:27.523Z"}],"before_hash":"44c7011d7e530996eedb9df495052c21c25998aade4af9af14ed4ac206bc486e","after_hash":"48bce6b503d0bb2617b100eb8ef5627bd8834f7547a2da3e0bb0ee6e0c828629","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"5f9cc8057e83a867361b6785f4bedd32aac871504f17507382b8e2ccc6426787"} +{"ts":"2026-09-09T16:51:29.985Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"close","patch":[{"op":"remove","path":"/metadata/assignee"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T16:51:29.985Z"},{"op":"replace","path":"/metadata/status","value":"closed"},{"op":"add","path":"/metadata/closed_at","value":"2026-09-09T16:51:29.972Z"},{"op":"add","path":"/metadata/completed_at","value":"2026-09-09T16:51:29.972Z"},{"op":"add","path":"/metadata/resolution","value":"Native context next and context focus reuse existing SDK behavior with permanent root aliases, complete help/contracts/completion discovery, and explicit namespace help assertions."},{"op":"add","path":"/metadata/expected_result","value":"Native and compatibility navigation calls retain selection, focus persistence, flags and machine-readable outputs."},{"op":"add","path":"/metadata/actual_result","value":"Full static gates, typecheck, 8639 tests and exact 100/100/100/100 coverage passed; linked acceptance, package behavior and token budget checks passed."},{"op":"add","path":"/metadata/close_reason","value":"Implementation and review corrections verified locally; hosted rereview and merge remain separate delivery evidence."}],"before_hash":"48bce6b503d0bb2617b100eb8ef5627bd8834f7547a2da3e0bb0ee6e0c828629","after_hash":"7bc75ba6bc07a0bda5788fb71edc9ae7900a898978058a76e35d445f70c56ccd","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"5e37a58b26379393c564ce5239812826f1b431f50664fadb7f00ebd1c98d14ae"} +{"ts":"2026-09-09T16:51:30.605Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"release","patch":[{"op":"remove","path":"/metadata/claim_principal"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T16:51:30.605Z"}],"before_hash":"7bc75ba6bc07a0bda5788fb71edc9ae7900a898978058a76e35d445f70c56ccd","after_hash":"e7ce12f555563b835472c00d14e251f09d569e4cb52cfdb52af7cd281106a3fb","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"0dac0b8eb697c6faf0d342e1bde7d57d6386d85f947ac56b8e0a0931893cbb34"} +{"ts":"2026-09-09T17:09:50.025Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"update","patch":[{"op":"remove","path":"/metadata/close_reason"},{"op":"remove","path":"/metadata/actual_result"},{"op":"remove","path":"/metadata/expected_result"},{"op":"remove","path":"/metadata/resolution"},{"op":"remove","path":"/metadata/completed_at"},{"op":"remove","path":"/metadata/closed_at"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T17:09:50.025Z"},{"op":"replace","path":"/metadata/status","value":"in_progress"}],"before_hash":"e7ce12f555563b835472c00d14e251f09d569e4cb52cfdb52af7cd281106a3fb","after_hash":"d9c5174b540394afbcf24093f26dba1f76529c3f10d30be5152155c43bfb6cb5","item_hash_version":3,"message":"Address Fish namespace runtime-field completion and remaining review documentation gaps","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"ca198efe3566f2a4f1dc206997f875d32bee5e6727c31ff0ed8b8cbb57f53469"} +{"ts":"2026-09-09T17:09:50.627Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"claim","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T17:09:50.627Z"},{"op":"add","path":"/metadata/assignee","value":"harness:codex"},{"op":"add","path":"/metadata/claim_principal","value":"harness:codex#5e44b6e6b45de792bb038ba5"}],"before_hash":"d9c5174b540394afbcf24093f26dba1f76529c3f10d30be5152155c43bfb6cb5","after_hash":"001945666d8cb395b0844c675e7a5714b0956e5f571ace6a7e096d2b3f68fcb2","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"84707c45580693bd22c2a1860ba0e0b25ca7f5fc7562b1840177cfaa4f553ff4"} +{"ts":"2026-09-09T17:17:21.974Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","claim:pm-kcs4","lineage:pm-6apl","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","claim:pm-kcs4","lineage:pm-6apl","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"tests_add","patch":[{"op":"add","path":"/metadata/tests/1","value":{"command":"node scripts/run-tests.mjs test -- tests/unit/commands/completion-command.spec.ts","scope":"project","timeout_seconds":240,"provenance":{"author":"harness:codex","created_at":"2026-09-09T17:17:21.899Z","source_kind":"local_mutation","source_ref":"feat/context-ops-command-namespaces"}}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T17:17:21.974Z"}],"before_hash":"001945666d8cb395b0844c675e7a5714b0956e5f571ace6a7e096d2b3f68fcb2","after_hash":"dc970392b98618d9e73503329da4238f41784d0eb646f46734c11fc387525d07","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"ecd157b43ac20a4f7166fc7308e215e034fc32f2431935ae99189768d7375073"} +{"ts":"2026-09-09T17:17:23.079Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","claim:pm-kcs4","lineage:pm-6apl","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","claim:pm-kcs4","lineage:pm-6apl","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/6","value":{"created_at":"2026-09-09T17:17:23.079Z","author":"harness:codex","text":"Review round 2: reproduced the context runtime-field leak in real Fish completion (context focus offered --context-segment) and a failing focused assertion. The renderer now uses semantic context gating, preserving context/ctx snapshot flags while excluding focus/next. The focused suite passed 117 tests; real Fish passed three snapshot positives, five navigation negatives, and the native --clear flag. Full coverage and static verification are running."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T17:17:23.079Z"}],"before_hash":"dc970392b98618d9e73503329da4238f41784d0eb646f46734c11fc387525d07","after_hash":"305807b3f507d24bd9b0b1bc22ecd1fa372e42f5b894f7922c4015d0b71acabb","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"f829bb539f8e25ab0cd8137d664f6c342cd7737fa1c8524839a3613a05468aa8"} +{"ts":"2026-09-09T17:18:13.552Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","claim:pm-kcs4","lineage:pm-6apl","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","claim:pm-kcs4","lineage:pm-6apl","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"test_run_track","patch":[{"op":"add","path":"/metadata/test_runs/2","value":{"run_id":"test-local-mtud3rbd-yw7mrx","kind":"test","status":"passed","started_at":"2026-09-09T17:17:23.319Z","finished_at":"2026-09-09T17:18:13.511Z","recorded_at":"2026-09-09T17:18:13.511Z","passed":2,"failed":0,"skipped":0,"executions":[{"command":"node scripts/run-tests.mjs test -- tests/unit/cli/command-namespaces.spec.ts tests/unit/sdk/cli-contracts tests/integration/context-ops-namespace.integration.spec.ts","requested_pm_context_mode":"schema","pm_context_mode":"schema","workspace_context_mode":"source","trust_reason":"local_source_ref"},{"command":"node scripts/run-tests.mjs test -- tests/unit/commands/completion-command.spec.ts","requested_pm_context_mode":"schema","pm_context_mode":"schema","workspace_context_mode":"source","trust_reason":"local_source_ref"}]}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T17:18:13.552Z"}],"before_hash":"305807b3f507d24bd9b0b1bc22ecd1fa372e42f5b894f7922c4015d0b71acabb","after_hash":"ea9aff8813957fa8be99e78915139346c8de73ac07c8cad51944f2164f9be27a","item_hash_version":3,"message":"Track test run summary (test-local-mtud3rbd-yw7mrx)","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"226dfaa01961ecd70a1ce6f334095282a009e418258f56c92a65414b1bcf1643"} +{"ts":"2026-09-09T17:39:12.628Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","claim:pm-kcs4","lineage:pm-6apl","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","claim:pm-kcs4","lineage:pm-6apl","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/7","value":{"created_at":"2026-09-09T17:39:12.628Z","author":"harness:codex","text":"Final review correction verification: the isolated full suite passed 8639 tests in 655 files with exact 100/100/100/100 and zero uncovered counts: 63824 statements, 48530 branches, 13252 functions, 61202 lines. Full static quality and typecheck passed; both items passed both sandboxed linked commands. Real Fish reproduced the original leak and passed context/ctx positives plus focus/next negatives after correction. All touched named callables have descriptive JSDoc by AST inspection; this is scoped evidence, not a repository-wide function-documentation percentage. Every received review artifact was reacted to and replied to; the baseline-reset finding was rejected with unchanged-ceiling measurements. Final hosted verification follows the correction push in PR 1225."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T17:39:12.628Z"}],"before_hash":"ea9aff8813957fa8be99e78915139346c8de73ac07c8cad51944f2164f9be27a","after_hash":"2073f19a682d9d40ca193e1c256f04f059d4f48c7011f6ad5c318430319013d1","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"4b3129319dda481e2f704fc06f6a11319fe867a6791c24ff8ef3d2d58d71e0d2"} +{"ts":"2026-09-09T17:39:13.588Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","claim:pm-kcs4","lineage:pm-6apl","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","claim:pm-kcs4","lineage:pm-6apl","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"close","patch":[{"op":"remove","path":"/metadata/assignee"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T17:39:13.588Z"},{"op":"replace","path":"/metadata/status","value":"closed"},{"op":"add","path":"/metadata/closed_at","value":"2026-09-09T17:39:13.521Z"},{"op":"add","path":"/metadata/completed_at","value":"2026-09-09T17:39:13.521Z"},{"op":"add","path":"/metadata/resolution","value":"Delivered native context next/focus through shared SDK command contracts, permanent root aliases, coherent discovery and namespace-aware completion. Fish runtime schema flags now remain scoped to context snapshots."},{"op":"add","path":"/metadata/expected_result","value":"Native and compatibility navigation commands preserve SDK results and focus behavior; shell completion offers only flags belonging to the selected operation."},{"op":"add","path":"/metadata/actual_result","value":"Real temporary-workspace and npm/Bun acceptance passed; real Fish preserved context/ctx runtime fields and excluded them from focus/next; full suite and exact coverage passed."},{"op":"add","path":"/metadata/close_reason","value":"Implementation and review corrections verified for PR 1225."}],"before_hash":"2073f19a682d9d40ca193e1c256f04f059d4f48c7011f6ad5c318430319013d1","after_hash":"759c01d9b06e20a0804446cf25a378a6db948e990f729701269abf4ef93d7db0","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"e50c0814e6349b9390123f60d5d2faf209eb8b01aeca1af63901ca1c6e5bf359"} +{"ts":"2026-09-09T17:39:14.490Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","claim:pm-kcs4","lineage:pm-6apl","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]},"topic":{"value":"workset:pm-6apl+pm-kcs4","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-6apl","claim:pm-kcs4","lineage:pm-6apl","lineage:pm-n7rr","lineage:pm-mpbb","lineage:pm-doxj"]}},"op":"release","patch":[{"op":"remove","path":"/metadata/claim_principal"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T17:39:14.490Z"}],"before_hash":"759c01d9b06e20a0804446cf25a378a6db948e990f729701269abf4ef93d7db0","after_hash":"a86fde61d5e341a3f4ce326c44346f928c6c54d08a6bb598b3f25dbec3fac97c","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"9b47e2e921b1a9f5bf6f4712aa6ae50fdb5915c785f7fe60b35e7e75f44534c8"} diff --git a/.agents/pm/history/pm-zvy31w.jsonl b/.agents/pm/history/pm-zvy31w.jsonl new file mode 100644 index 000000000..1ffa22f99 --- /dev/null +++ b/.agents/pm/history/pm-zvy31w.jsonl @@ -0,0 +1,26 @@ +{"ts":"2026-09-09T17:59:53.701Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"create","patch":[{"op":"add","path":"/metadata/id","value":"pm-zvy31w"},{"op":"add","path":"/metadata/title","value":"Isolate CodSpeed dependency setup from unrelated Chrome APT index failures"},{"op":"add","path":"/metadata/description","value":"The benchmark runner inherits an unused Chrome APT source. PR 1225 run 34384419100 attempts 1 and 2 fail before benchmarks because its Packages.gz hash differs from the signed index. Preserve the source files but disable them in this disposable benchmark runner, retaining signature verification for Ubuntu dependencies."},{"op":"add","path":"/metadata/type","value":"Issue"},{"op":"add","path":"/metadata/status","value":"open"},{"op":"add","path":"/metadata/priority","value":2},{"op":"add","path":"/metadata/tags","value":[]},{"op":"add","path":"/metadata/created_at","value":"2026-09-09T17:59:53.701Z"},{"op":"add","path":"/metadata/updated_at","value":"2026-09-09T17:59:53.701Z"},{"op":"add","path":"/metadata/author","value":"harness:codex"},{"op":"add","path":"/metadata/acceptance_criteria","value":"Only unused Chrome sources disabled; Ubuntu sources and verification intact; present and absent fixtures plus workflow checks pass; hosted benchmarks execute and upload."},{"op":"add","path":"/metadata/parent","value":"pm-yh6t"},{"op":"add","path":"/metadata/severity","value":"medium"},{"op":"add","path":"/metadata/component","value":"ci/codspeed"},{"op":"add","path":"/metadata/dependencies","value":[{"id":"pm-6apl","kind":"discovered_from","created_at":"2026-09-09T17:59:53.701Z","author":"harness:codex","source_kind":"cli:create:dep","author_source":"detected"},{"id":"pm-w16muu","kind":"discovered_from","created_at":"2026-09-09T17:59:53.701Z","author":"harness:codex","source_kind":"cli:create:dep","author_source":"detected"}]},{"op":"add","path":"/metadata/comments","value":[{"created_at":"2026-09-09T17:59:53.701Z","author":"harness:codex","text":"Duplicate check: 84 all-status CodSpeed matches and zero exact Hash Sum mismatch matches. Full reads distinguish completed adoption pm-yh6t and completed cache fix pm-w16muu from this new Chrome index failure. Open and in-progress inventories checked."}]}],"before_hash":"3cc22dff72be7b14824654a7a64ea62b04799939b2fee54c1b5f52ca60bf6df0","after_hash":"5c72489aa4c5b82265e4bd7f858cd6b62b0d0aafe376bc5431c1175fe4ba715b","item_hash_version":3,"message":"","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"f8d3fbea28e83890a75eb62cc242c57c5fb958fa831d86761ef69d356f59768e"} +{"ts":"2026-09-09T18:00:08.747Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"claim","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T18:00:08.747Z"},{"op":"add","path":"/metadata/assignee","value":"harness:codex"},{"op":"add","path":"/metadata/claim_principal","value":"harness:codex#5e44b6e6b45de792bb038ba5"}],"before_hash":"5c72489aa4c5b82265e4bd7f858cd6b62b0d0aafe376bc5431c1175fe4ba715b","after_hash":"24bc1895e3a53cfb259939a2882f6fcfe4c7f6ef98298cbd47f50d57e68b4ad1","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"9796b12115501ba762bdd6d0531e01a7173b7226aea90edd3b4a162c42dd92a3"} +{"ts":"2026-09-09T18:00:09.475Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]},"topic":{"value":"pm-zvy31w","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]}},"op":"update","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T18:00:09.475Z"},{"op":"replace","path":"/metadata/status","value":"in_progress"}],"before_hash":"24bc1895e3a53cfb259939a2882f6fcfe4c7f6ef98298cbd47f50d57e68b4ad1","after_hash":"74508757cbe5615c66760de04efc8148f78c97061a75789ca3d774d08b92b05c","item_hash_version":3,"message":"Isolate benchmark APT setup from the repeated unrelated Chrome index mismatch","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"abdeb34cc145bb38b65fdc10ee2b33244f5429724399289001691f0c21a0179c"} +{"ts":"2026-09-09T18:01:42.945Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]},"topic":{"value":"pm-zvy31w","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]}},"op":"files_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T18:01:42.945Z"},{"op":"add","path":"/metadata/files","value":[{"path":".github/workflows/codspeed.yml","scope":"project","note":"Preserve and disable only unused Chrome APT sources before signed Ubuntu instrument setup"}]}],"before_hash":"74508757cbe5615c66760de04efc8148f78c97061a75789ca3d774d08b92b05c","after_hash":"4cd5bbf74468e7e223c8d39d1bed20a9856ad8b7e67298f824c1fe23d76ae51e","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"76abfe6d71a6352b4afa3f2da06cc237872138d9efab280a3b3b4bedbfc4fdd0"} +{"ts":"2026-09-09T18:01:43.576Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]},"topic":{"value":"pm-zvy31w","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]}},"op":"tests_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T18:01:43.576Z"},{"op":"add","path":"/metadata/tests","value":[{"command":"node scripts/run-tests.mjs test -- tests/integration/ci-workflow-contract.spec.ts","scope":"project","timeout_seconds":240,"provenance":{"author":"harness:codex","created_at":"2026-09-09T18:01:43.545Z","source_kind":"local_mutation","source_ref":"feat/context-ops-command-namespaces"}}]}],"before_hash":"4cd5bbf74468e7e223c8d39d1bed20a9856ad8b7e67298f824c1fe23d76ae51e","after_hash":"c878c06fa69f836becbfdade90f4d242d974462b2787cd4fc4ede4d501fbe87a","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"add36ff6b030ddba9440a028dd2c00f128cb8bf8333cf9c54d99f5688508622e"} +{"ts":"2026-09-09T18:01:44.301Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]},"topic":{"value":"pm-zvy31w","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]}},"op":"docs_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T18:01:44.301Z"},{"op":"add","path":"/metadata/docs","value":[{"path":"CHANGELOG.md","scope":"project","note":"Package-generated dependency setup correction"}]}],"before_hash":"c878c06fa69f836becbfdade90f4d242d974462b2787cd4fc4ede4d501fbe87a","after_hash":"ac8d723383143325d5f2d8faf581f5a7847c8f33d4e6a248009687b7dd64ef81","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"8785701398b3dba88ae93f8e5b4412989853776c530894a6017b27fafa4238b7"} +{"ts":"2026-09-09T18:02:26.809Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]},"topic":{"value":"pm-zvy31w","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]}},"op":"update","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T18:02:26.809Z"},{"op":"add","path":"/metadata/escape_class","value":"review_caught_late"},{"op":"add","path":"/metadata/gate_evidence","value":{"disposition":"gate_strengthened","owner":"pm-zvy31w","gate_id":"codspeed-signed-apt-bootstrap","negative_control":"PR 1225 run 34384419100 attempts 1 and 2 reject the Chrome Packages.gz hash before benchmarks; disposable actual-step fixtures verify both Chrome formats disabled with contents retained, other sources unchanged, idempotence and absent-source success.","local_checks":["node scripts/run-tests.mjs test -- tests/integration/ci-workflow-contract.spec.ts","Pinned actionlint 1.7.12 with embedded ShellCheck","Actual workflow shell step in disposable present, repeated and absent source fixtures"],"hosted_checks":["CodSpeed exact-head workflow after this correction push; pending at local closeout"]}}],"before_hash":"ac8d723383143325d5f2d8faf581f5a7847c8f33d4e6a248009687b7dd64ef81","after_hash":"cd8e30308ba6c6db8785fb769721594655ed652bf3148e6773dca543374e4681","item_hash_version":3,"message":"Preserve fail-closed package verification while isolating an unrelated runner repository","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"7f24109521eb5c3bf9c11c6094872aaae48a2b6535f7e2d570386a943b76ab65"} +{"ts":"2026-09-09T18:02:40.687Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]},"topic":{"value":"pm-zvy31w","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]}},"op":"test_run_track","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T18:02:40.687Z"},{"op":"add","path":"/metadata/test_runs","value":[{"run_id":"test-local-mtueoxbd-npwu44","kind":"test","status":"passed","started_at":"2026-09-09T18:02:27.463Z","finished_at":"2026-09-09T18:02:40.680Z","recorded_at":"2026-09-09T18:02:40.680Z","passed":1,"failed":0,"skipped":0,"executions":[{"command":"node scripts/run-tests.mjs test -- tests/integration/ci-workflow-contract.spec.ts","requested_pm_context_mode":"schema","pm_context_mode":"schema","workspace_context_mode":"source","trust_reason":"local_source_ref"}]}]}],"before_hash":"cd8e30308ba6c6db8785fb769721594655ed652bf3148e6773dca543374e4681","after_hash":"d5724b41defd21d41a47532d149934882d954500a2d25563fc706651430cbd35","item_hash_version":3,"message":"Track test run summary (test-local-mtueoxbd-npwu44)","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"8fd217e24d80de461f10d26a5af560b800891c21582b3eeebb42a0e04a10fa5a"} +{"ts":"2026-09-09T18:02:56.420Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]},"topic":{"value":"pm-zvy31w","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]}},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/1","value":{"created_at":"2026-09-09T18:02:56.420Z","author":"harness:codex","text":"Verification: the actual YAML shell step passed disposable present-source, repeated-execution and absent-source fixtures. Both google-chrome.list and google-chrome.sources are preserved as disabled files; Ubuntu and an unrelated provider source retain identical bytes. Pinned actionlint 1.7.12 and ShellCheck passed, and the sandboxed workflow contract suite passed all 14 tests. The earlier full source suite passed 8639 tests with exact 100/100/100/100; this correction changes only CI YAML and PM/changelog data. Hosted benchmark acceptance remains pending for the correction push."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T18:02:56.420Z"}],"before_hash":"d5724b41defd21d41a47532d149934882d954500a2d25563fc706651430cbd35","after_hash":"6cc3a380fe2e20b14c3db4fcbb78da3cd8d154434e211f8ca7fd1cc273480aaf","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"e2a6f24db98391122fdd4ee76271dd5a3605b980f7f1ea9393465638cdfb31cc"} +{"ts":"2026-09-09T18:02:57.250Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]},"topic":{"value":"pm-zvy31w","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]}},"op":"close","patch":[{"op":"remove","path":"/metadata/assignee"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T18:02:57.250Z"},{"op":"replace","path":"/metadata/status","value":"closed"},{"op":"add","path":"/metadata/closed_at","value":"2026-09-09T18:02:57.184Z"},{"op":"add","path":"/metadata/completed_at","value":"2026-09-09T18:02:57.184Z"},{"op":"add","path":"/metadata/resolution","value":"CodSpeed setup preserves but disables only unused Chrome APT source files on its disposable runner before installing signed Ubuntu instrument dependencies."},{"op":"add","path":"/metadata/expected_result","value":"Unrelated Chrome index outages do not prevent benchmark dependency installation; package verification and other sources remain intact."},{"op":"add","path":"/metadata/actual_result","value":"Actual-step filesystem fixtures, pinned actionlint, ShellCheck and all 14 workflow contract tests passed. Original attempts reproduced the hash refusal; the new hosted benchmark run is pending."},{"op":"add","path":"/metadata/close_reason","value":"Runner source isolation implemented and locally verified; hosted acceptance follows the reviewed correction push."}],"before_hash":"6cc3a380fe2e20b14c3db4fcbb78da3cd8d154434e211f8ca7fd1cc273480aaf","after_hash":"ebb06814af8e21eaf005fee14a95a3867b7af58a09bf6abbb516ae2cec0c0469","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"e526dbb3eb3fafea2ad3a291c82c0f6a2d6fa5a42ca14edd64fabf20231d67fb"} +{"ts":"2026-09-09T18:02:57.947Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]},"topic":{"value":"pm-zvy31w","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]}},"op":"release","patch":[{"op":"remove","path":"/metadata/claim_principal"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T18:02:57.947Z"}],"before_hash":"ebb06814af8e21eaf005fee14a95a3867b7af58a09bf6abbb516ae2cec0c0469","after_hash":"a9835b63c64698d6d0c4871ffca4d895d4bf86e4c418542e65c24ba97aefb6a6","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"030e5fcca92bbc41cecdd0d26e3a69b5dd94e1f50dc28cdd0e92daf05a64ebd4"} +{"ts":"2026-09-09T18:19:16.081Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"update","patch":[{"op":"remove","path":"/metadata/close_reason"},{"op":"remove","path":"/metadata/actual_result"},{"op":"remove","path":"/metadata/expected_result"},{"op":"remove","path":"/metadata/resolution"},{"op":"remove","path":"/metadata/completed_at"},{"op":"remove","path":"/metadata/closed_at"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T18:19:16.081Z"},{"op":"replace","path":"/metadata/status","value":"in_progress"}],"before_hash":"a9835b63c64698d6d0c4871ffca4d895d4bf86e4c418542e65c24ba97aefb6a6","after_hash":"b237a05b2a7fba4c939837228df9484fabb7863abbbf0252ab6240339f26a4b9","item_hash_version":3,"message":"Add committed behavioral regression coverage requested by CodeRabbit after successful hosted benchmark recovery","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"20fe39e04a707e5031a9b6dd645f012fcd09a3584ac7722e3ee6232cfc4059e2"} +{"ts":"2026-09-09T18:19:16.727Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"claim","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T18:19:16.727Z"},{"op":"add","path":"/metadata/assignee","value":"harness:codex"},{"op":"add","path":"/metadata/claim_principal","value":"harness:codex#5e44b6e6b45de792bb038ba5"}],"before_hash":"b237a05b2a7fba4c939837228df9484fabb7863abbbf0252ab6240339f26a4b9","after_hash":"f9efcfed7ad9defae052a523535afacec99cf8b2553354235822d7ba6241927a","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"3f1c9b5458064693c2e5cec1a70d43e759bf300a41de329ab159ad3c2ef57233"} +{"ts":"2026-09-09T18:20:51.595Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]},"topic":{"value":"pm-zvy31w","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]}},"op":"files_add","patch":[{"op":"add","path":"/metadata/files/1","value":{"path":"tests/integration/ci-workflow-contract.spec.ts","scope":"project","note":"Execute the actual Chrome-source workflow step against disposable source fixtures"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T18:20:51.595Z"}],"before_hash":"f9efcfed7ad9defae052a523535afacec99cf8b2553354235822d7ba6241927a","after_hash":"78a836dcc28fca075b8b71cc4974dce051ba9448eed5369c827c2bbbe903b703","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"3be16c5d5e296dc98f432ffac84cb1deb9ba4ba57a522f8172e426fe56b9f4a4"} +{"ts":"2026-09-09T18:23:00.378Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]},"topic":{"value":"pm-zvy31w","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]}},"op":"test_run_track","patch":[{"op":"add","path":"/metadata/test_runs/1","value":{"run_id":"test-local-mtuff2fj-12wtxt","kind":"test","status":"passed","started_at":"2026-09-09T18:22:43.652Z","finished_at":"2026-09-09T18:23:00.367Z","recorded_at":"2026-09-09T18:23:00.367Z","passed":1,"failed":0,"skipped":0,"executions":[{"command":"node scripts/run-tests.mjs test -- tests/integration/ci-workflow-contract.spec.ts","requested_pm_context_mode":"schema","pm_context_mode":"schema","workspace_context_mode":"source","trust_reason":"local_source_ref"}]}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T18:23:00.378Z"}],"before_hash":"78a836dcc28fca075b8b71cc4974dce051ba9448eed5369c827c2bbbe903b703","after_hash":"2bb00938cf5abbd89394a0c69a36d783ea5fbdf08cdbed06e3b937f1cf6d43b3","item_hash_version":3,"message":"Track test run summary (test-local-mtuff2fj-12wtxt)","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"b2dadff68327c8015a1801a88980e901c22ed0525989d99e61e627955b2a1b11"} +{"ts":"2026-09-09T18:25:42.538Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]},"topic":{"value":"pm-zvy31w","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]}},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/2","value":{"created_at":"2026-09-09T18:25:42.538Z","author":"harness:codex","text":"Review follow-up: committed actual-step regression fixtures now cover absent, list-only, Deb822-only and both source formats, repeated execution, preserved bytes and unrelated Ubuntu/Microsoft sources. All 14 tests passed focused and linked; ESLint and typecheck passed. Two temporary workflow mutations (removed isolation step and widened file loop) each failed the test; original workflow restored exactly. Hosted run 34386816996 executed and uploaded all 11 benchmarks at 7dd3b7f6a; all 30 available checks passed, with 3 provider/expected skips. No application source changed after the exact 100/100/100/100 full-suite pass."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T18:25:42.538Z"}],"before_hash":"2bb00938cf5abbd89394a0c69a36d783ea5fbdf08cdbed06e3b937f1cf6d43b3","after_hash":"5a2f4c3e3b042a9198af690c4388ef1487fba6c128367276b7cf8cf9bd153a8a","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"7d4bf137566a523a0dcc018ff16cf7c75a91d28e4f9e54b7a518d7b54e90ad8b"} +{"ts":"2026-09-09T18:26:44.143Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]},"topic":{"value":"pm-zvy31w","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]}},"op":"update","patch":[{"op":"replace","path":"/metadata/gate_evidence/hosted_checks/0","value":"CodSpeed run 34386816996 at 7dd3b7f6a994d18f0b21cb81b3ad2e2420b19b26 executed 11 benchmarks and uploaded performance data; 30 available checks passed, 3 expected/provider skips."},{"op":"replace","path":"/metadata/gate_evidence/negative_control","value":"Committed actual-step regression covers no Chrome source, list only, Deb822 only, and both, repeated twice with bytes preserved and unrelated sources retained. Removing the step and widening its loop each failed the test; original workflow restored exactly."},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T18:26:44.143Z"}],"before_hash":"5a2f4c3e3b042a9198af690c4388ef1487fba6c128367276b7cf8cf9bd153a8a","after_hash":"4327e00365b68210d3d8639833ecee2dad8f5e3c6d672ced49ea8b5fb608fbda","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"a5778edc5d35120e59a671e86b35c8f90f9c6c35f4742beac4b5a7dcf1c45819"} +{"ts":"2026-09-09T18:26:47.040Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]},"topic":{"value":"pm-zvy31w","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]}},"op":"close","patch":[{"op":"remove","path":"/metadata/assignee"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T18:26:47.040Z"},{"op":"replace","path":"/metadata/status","value":"closed"},{"op":"add","path":"/metadata/closed_at","value":"2026-09-09T18:26:47.024Z"},{"op":"add","path":"/metadata/completed_at","value":"2026-09-09T18:26:47.024Z"},{"op":"add","path":"/metadata/resolution","value":"Disable only unused Chrome APT sources before CodSpeed installation and enforce behavior with actual-step fixtures."},{"op":"add","path":"/metadata/expected_result","value":"Signed Ubuntu dependencies install; optional Chrome formats safely disabled; benchmarks execute and upload."},{"op":"add","path":"/metadata/actual_result","value":"Hosted run 34386816996 executed and uploaded 11 benchmarks; 14 contract tests and linked run passed; removed-step and widened-loop negative controls failed as intended; typecheck and ESLint passed."},{"op":"add","path":"/metadata/close_reason","value":"Hosted benchmark recovery and committed behavioral regression verified."}],"before_hash":"4327e00365b68210d3d8639833ecee2dad8f5e3c6d672ced49ea8b5fb608fbda","after_hash":"d7270d8402690e01cfb01691ba63d697b73fc2ff00fdecd0fb4dbddd17fb5901","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"45e278885938723efd8a72d942a5d1de2f4c17ddfc58ca7ef5a26ffdac707aec"} +{"ts":"2026-09-09T18:26:47.776Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]},"topic":{"value":"pm-zvy31w","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]}},"op":"release","patch":[{"op":"remove","path":"/metadata/claim_principal"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T18:26:47.776Z"}],"before_hash":"d7270d8402690e01cfb01691ba63d697b73fc2ff00fdecd0fb4dbddd17fb5901","after_hash":"1efa81f7bcc39d27c21ded1a389f71a84cb4eaab100223b07ceecd5e3b87b0e5","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"3030c608fcce96db1c3bbf67ab1a38ccff933889850f87e7ac910cf41f0b3e0b"} +{"ts":"2026-09-09T18:40:45.332Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"update","patch":[{"op":"remove","path":"/metadata/close_reason"},{"op":"remove","path":"/metadata/actual_result"},{"op":"remove","path":"/metadata/expected_result"},{"op":"remove","path":"/metadata/resolution"},{"op":"remove","path":"/metadata/completed_at"},{"op":"remove","path":"/metadata/closed_at"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T18:40:45.332Z"},{"op":"replace","path":"/metadata/status","value":"in_progress"}],"before_hash":"1efa81f7bcc39d27c21ded1a389f71a84cb4eaab100223b07ceecd5e3b87b0e5","after_hash":"1ad45ce31c617a4398c5ae426254a0fb395ea45a9afdff8cadc3469f7cf04960","item_hash_version":3,"message":"Address DeepScan control-flow narrowing in the new regression test.","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"54a5174ccf3a20837b5ae197692b0b7d527ecbf61083b1ea3d0ac4e7c93a04b0"} +{"ts":"2026-09-09T18:40:46.041Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"argv"},"topic":null},"op":"claim","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T18:40:46.041Z"},{"op":"add","path":"/metadata/assignee","value":"harness:codex"},{"op":"add","path":"/metadata/claim_principal","value":"harness:codex#5e44b6e6b45de792bb038ba5"}],"before_hash":"1ad45ce31c617a4398c5ae426254a0fb395ea45a9afdff8cadc3469f7cf04960","after_hash":"226422456b3131eb485cb865a18efd0ca5fe6058acdc8962ad9ae6f3fc108a61","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"9a2bd8e2a2634b206c32345a999eefec4662f3b11e01784b602bef6f5bd39ef1"} +{"ts":"2026-09-09T18:41:03.630Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]},"topic":{"value":"pm-zvy31w","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]}},"op":"test_run_track","patch":[{"op":"add","path":"/metadata/test_runs/2","value":{"run_id":"test-local-mtug2a9w-eedy23","kind":"test","status":"passed","started_at":"2026-09-09T18:40:47.027Z","finished_at":"2026-09-09T18:41:03.620Z","recorded_at":"2026-09-09T18:41:03.620Z","passed":1,"failed":0,"skipped":0,"executions":[{"command":"node scripts/run-tests.mjs test -- tests/integration/ci-workflow-contract.spec.ts","requested_pm_context_mode":"schema","pm_context_mode":"schema","workspace_context_mode":"source","trust_reason":"local_source_ref"}]}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T18:41:03.630Z"}],"before_hash":"226422456b3131eb485cb865a18efd0ca5fe6058acdc8962ad9ae6f3fc108a61","after_hash":"2409c864a70fd0ea9b0c76c6c49a68adca5cee6b9fb76dbbb17c0853fc59f021","item_hash_version":3,"message":"Track test run summary (test-local-mtug2a9w-eedy23)","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"b413ef59ee0a216f6e09ccf6b4569641ecb00424d97548c70c9a0b71b554d5ad"} +{"ts":"2026-09-09T18:41:50.595Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]},"topic":{"value":"pm-zvy31w","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]}},"op":"test_run_track","patch":[{"op":"add","path":"/metadata/test_runs/3","value":{"run_id":"test-local-mtug3aib-2si58s","kind":"test","status":"passed","started_at":"2026-09-09T18:41:34.222Z","finished_at":"2026-09-09T18:41:50.579Z","recorded_at":"2026-09-09T18:41:50.579Z","passed":1,"failed":0,"skipped":0,"executions":[{"command":"node scripts/run-tests.mjs test -- tests/integration/ci-workflow-contract.spec.ts","requested_pm_context_mode":"schema","pm_context_mode":"schema","workspace_context_mode":"source","trust_reason":"local_source_ref"}]}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T18:41:50.595Z"}],"before_hash":"2409c864a70fd0ea9b0c76c6c49a68adca5cee6b9fb76dbbb17c0853fc59f021","after_hash":"165c558ab7384ea073491741267879bfbf8a36380b79c2b556e303a1fe4206c1","item_hash_version":3,"message":"Track test run summary (test-local-mtug3aib-2si58s)","context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"f1d7313f110f1fc7630086163a4ad3600db916eaf3d6e27502e73d5ec79ed9bc"} +{"ts":"2026-09-09T18:42:33.174Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]},"topic":{"value":"pm-zvy31w","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]}},"op":"comment_add","patch":[{"op":"add","path":"/metadata/comments/3","value":{"created_at":"2026-09-09T18:42:33.174Z","author":"harness:codex","text":"DeepScan e1d0567 report 234366166 flagged the test cast because its dataflow model does not narrow through expect(...).toBeTypeOf. Replaced that assertion/cast with an explicit typeof guard and reused one steps array for existing lookups, preserving the ESLint complexity ceiling. All 14 linked workflow contract tests, ESLint and typecheck passed. No application-source changes; hosted DeepScan acceptance awaits the next push. Report: https://deepscan.io/dashboard/#view=project&pid=32092&iid=234366166"}},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T18:42:33.174Z"}],"before_hash":"165c558ab7384ea073491741267879bfbf8a36380b79c2b556e303a1fe4206c1","after_hash":"3d396acb1a5053e8d8daca9b77fe67a1587e05c976438663a5b531233728bbb8","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"7338aed666d5b3f5019e9b69168fbf9e193e1bd973a893aeb5bdd07105b546be"} +{"ts":"2026-09-09T18:42:34.179Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]},"topic":{"value":"pm-zvy31w","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]}},"op":"close","patch":[{"op":"remove","path":"/metadata/assignee"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T18:42:34.179Z"},{"op":"replace","path":"/metadata/status","value":"closed"},{"op":"add","path":"/metadata/closed_at","value":"2026-09-09T18:42:34.125Z"},{"op":"add","path":"/metadata/completed_at","value":"2026-09-09T18:42:34.125Z"},{"op":"add","path":"/metadata/resolution","value":"Preserve and disable only unused Chrome sources; enforce four actual-step fixture populations and idempotence; narrow the script type explicitly for TypeScript and static analysis."},{"op":"add","path":"/metadata/expected_result","value":"Signed Ubuntu dependencies and unrelated sources are retained, benchmark data uploads, and workflow regressions fail clearly."},{"op":"add","path":"/metadata/actual_result","value":"Hosted 7dd3b run 34386816996 executed/uploaded 11 benchmarks. Final local guard correction passed 14 linked tests, ESLint and typecheck. Removed-step and widened-loop negative controls failed as intended. Hosted DeepScan recheck pending next push."},{"op":"add","path":"/metadata/close_reason","value":"Chrome-source isolation has hosted benchmark proof and committed behavioral regressions with explicit type narrowing."}],"before_hash":"3d396acb1a5053e8d8daca9b77fe67a1587e05c976438663a5b531233728bbb8","after_hash":"7378da1a8e842fe17693b5a5a831e0dc944bea2306a9f1a59c3fa7d5b992019a","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"substantive","record_hash_version":1,"record_hash":"c608084c0f95ae3a31d2e53869f4b1c18b69323650021c0d0cd58f912e4e587e"} +{"ts":"2026-09-09T18:42:35.181Z","author":"harness:codex","author_source":"detected","agent_harness":"codex","agent_model":"gpt-6-astra","agent_model_source":"probe","agent_instance":"5e44b6e6b45de792bb038ba5","agent_provenance":{"model":{"value":"gpt-6-astra","source":"probe"},"effort":{"value":"medium","source":"probe"},"role":{"value":"implementer","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]},"topic":{"value":"pm-zvy31w","source":"inferred","confidence":"medium","rule_version":"v2","evidence":["claim:pm-zvy31w","lineage:pm-zvy31w","lineage:pm-yh6t","lineage:pm-9rxu","lineage:pm-o2kc","lineage:pm-doxj"]}},"op":"release","patch":[{"op":"remove","path":"/metadata/claim_principal"},{"op":"replace","path":"/metadata/updated_at","value":"2026-09-09T18:42:35.181Z"}],"before_hash":"7378da1a8e842fe17693b5a5a831e0dc944bea2306a9f1a59c3fa7d5b992019a","after_hash":"64288b76bc6a2a443df4b36f1238e9e86e5442d1d0c82af06ca536b6ca15df68","item_hash_version":3,"context":{"agent_provenance_outcomes":{"version":{"status":"unavailable","reason":"harness_unavailable","resolver":"ai_agent_version","rule_version":"v1"}}},"event_class":"maintenance","record_hash_version":1,"record_hash":"4487c0d7d09db6aadf2ec50c601d66cdb93d0f42d7b543a6a7c7b173eaa010b7"} diff --git a/.agents/pm/issues/pm-euqm7x.toon b/.agents/pm/issues/pm-euqm7x.toon index 9802a1c31..f93cd7afe 100644 --- a/.agents/pm/issues/pm-euqm7x.toon +++ b/.agents/pm/issues/pm-euqm7x.toon @@ -6,7 +6,7 @@ status: closed priority: 1 tags: [] created_at: "2026-09-04T11:51:40.569Z" -updated_at: "2026-09-05T05:55:15.735Z" +updated_at: "2026-09-09T16:56:39.327Z" closed_at: "2026-09-05T05:47:57.720Z" completed_at: "2026-09-05T05:47:57.720Z" author: "harness:codex" @@ -29,7 +29,7 @@ dependencies[4]{id,kind,created_at,author,source_kind,author_source}: pm-ygli86,verifies,"2026-09-04T11:51:40.569Z","harness:codex","cli:create:dep",detected pm-7zs0,verifies,"2026-09-04T12:18:17.141Z","harness:codex","cli:update:dep",detected pm-j668gl,recurs_from,"2026-09-04T12:18:17.141Z","harness:codex","cli:update:dep",detected -comments[12]{created_at,author,text}: +comments[14]{created_at,author,text}: "2026-09-04T11:51:40.569Z","harness:codex","Duplicate sweep 2026-09-04: live all-status searches for 'Windows release verifier surviving server intermediate runner stderr' and 'verify-published-release Windows' found the historical portability owners pm-j668gl and pm-07pt16 but no item for this inverted test/evaluator timeout contract. Evidence: main CI run 33867283305 failed with empty stderr at the invalid-discovery assertion; an exact failed-job rerun passed on merge SHA 980dce4e25e2dfdec797d45364a8f0369cfb5adf." "2026-09-04T11:52:09.579Z","harness:codex","Root cause: the surviving-server regression inherited the evaluator's 15000 ms default readiness allowance but spawnSync enforced 10000 ms. The evaluator also reserves 2000 ms for governed cleanup, so the harness could terminate 7000 ms before the product contract completed and return empty stderr. The exact-SHA rerun passed, confirming timing sensitivity. Repair will inject a test readiness bound and explicitly assert readiness plus shutdown headroom below the outer deadline while preserving invalid-discovery and port-reuse assertions." "2026-09-04T12:02:13.039Z","harness:codex","Verification evidence: the PM-linked focused verifier suite passed 31/31 tests. Repo-wide coverage passed 603 files and 8,356 tests at exact 100/100/100/100. The first PM-linked static run reached the repository assurance stage and correctly refused because schema-isolated linked execution cannot see the source tracker item that owns the working-tree defect; the standalone defect-evidence gate passes against the live tracker. The static link was removed to preserve sandbox isolation, and the final static gate will run directly after terminal evidence and changelog generation." @@ -42,6 +42,8 @@ comments[12]{created_at,author,text}: "2026-09-05T05:41:27.014Z","harness:codex","Recording fresh PM-linked focused and coverage runs. The canonical commands retain their historical branch source_ref, so this clone explicitly acknowledged the inspected commands before execution. The first linked attempt recorded a trust refusal, not a test assertion failure; it remains preserved in history. The current run executes both commands with schema-isolated PM roots." "2026-09-05T05:47:57.198Z","harness:codex","PR 1195 full rereview corrections passed 63 focused tests, the real 8-task transcript gate with unchanged token ceilings, full typecheck, and the isolated 8422-test coverage suite. Coverage is statements 62222/62222, branches 47193/47193, functions 12920/12920, lines 59846/59846. Hosted CI 33946213771 passed on the previous reviewed head, including Windows; the corrected head will receive a new complete check and review round before merge." "2026-09-05T05:55:15.735Z","harness:codex","Final consolidated rereview correction passed pnpm quality:static after all item closures, full typecheck, 8422 tests / 608 files at exact 100/100/100/100, and the real 8-task transcript corpus. Latest pm-changelog regenerated the reviewed changelog; no active item ownership remains. The fresh canonical verifier/coverage test run has passed=2, failed=0. New hosted review and publication remain separate subsequent evidence." + "2026-09-09T16:41:17.901Z","harness:codex","GH-1226 recurrence evidence: scheduled Nightly Validation run 34331273789 at 9181e96779f7b1eba6f71aaa51a54c821c43c745 failed only the nested HTTP server invalid-discovery assertion on Windows Node 24. The evaluator returned its explicit readiness-timeout diagnostic; unlike the repaired historical empty-stderr case, the outer harness did not preempt cleanup. Requested an unchanged-source failed-job rerun to distinguish transient startup pressure from a reproducible defect. No thresholds or timeout contracts were changed." + "2026-09-09T16:56:39.326Z","harness:codex","GH-1226 final discriminator: failed-job rerun attempt 2 of Nightly Validation 34331273789 passed on unchanged source 9181e96779f7b1eba6f71aaa51a54c821c43c745. Windows Node 24 and every retained matrix leg are green. This establishes an intermittent readiness-timeout occurrence, not a source repair; the original failing attempt and strict invalid-discovery assertion remain preserved. No timeout, assertion or gate was relaxed. The public 2026.9.9 package independently passed all npx/bunx CLI and MCP entrypoints." files[2]{path,scope,note}: scripts/release/verify-published-release.mjs,project,Authoritative evaluator readiness and shutdown bounds inspected in full tests/unit/scripts/release/verify-published-release.spec.ts,project,Deterministic evaluator and harness timeout ordering regression diff --git a/.agents/pm/issues/pm-zvy31w.toon b/.agents/pm/issues/pm-zvy31w.toon new file mode 100644 index 000000000..a98d1613b --- /dev/null +++ b/.agents/pm/issues/pm-zvy31w.toon @@ -0,0 +1,89 @@ +id: pm-zvy31w +title: Isolate CodSpeed dependency setup from unrelated Chrome APT index failures +description: "The benchmark runner inherits an unused Chrome APT source. PR 1225 run 34384419100 attempts 1 and 2 fail before benchmarks because its Packages.gz hash differs from the signed index. Preserve the source files but disable them in this disposable benchmark runner, retaining signature verification for Ubuntu dependencies." +type: Issue +status: closed +priority: 2 +tags: [] +created_at: "2026-09-09T17:59:53.701Z" +updated_at: "2026-09-09T18:42:35.181Z" +closed_at: "2026-09-09T18:42:34.125Z" +completed_at: "2026-09-09T18:42:34.125Z" +author: "harness:codex" +acceptance_criteria: Only unused Chrome sources disabled; Ubuntu sources and verification intact; present and absent fixtures plus workflow checks pass; hosted benchmarks execute and upload. +parent: pm-yh6t +severity: medium +resolution: Preserve and disable only unused Chrome sources; enforce four actual-step fixture populations and idempotence; narrow the script type explicitly for TypeScript and static analysis. +expected_result: "Signed Ubuntu dependencies and unrelated sources are retained, benchmark data uploads, and workflow regressions fail clearly." +actual_result: "Hosted 7dd3b run 34386816996 executed/uploaded 11 benchmarks. Final local guard correction passed 14 linked tests, ESLint and typecheck. Removed-step and widened-loop negative controls failed as intended. Hosted DeepScan recheck pending next push." +component: ci/codspeed +dependencies[2]{id,kind,created_at,author,source_kind,author_source}: + pm-6apl,discovered_from,"2026-09-09T17:59:53.701Z","harness:codex","cli:create:dep",detected + pm-w16muu,discovered_from,"2026-09-09T17:59:53.701Z","harness:codex","cli:create:dep",detected +comments[4]{created_at,author,text}: + "2026-09-09T17:59:53.701Z","harness:codex","Duplicate check: 84 all-status CodSpeed matches and zero exact Hash Sum mismatch matches. Full reads distinguish completed adoption pm-yh6t and completed cache fix pm-w16muu from this new Chrome index failure. Open and in-progress inventories checked." + "2026-09-09T18:02:56.420Z","harness:codex","Verification: the actual YAML shell step passed disposable present-source, repeated-execution and absent-source fixtures. Both google-chrome.list and google-chrome.sources are preserved as disabled files; Ubuntu and an unrelated provider source retain identical bytes. Pinned actionlint 1.7.12 and ShellCheck passed, and the sandboxed workflow contract suite passed all 14 tests. The earlier full source suite passed 8639 tests with exact 100/100/100/100; this correction changes only CI YAML and PM/changelog data. Hosted benchmark acceptance remains pending for the correction push." + "2026-09-09T18:25:42.538Z","harness:codex","Review follow-up: committed actual-step regression fixtures now cover absent, list-only, Deb822-only and both source formats, repeated execution, preserved bytes and unrelated Ubuntu/Microsoft sources. All 14 tests passed focused and linked; ESLint and typecheck passed. Two temporary workflow mutations (removed isolation step and widened file loop) each failed the test; original workflow restored exactly. Hosted run 34386816996 executed and uploaded all 11 benchmarks at 7dd3b7f6a; all 30 available checks passed, with 3 provider/expected skips. No application source changed after the exact 100/100/100/100 full-suite pass." + "2026-09-09T18:42:33.174Z","harness:codex","DeepScan e1d0567 report 234366166 flagged the test cast because its dataflow model does not narrow through expect(...).toBeTypeOf. Replaced that assertion/cast with an explicit typeof guard and reused one steps array for existing lookups, preserving the ESLint complexity ceiling. All 14 linked workflow contract tests, ESLint and typecheck passed. No application-source changes; hosted DeepScan acceptance awaits the next push. Report: https://deepscan.io/dashboard/#view=project&pid=32092&iid=234366166" +files[2]{path,scope,note}: + .github/workflows/codspeed.yml,project,Preserve and disable only unused Chrome APT sources before signed Ubuntu instrument setup + tests/integration/ci-workflow-contract.spec.ts,project,Execute the actual Chrome-source workflow step against disposable source fixtures +tests[1]{command,scope,timeout_seconds,provenance{author,created_at,source_kind,source_ref}}: + node scripts/run-tests.mjs test -- tests/integration/ci-workflow-contract.spec.ts,project,240,"harness:codex","2026-09-09T18:01:43.545Z",local_mutation,feat/context-ops-command-namespaces +test_runs[4]: + - run_id: test-local-mtueoxbd-npwu44 + kind: test + status: passed + started_at: "2026-09-09T18:02:27.463Z" + finished_at: "2026-09-09T18:02:40.680Z" + recorded_at: "2026-09-09T18:02:40.680Z" + passed: 1 + failed: 0 + skipped: 0 + executions[1]{command,requested_pm_context_mode,pm_context_mode,workspace_context_mode,trust_reason}: + node scripts/run-tests.mjs test -- tests/integration/ci-workflow-contract.spec.ts,schema,schema,source,local_source_ref + - run_id: test-local-mtuff2fj-12wtxt + kind: test + status: passed + started_at: "2026-09-09T18:22:43.652Z" + finished_at: "2026-09-09T18:23:00.367Z" + recorded_at: "2026-09-09T18:23:00.367Z" + passed: 1 + failed: 0 + skipped: 0 + executions[1]{command,requested_pm_context_mode,pm_context_mode,workspace_context_mode,trust_reason}: + node scripts/run-tests.mjs test -- tests/integration/ci-workflow-contract.spec.ts,schema,schema,source,local_source_ref + - run_id: test-local-mtug2a9w-eedy23 + kind: test + status: passed + started_at: "2026-09-09T18:40:47.027Z" + finished_at: "2026-09-09T18:41:03.620Z" + recorded_at: "2026-09-09T18:41:03.620Z" + passed: 1 + failed: 0 + skipped: 0 + executions[1]{command,requested_pm_context_mode,pm_context_mode,workspace_context_mode,trust_reason}: + node scripts/run-tests.mjs test -- tests/integration/ci-workflow-contract.spec.ts,schema,schema,source,local_source_ref + - run_id: test-local-mtug3aib-2si58s + kind: test + status: passed + started_at: "2026-09-09T18:41:34.222Z" + finished_at: "2026-09-09T18:41:50.579Z" + recorded_at: "2026-09-09T18:41:50.579Z" + passed: 1 + failed: 0 + skipped: 0 + executions[1]{command,requested_pm_context_mode,pm_context_mode,workspace_context_mode,trust_reason}: + node scripts/run-tests.mjs test -- tests/integration/ci-workflow-contract.spec.ts,schema,schema,source,local_source_ref +docs[1]{path,scope,note}: + CHANGELOG.md,project,Package-generated dependency setup correction +close_reason: Chrome-source isolation has hosted benchmark proof and committed behavioral regressions with explicit type narrowing. +escape_class: review_caught_late +gate_evidence: + disposition: gate_strengthened + owner: pm-zvy31w + gate_id: codspeed-signed-apt-bootstrap + negative_control: "Committed actual-step regression covers no Chrome source, list only, Deb822 only, and both, repeated twice with bytes preserved and unrelated sources retained. Removing the step and widening its loop each failed the test; original workflow restored exactly." + local_checks[3]: node scripts/run-tests.mjs test -- tests/integration/ci-workflow-contract.spec.ts,Pinned actionlint 1.7.12 with embedded ShellCheck,"Actual workflow shell step in disposable present, repeated and absent source fixtures" + hosted_checks[1]: "CodSpeed run 34386816996 at 7dd3b7f6a994d18f0b21cb81b3ad2e2420b19b26 executed 11 benchmarks and uploaded performance data; 30 available checks passed, 3 expected/provider skips." +body: "" diff --git a/.agents/pm/tasks/pm-3i9q8g.toon b/.agents/pm/tasks/pm-3i9q8g.toon index 611ee661c..3966c2ad0 100644 --- a/.agents/pm/tasks/pm-3i9q8g.toon +++ b/.agents/pm/tasks/pm-3i9q8g.toon @@ -1,19 +1,23 @@ id: pm-3i9q8g -title: "normalize, reindex and events are maintenance and read surfaces with no declared noun, so three agent-facing commands sit outside the grammar the freeze will lock" +title: "Native pm ops normalize, pm ops reindex and pm history events with compatibility aliases" description: "Place normalize and reindex under the diagnostics and maintenance noun, and reconcile events with the canonical history and activity read surface. Preserve existing spellings as hidden aliases so consolidation reduces discovery cost without removing shell or automation compatibility." type: Task -status: open +status: closed priority: 2 tags[3]: cli-grammar,consolidation,ops created_at: "2026-08-05T18:07:55.312Z" -updated_at: "2026-09-08T13:32:41.149Z" +updated_at: "2026-09-09T16:51:34.760Z" +closed_at: "2026-09-09T16:51:34.029Z" +completed_at: "2026-09-09T16:51:34.029Z" author: "harness:claude-code" estimated_minutes: 200 acceptance_criteria: "normalize and reindex are placed under the diagnostics/maintenance noun alongside stats, health, validate, gc, telemetry and eval; events resolves against the history and activity read surfaces so one concept has one home; Every current spelling survives as a hidden alias; no maintenance capability is removed" parent: pm-n7rr risk: low confidence: high -expected_result: "normalize and reindex live under the maintenance noun and events resolves against the history and activity surface, with every current spelling kept as an alias." +resolution: "Native ops normalize, ops reindex and history events preserve package ownership and compatibility aliases, with explicit unavailable and installed action-availability assertions." +expected_result: Optional operations stay unavailable before installation and available after activation; native and legacy invocations retain equivalent outputs. +actual_result: "Full static gates, typecheck, 8639 tests and exact 100/100/100/100 coverage passed; linked acceptance, package behavior and token budget checks passed." dependencies[10]{id,kind,created_at,author,source_kind,author_source}: pm-0z7n,blocked_by,"2026-08-05T18:08:42.524Z","harness:claude-code","cli:update:dep",detected pm-j82fd3,implements,"2026-08-05T18:08:42.524Z","harness:claude-code","cli:update:dep",detected @@ -25,4 +29,76 @@ dependencies[10]{id,kind,created_at,author,source_kind,author_source}: pm-ez1dfg,related,"2026-08-05T18:08:45.316Z","harness:claude-code","cli:update:dep",detected pm-qljv,related,"2026-08-05T18:08:45.316Z","harness:claude-code","cli:update:dep",detected pm-tqel,related,"2026-08-05T18:08:45.316Z","harness:claude-code","cli:update:dep",detected +comments[6]{created_at,author,text}: + "2026-09-09T04:24:20.123Z","harness:codex","Implementation evidence: native command node placement preserves existing SDK handlers; bootstrap aliases, runtime contracts, capability routing, package availability, positional addressing, and three shell completions share declared mappings. TDD reproduced missing namespace support, then verified native/legacy argv and real isolated tracker reads. Broader quality gates and package acceptance are in progress." + "2026-09-09T04:42:08.994Z","harness:codex","Verification update: focused native/legacy and help/contract suite exercised 271 cases; 270 passed and one obsolete package-hint expectation was corrected. Native JSON help now retains optional-package installation recovery. GitHub live inventory found no open issues or PRs and no open Dependabot/code-scanning/secret-scanning alerts. Full coverage and static gates must finish before closure." + "2026-09-09T04:56:37.711Z","harness:codex","Manual acceptance passed in a disposable workspace using real search-advanced and governance-audit packages: ops reindex keyword refresh, ops normalize dry-run, five native/legacy JSON output comparisons, focus persistence and history verification. Scoped native contract reads now include the package descriptor; unavailable native JSON help includes package installation recovery." + "2026-09-09T05:15:39.213Z","harness:codex","Verification: linked sandbox-safe suite passed 42 tests across 8 files. Real search-advanced reindex and governance-audit normalize dry-run succeeded after package installation in an isolated workspace. Native and legacy JSON/help contracts, missing-provider recovery hints, default item history, and history events passed. Independent npm/Bun tarball installs resolved both public SDK entrypoints and native command paths." + "2026-09-09T05:29:24.692Z","harness:codex","Final verification: 8639 tests in 655 files passed; exact coverage 100/100/100/100 with zero uncovered counts (63818 statements, 48528 branches, 13248 functions, 61196 lines). Full static gates and source documentation requirements passed without relaxed thresholds. Linked suites, typecheck, secret scan, native/legacy temporary-workspace acceptance, real package installation, independent npm/Bun SDK consumers, and npx/bunx packed smoke with 13 packages passed. GitHub issue/PR and security alert inventories were clear before opening this delivery PR." + "2026-09-09T16:51:33.254Z","harness:codex","Review verification: 8639 tests across 655 files passed, exact coverage 100/100/100/100 with zero uncovered counts (63823 statements, 48528 branches, 13252 functions, 61201 lines). Full static quality, typecheck and the 57-surface token gate passed without relaxed existing ceilings. Each canonical linked namespace suite passed 42 tests; the new token-measurement link passed 12 tests. CodeRabbit accepted the three strengthened test assertions. The latest pm-changelog 2026.9.9 is installed; outcome titles feed package-generated release notes. PR 1225 requires a fresh hosted review on the forthcoming push." +learnings[1]{created_at,author,text}: + "2026-09-09T05:19:58.494Z","harness:codex","Install namespace placement after package registration, move the existing Commander node, and resolve contracts through the stable operation identity. This preserves optional package boundaries and avoids cloned handler/parser drift." +files[27]{path,scope,note}: + scripts/release/flag-invocation-parity.mjs,project,Namespace discovery compatibility and release verification + sdk/public-surface.json,project,Namespace discovery compatibility and release verification + src/cli/command-namespaces.ts,project,Shared native namespace contracts and verification + src/cli/help-content.ts,project,Shared native namespace contracts and verification + src/cli/help-json-payload.ts,project,Namespace discovery compatibility and release verification + src/cli/main.ts,project,Shared native namespace contracts and verification + src/sdk/agent-capability-contracts.ts,project,Shared native namespace contracts and verification + src/sdk/agent/item-addressing.ts,project,Shared native namespace contracts and verification + src/sdk/cli-bootstrap.ts,project,Shared native namespace contracts and verification + src/sdk/cli-contracts.ts,project,Shared native namespace contracts and verification + src/sdk/cli-contracts/command-aliases.ts,project,Shared native namespace contracts and verification + src/sdk/cli-contracts/flag-lexicon-contracts.ts,project,Shared native namespace contracts and verification + src/sdk/cli-contracts/grammar-contracts.ts,project,Shared native namespace contracts and verification + src/sdk/cli-contracts/runtime-contracts.ts,project,Shared native namespace contracts and verification + src/sdk/completion.ts,project,Shared native namespace contracts and verification + src/sdk/index.ts,project,Shared native namespace contracts and verification + tests/fixtures/contracts/full.json,project,Namespace discovery compatibility and release verification + tests/helpers/cliRunner.ts,project,Exercise real source handlers through shared output capture for truthful CLI coverage + tests/integration/context-ops-namespace.integration.spec.ts,project,Shared native namespace contracts and verification + tests/integration/contract-command-enumeration.integration.spec.ts,project,Namespace discovery compatibility and release verification + tests/integration/help-runtime.spec.ts,project,Namespace discovery compatibility and release verification + tests/integration/release-readiness-runtime.spec.ts,project,Namespace discovery compatibility and release verification + tests/unit/cli/command-namespaces.spec.ts,project,Shared native namespace contracts and verification + tests/unit/commands/completion-command.spec.ts,project,Namespace discovery compatibility and release verification + tests/unit/commands/contracts-command.spec.ts,project,Namespace discovery compatibility and release verification + tests/unit/sdk/cli-contracts/grammar-contracts.spec.ts,project,Shared native namespace contracts and verification + tests/unit/sdk/contracts-full-projection.spec.ts,project,Namespace discovery compatibility and release verification +tests[1]{command,scope,timeout_seconds,provenance{author,created_at,source_kind,source_ref}}: + node scripts/run-tests.mjs test -- tests/unit/cli/command-namespaces.spec.ts tests/unit/sdk/cli-contracts tests/integration/context-ops-namespace.integration.spec.ts,project,240,"harness:codex","2026-09-09T04:24:19.565Z",local_mutation,feat/context-ops-command-namespaces +test_runs[2]: + - run_id: test-local-mttn9v3o-jfup1e + kind: test + status: passed + started_at: "2026-09-09T05:14:48.527Z" + finished_at: "2026-09-09T05:15:08.340Z" + recorded_at: "2026-09-09T05:15:08.340Z" + passed: 1 + failed: 0 + skipped: 0 + executions[1]{command,requested_pm_context_mode,pm_context_mode,workspace_context_mode,trust_reason}: + node scripts/run-tests.mjs test -- tests/unit/cli/command-namespaces.spec.ts tests/unit/sdk/cli-contracts tests/integration/context-ops-namespace.integration.spec.ts,schema,schema,source,local_source_ref + - run_id: test-local-mtuc07ig-i652ld + kind: test + status: passed + started_at: "2026-09-09T16:47:07.556Z" + finished_at: "2026-09-09T16:47:28.264Z" + recorded_at: "2026-09-09T16:47:28.264Z" + passed: 1 + failed: 0 + skipped: 0 + executions[1]{command,requested_pm_context_mode,pm_context_mode,workspace_context_mode,trust_reason}: + node scripts/run-tests.mjs test -- tests/unit/cli/command-namespaces.spec.ts tests/unit/sdk/cli-contracts tests/integration/context-ops-namespace.integration.spec.ts,schema,schema,source,local_source_ref +docs[8]{path,scope,note}: + CHANGELOG.md,project,Package-generated reviewed delivery attribution + docs/COMMAND_NAMESPACES.md,project,Native commands compatibility and package ownership + docs/generated/AGENT_CAPABILITY_ROUTING.md,project,Namespace discovery compatibility and release verification + docs/generated/AGENT_COMMAND_SURFACE.md,project,Namespace discovery compatibility and release verification + docs/generated/FLAG_LEXICON_BUDGETS.md,project,Namespace discovery compatibility and release verification + docs/README.md,project,Namespace discovery compatibility and release verification + packages/pm-governance-audit/README.md,project,Namespace discovery compatibility and release verification + packages/pm-search-advanced/README.md,project,Namespace discovery compatibility and release verification +close_reason: Implementation and review corrections verified locally; hosted rereview and merge remain separate delivery evidence. body: "" diff --git a/.agents/pm/tasks/pm-6apl.toon b/.agents/pm/tasks/pm-6apl.toon index 1f0e45e1a..2c1a40951 100644 --- a/.agents/pm/tasks/pm-6apl.toon +++ b/.agents/pm/tasks/pm-6apl.toon @@ -1,19 +1,23 @@ id: pm-6apl -title: "Group diagnostics/maintenance under pm ops: stats, health, validate, gc, telemetry, eval" +title: "Native pm ops stats, health, validate, gc, telemetry, eval and test-all with compatible root commands" description: "Diagnostics and maintenance commands become pm ops under ADR pm-pbyu: stats, health, validate, gc, telemetry, and eval. Each old spelling is alias-shimmed. Keeps validate/health output contracts byte-identical for CI consumers. Duplicate check: no existing ops/diagnostics-namespace item." type: Task -status: open +status: closed priority: 2 tags[4]: agent-ux,"area:cli","area:observability",simplification created_at: "2026-07-05T04:53:34.685Z" -updated_at: "2026-09-08T13:32:52.588Z" +updated_at: "2026-09-09T17:39:17.490Z" +closed_at: "2026-09-09T17:39:16.400Z" +completed_at: "2026-09-09T17:39:16.400Z" author: maintainer-agent estimated_minutes: 180 acceptance_criteria: pm ops stats/health/validate/gc/telemetry/eval subcommands with flag parity after ADR pm-pbyu acceptance; old spellings alias-shimmed with byte-identical output (CI scripts unaffected); contracts/MCP/completions/docs regenerated; existing specs pass via aliases parent: pm-n7rr risk: low confidence: medium -expected_result: "stats, health, validate, gc, telemetry and eval are verbs of pm ops with byte-identical output, and every old spelling keeps working as an alias." +resolution: Delivered native ops diagnostics and maintenance with compatible root aliases and unchanged SDK/MCP operation identities. Canonical namespace help remains measured under inherited token ceilings; maintained measurement helpers are documented. +expected_result: Ops commands preserve machine-readable results and extension ownership while canonical help stays within existing token ceilings. +actual_result: "Full static gates, linked tests, typecheck, package acceptance and 8639-test exact coverage passed. Canonical help measurements remain below all existing ceilings; baseline values were not relaxed." dependencies[7]: - id: pm-0z7n kind: blocked_by @@ -42,6 +46,105 @@ dependencies[7]: author: "harness:claude-code" source_kind: "cli:update:dep" author_source: detected +comments[14]{created_at,author,text}: + "2026-09-09T04:24:17.594Z","harness:codex","Implementation evidence: native command node placement preserves existing SDK handlers; bootstrap aliases, runtime contracts, capability routing, package availability, positional addressing, and three shell completions share declared mappings. TDD reproduced missing namespace support, then verified native/legacy argv and real isolated tracker reads. Broader quality gates and package acceptance are in progress." + "2026-09-09T04:42:07.069Z","harness:codex","Verification update: focused native/legacy and help/contract suite exercised 271 cases; 270 passed and one obsolete package-hint expectation was corrected. Native JSON help now retains optional-package installation recovery. GitHub live inventory found no open issues or PRs and no open Dependabot/code-scanning/secret-scanning alerts. Full coverage and static gates must finish before closure." + "2026-09-09T05:05:51.867Z","harness:codex","Distribution and safety evidence: packed local tarball installed independently with npm and Bun; both Node and Bun executed native/legacy CLI parity and imported the new SDK aliases/resolver through both published SDK entrypoints. Bash, Zsh and Fish syntax validation passed; real Fish completion returned native flags with global option values interleaved. Sentry 14-day gate returned critical=0/high=0; secret scan and all three GitHub alert inventories were clear." + "2026-09-09T05:15:21.025Z","harness:codex","Verification: linked sandbox-safe suite passed 42 tests across 8 files. Repository static gates, duplication checks, typecheck, source documentation coverage, package boundaries, grammar census (187/187), flag invocation parity (84 commands; 3855 flags), token budgets, MCP deprecations, graph composition, and record integrity passed. Native operations preserve existing SDK and MCP identities and machine-readable results." + "2026-09-09T05:21:01.180Z","harness:codex","Full-coverage run reproduced a docs-skills fixture race: its three-second polling deadline expired before the asynchronous gate emitted JSON, and delayed full-mode output contaminated the next links-only fixture. Replacing this bounded polling assumption with awaiting the actual output completion promise; existing test timeout and all quality thresholds remain unchanged." + "2026-09-09T05:29:22.960Z","harness:codex","Final verification: 8639 tests in 655 files passed; exact coverage 100/100/100/100 with zero uncovered counts (63818 statements, 48528 branches, 13248 functions, 61196 lines). Full static gates and source documentation requirements passed without relaxed thresholds. Linked suites, typecheck, secret scan, native/legacy temporary-workspace acceptance, real package installation, independent npm/Bun SDK consumers, and npx/bunx packed smoke with 13 packages passed. GitHub issue/PR and security alert inventories were clear before opening this delivery PR." + "2026-09-09T05:36:31.107Z","harness:codex","Reviewed closeout checks: defect-evidence gate passed with zero findings. Full-population history validation checked 2727 items with zero drift or identity discontinuities. Resolution validation returned its existing warning class for 170 historical records; this delivery records resolution, expected_result, and actual_result atomically for all three selected tasks. Registry confirmed pm-changelog 2026.9.8 latest; package-generated changelog and check passed after a cache-preferred retry for transient npm DNS failures." + "2026-09-09T05:59:47.138Z","harness:codex","PR 1225 review round 1: CI coverage, static quality, typecheck, compatibility, all OS runtime jobs and hosted analyzers passed. The smoke gate found stale token-baseline command identities next/validate after they moved under namespaces. Correcting discovery to measure canonical core leaves and renaming only those baseline keys while preserving every numeric ceiling. CodeRabbit also identified stronger help/availability/completion assertions and outcome-oriented changelog wording; Sourcery and cubic reported provider quota limits." + "2026-09-09T16:37:47.785Z","harness:codex","Review correction: canonical context next and ops validate remain measured after their root aliases leave default help. Existing per-command and aggregate ceilings are unchanged; the new ops root has its own bounded baseline. Shortened navigation rationale to fit its inherited ceiling. The 57-surface gate passed. Added regression checks for native help leaves, unavailable optional reindex and installed availability, completion row alignment, and docstrings for touched named functions." + "2026-09-09T16:43:30.996Z","harness:codex","Release health evidence refreshed: scheduled Auto Release 34324368050 and Release v2026.9.9 run 34326222024 succeeded. Fresh public-registry acceptance of 2026.9.9 passed every declared bin through npx and bunx, including CLI contracts, stdio MCP, HTTP discovery, and missing-bin negative controls. This publication predates PR 1225 and is not publication evidence for the namespace changes." + "2026-09-09T16:51:31.203Z","harness:codex","Review verification: 8639 tests across 655 files passed, exact coverage 100/100/100/100 with zero uncovered counts (63823 statements, 48528 branches, 13252 functions, 61201 lines). Full static quality, typecheck and the 57-surface token gate passed without relaxed existing ceilings. Each canonical linked namespace suite passed 42 tests; the new token-measurement link passed 12 tests. CodeRabbit accepted the three strengthened test assertions. The latest pm-changelog 2026.9.9 is installed; outcome titles feed package-generated release notes. PR 1225 requires a fresh hosted review on the forthcoming push." + "2026-09-09T17:17:24.520Z","harness:codex","Review round 2: rejected a proposed baseline reset with measured evidence: ops validate 4158 <= 4870 bytes, context next 2112 <= 2165, ops 1446 <= 1591, total help 231168 <= 251257. Regeneration would raise context next to 2324 bytes, violating the retained-ceiling requirement. Added descriptive JSDoc throughout the maintained measurement script and fixture helpers, and inlined its trivial single-use argument-key wrapper. All touched named callables now have JSDoc according to the TypeScript AST." + "2026-09-09T17:37:59.350Z","harness:codex","Verification note: the first final coverage attempt overlapped full static quality and timed out one existing whole-repository absence-tolerance scan at 30 seconds; 8638 other tests passed. The unchanged focused file then passed all 19 tests in 3.15 seconds. Full static quality completed successfully. A fresh full coverage run is executing alone; no test timeout, exclusion, baseline or coverage threshold was changed." + "2026-09-09T17:39:15.307Z","harness:codex","Final review correction verification: the isolated full suite passed 8639 tests in 655 files with exact 100/100/100/100 and zero uncovered counts: 63824 statements, 48530 branches, 13252 functions, 61202 lines. Full static quality and typecheck passed; both items passed both sandboxed linked commands. Real Fish reproduced the original leak and passed context/ctx positives plus focus/next negatives after correction. All touched named callables have descriptive JSDoc by AST inspection; this is scoped evidence, not a repository-wide function-documentation percentage. Every received review artifact was reacted to and replied to; the baseline-reset finding was rejected with unchanged-ceiling measurements. Final hosted verification follows the correction push in PR 1225." notes[1]{created_at,author,text}: "2026-07-06T08:04:51.703Z",maintainer-agent,"Scope addition from audit #7 (2026-07-06): include 'test-all' in the ops grouping (workspace-wide linked-test run is a diagnostic, not an item facet). Target verb set becomes: stats, health, validate, gc, telemetry, eval, test-all. See ADR addendum comment on pm-pbyu." +learnings[1]{created_at,author,text}: + "2026-09-09T05:19:57.922Z","harness:codex","When testing CLI orchestration coverage, invoke the instrumented source entrypoint through real transport capture. Executing dist verifies distribution behavior but does not prove source branch coverage." +files[32]{path,scope,note}: + .agents/pm/extensions/.managed-extensions.json,project,Latest package-owned changelog generator used for reviewed namespace delivery + scripts/agent-token-surface-baseline.json,project,Rename next and validate identities without increasing budgets + scripts/measure-agent-token-surface.mjs,project,Keep canonical namespace help measured by unchanged token-surface budgets + scripts/release/flag-invocation-parity.mjs,project,Namespace discovery compatibility and release verification + sdk/public-surface.json,project,Namespace discovery compatibility and release verification + src/cli/command-namespaces.ts,project,Shared native namespace contracts and verification + src/cli/help-content.ts,project,Shared native namespace contracts and verification + src/cli/help-json-payload.ts,project,Namespace discovery compatibility and release verification + src/cli/main.ts,project,Shared native namespace contracts and verification + src/sdk/agent-capability-contracts.ts,project,Shared native namespace contracts and verification + src/sdk/agent/item-addressing.ts,project,Shared native namespace contracts and verification + src/sdk/cli-bootstrap.ts,project,Shared native namespace contracts and verification + src/sdk/cli-contracts.ts,project,Shared native namespace contracts and verification + src/sdk/cli-contracts/command-aliases.ts,project,Shared native namespace contracts and verification + src/sdk/cli-contracts/flag-lexicon-contracts.ts,project,Shared native namespace contracts and verification + src/sdk/cli-contracts/grammar-contracts.ts,project,Shared native namespace contracts and verification + src/sdk/cli-contracts/runtime-contracts.ts,project,Shared native namespace contracts and verification + src/sdk/completion.ts,project,Shared native namespace contracts and verification + src/sdk/index.ts,project,Shared native namespace contracts and verification + tests/fixtures/contracts/full.json,project,Namespace discovery compatibility and release verification + tests/helpers/cliRunner.ts,project,Exercise real source handlers through shared output capture for truthful CLI coverage + tests/integration/context-ops-namespace.integration.spec.ts,project,Shared native namespace contracts and verification + tests/integration/contract-command-enumeration.integration.spec.ts,project,Namespace discovery compatibility and release verification + tests/integration/help-runtime.spec.ts,project,Namespace discovery compatibility and release verification + tests/integration/release-readiness-runtime.spec.ts,project,Namespace discovery compatibility and release verification + tests/unit/cli/command-namespaces.spec.ts,project,Shared native namespace contracts and verification + tests/unit/commands/completion-command.spec.ts,project,Namespace discovery compatibility and release verification + tests/unit/commands/contracts-command.spec.ts,project,Namespace discovery compatibility and release verification + tests/unit/scripts/measure-agent-token-surface.spec.ts,project,Regression coverage for canonical namespaced help measurement + tests/unit/scripts/release/docs-skills-gate.spec.ts,project,Await actual documentation gate completion to prevent full-coverage output racing the next fixture + tests/unit/sdk/cli-contracts/grammar-contracts.spec.ts,project,Shared native namespace contracts and verification + tests/unit/sdk/contracts-full-projection.spec.ts,project,Namespace discovery compatibility and release verification +tests[2]{command,scope,timeout_seconds,provenance{author,created_at,source_kind,source_ref}}: + node scripts/run-tests.mjs test -- tests/unit/cli/command-namespaces.spec.ts tests/unit/sdk/cli-contracts tests/integration/context-ops-namespace.integration.spec.ts,project,240,"harness:codex","2026-09-09T04:24:17.002Z",local_mutation,feat/context-ops-command-namespaces + node scripts/run-tests.mjs test -- tests/unit/scripts/measure-agent-token-surface.spec.ts,project,240,"harness:codex","2026-09-09T16:37:45.530Z",local_mutation,feat/context-ops-command-namespaces +test_runs[3]: + - run_id: test-local-mttn83ru-ljbmsy + kind: test + status: passed + started_at: "2026-09-09T05:13:23.931Z" + finished_at: "2026-09-09T05:13:46.265Z" + recorded_at: "2026-09-09T05:13:46.265Z" + passed: 1 + failed: 0 + skipped: 0 + executions[1]{command,requested_pm_context_mode,pm_context_mode,workspace_context_mode,trust_reason}: + node scripts/run-tests.mjs test -- tests/unit/cli/command-namespaces.spec.ts tests/unit/sdk/cli-contracts tests/integration/context-ops-namespace.integration.spec.ts,schema,schema,source,local_source_ref + - run_id: test-local-mtubzqrn-tck45x + kind: test + status: passed + started_at: "2026-09-09T16:46:41.382Z" + finished_at: "2026-09-09T16:47:06.563Z" + recorded_at: "2026-09-09T16:47:06.563Z" + passed: 2 + failed: 0 + skipped: 0 + executions[2]{command,requested_pm_context_mode,pm_context_mode,workspace_context_mode,trust_reason}: + node scripts/run-tests.mjs test -- tests/unit/cli/command-namespaces.spec.ts tests/unit/sdk/cli-contracts tests/integration/context-ops-namespace.integration.spec.ts,schema,schema,source,local_source_ref + node scripts/run-tests.mjs test -- tests/unit/scripts/measure-agent-token-surface.spec.ts,schema,schema,source,local_source_ref + - run_id: test-local-mtud4how-dsn5jl + kind: test + status: passed + started_at: "2026-09-09T17:18:15.175Z" + finished_at: "2026-09-09T17:18:47.695Z" + recorded_at: "2026-09-09T17:18:47.695Z" + passed: 2 + failed: 0 + skipped: 0 + executions[2]{command,requested_pm_context_mode,pm_context_mode,workspace_context_mode,trust_reason}: + node scripts/run-tests.mjs test -- tests/unit/cli/command-namespaces.spec.ts tests/unit/sdk/cli-contracts tests/integration/context-ops-namespace.integration.spec.ts,schema,schema,source,local_source_ref + node scripts/run-tests.mjs test -- tests/unit/scripts/measure-agent-token-surface.spec.ts,schema,schema,source,local_source_ref +docs[8]{path,scope,note}: + CHANGELOG.md,project,Package-generated reviewed delivery attribution + docs/COMMAND_NAMESPACES.md,project,Native commands compatibility and package ownership + docs/generated/AGENT_CAPABILITY_ROUTING.md,project,Namespace discovery compatibility and release verification + docs/generated/AGENT_COMMAND_SURFACE.md,project,Namespace discovery compatibility and release verification + docs/generated/FLAG_LEXICON_BUDGETS.md,project,Namespace discovery compatibility and release verification + docs/README.md,project,Namespace discovery compatibility and release verification + packages/pm-governance-audit/README.md,project,Namespace discovery compatibility and release verification + packages/pm-search-advanced/README.md,project,Namespace discovery compatibility and release verification +close_reason: Implementation and review corrections verified for PR 1225. body: "" diff --git a/.agents/pm/tasks/pm-kcs4.toon b/.agents/pm/tasks/pm-kcs4.toon index 43b39b5e4..3aff69337 100644 --- a/.agents/pm/tasks/pm-kcs4.toon +++ b/.agents/pm/tasks/pm-kcs4.toon @@ -1,19 +1,23 @@ id: pm-kcs4 -title: "Consolidate the navigation trio under the context noun: next and focus become context verbs (context/next/focus = one noun)" +title: Native pm context next and pm context focus with permanent navigation aliases description: "The pm-n7rr target surface names 'context (next/focus)' as one noun. Today next and focus are separate top-level commands. Fold them as verbs of context (pm context next, pm context focus) while keeping pm next and pm focus working forever as hidden aliases — these are the highest-frequency agent commands, so migration hints must respect the ux.deprecation_hints suppression config from pm-0z7n. pm next actionability semantics (core/item/actionability.ts, PR#357) and pm focus session context (runtime/session.json, PR#257) are unchanged — grammar only. Duplicate check: pm-72xf (closed focus inheritance feature); no open overlap." type: Task -status: open +status: closed priority: 2 tags[3]: agent-ux,"area:cli",simplification created_at: "2026-07-05T05:08:52.089Z" -updated_at: "2026-09-08T13:32:55.294Z" +updated_at: "2026-09-09T17:39:14.490Z" +closed_at: "2026-09-09T17:39:13.521Z" +completed_at: "2026-09-09T17:39:13.521Z" author: maintainer-agent estimated_minutes: 120 acceptance_criteria: "context noun exposes next and focus verbs with payloads identical to the standalone commands; pm next / pm focus keep working as aliases with suppressible hints; spelling-parity spec green; contracts, completions, docs, and MCP names regenerated; top-level help shows a single navigation noun." parent: pm-n7rr risk: low confidence: high -expected_result: "next and focus are verbs of the context noun with identical payloads, and pm next and pm focus keep working forever as aliases." +resolution: "Delivered native context next/focus through shared SDK command contracts, permanent root aliases, coherent discovery and namespace-aware completion. Fish runtime schema flags now remain scoped to context snapshots." +expected_result: Native and compatibility navigation commands preserve SDK results and focus behavior; shell completion offers only flags belonging to the selected operation. +actual_result: Real temporary-workspace and npm/Bun acceptance passed; real Fish preserved context/ctx runtime fields and excluded them from focus/next; full suite and exact coverage passed. dependencies[6]: - id: pm-0z7n kind: blocked_by @@ -36,4 +40,91 @@ dependencies[6]: author: "harness:claude-code" source_kind: "cli:update:dep" author_source: detected +comments[8]{created_at,author,text}: + "2026-09-09T04:24:15.265Z","harness:codex","Implementation evidence: native command node placement preserves existing SDK handlers; bootstrap aliases, runtime contracts, capability routing, package availability, positional addressing, and three shell completions share declared mappings. TDD reproduced missing namespace support, then verified native/legacy argv and real isolated tracker reads. Broader quality gates and package acceptance are in progress." + "2026-09-09T04:42:05.181Z","harness:codex","Verification update: focused native/legacy and help/contract suite exercised 271 cases; 270 passed and one obsolete package-hint expectation was corrected. Native JSON help now retains optional-package installation recovery. GitHub live inventory found no open issues or PRs and no open Dependabot/code-scanning/secret-scanning alerts. Full coverage and static gates must finish before closure." + "2026-09-09T04:56:37.103Z","harness:codex","Coverage checkpoint: all 8,637 tests passed; exact global coverage reported 99.99 statements, 99.98 branches, 99.98 functions, 99.99 lines. Added behavioral cases for the remaining eight branches, two functions and one line without exclusions or threshold changes; 26 focused tests now pass. Compact summary now suppresses duplicate root aliases only in unscoped summary mode, retaining full and explicit alias contracts; the unchanged completed-task token gate passes." + "2026-09-09T05:15:20.146Z","harness:codex","Verification: linked sandbox-safe suite passed 42 tests across 8 files. Final typecheck passed across source, SDK type tests, packages, and examples. Compact contracts summary measured 4075 tokens versus the unchanged 4111-token ceiling; composite task measured 12631 versus 12667. Native context defaults and focus persistence passed real temporary-workspace and independent npm/Bun package acceptance." + "2026-09-09T05:29:21.198Z","harness:codex","Final verification: 8639 tests in 655 files passed; exact coverage 100/100/100/100 with zero uncovered counts (63818 statements, 48528 branches, 13248 functions, 61196 lines). Full static gates and source documentation requirements passed without relaxed thresholds. Linked suites, typecheck, secret scan, native/legacy temporary-workspace acceptance, real package installation, independent npm/Bun SDK consumers, and npx/bunx packed smoke with 13 packages passed. GitHub issue/PR and security alert inventories were clear before opening this delivery PR." + "2026-09-09T16:51:27.523Z","harness:codex","Review verification: 8639 tests across 655 files passed, exact coverage 100/100/100/100 with zero uncovered counts (63823 statements, 48528 branches, 13252 functions, 61201 lines). Full static quality, typecheck and the 57-surface token gate passed without relaxed existing ceilings. Each canonical linked namespace suite passed 42 tests; the new token-measurement link passed 12 tests. CodeRabbit accepted the three strengthened test assertions. The latest pm-changelog 2026.9.9 is installed; outcome titles feed package-generated release notes. PR 1225 requires a fresh hosted review on the forthcoming push." + "2026-09-09T17:17:23.079Z","harness:codex","Review round 2: reproduced the context runtime-field leak in real Fish completion (context focus offered --context-segment) and a failing focused assertion. The renderer now uses semantic context gating, preserving context/ctx snapshot flags while excluding focus/next. The focused suite passed 117 tests; real Fish passed three snapshot positives, five navigation negatives, and the native --clear flag. Full coverage and static verification are running." + "2026-09-09T17:39:12.628Z","harness:codex","Final review correction verification: the isolated full suite passed 8639 tests in 655 files with exact 100/100/100/100 and zero uncovered counts: 63824 statements, 48530 branches, 13252 functions, 61202 lines. Full static quality and typecheck passed; both items passed both sandboxed linked commands. Real Fish reproduced the original leak and passed context/ctx positives plus focus/next negatives after correction. All touched named callables have descriptive JSDoc by AST inspection; this is scoped evidence, not a repository-wide function-documentation percentage. Every received review artifact was reacted to and replied to; the baseline-reset finding was rejected with unchanged-ceiling measurements. Final hosted verification follows the correction push in PR 1225." +learnings[1]{created_at,author,text}: + "2026-09-09T05:19:57.338Z","harness:codex","Keep command spelling normalization separate from SDK operation identity: namespace discovery can change without changing context selection, focus persistence, extension hooks, or MCP actions." +files[27]{path,scope,note}: + scripts/release/flag-invocation-parity.mjs,project,Namespace discovery compatibility and release verification + sdk/public-surface.json,project,Namespace discovery compatibility and release verification + src/cli/command-namespaces.ts,project,Shared native namespace contracts and verification + src/cli/help-content.ts,project,Shared native namespace contracts and verification + src/cli/help-json-payload.ts,project,Namespace discovery compatibility and release verification + src/cli/main.ts,project,Shared native namespace contracts and verification + src/sdk/agent-capability-contracts.ts,project,Shared native namespace contracts and verification + src/sdk/agent/item-addressing.ts,project,Shared native namespace contracts and verification + src/sdk/cli-bootstrap.ts,project,Shared native namespace contracts and verification + src/sdk/cli-contracts.ts,project,Shared native namespace contracts and verification + src/sdk/cli-contracts/command-aliases.ts,project,Shared native namespace contracts and verification + src/sdk/cli-contracts/flag-lexicon-contracts.ts,project,Shared native namespace contracts and verification + src/sdk/cli-contracts/grammar-contracts.ts,project,Shared native namespace contracts and verification + src/sdk/cli-contracts/runtime-contracts.ts,project,Shared native namespace contracts and verification + src/sdk/completion.ts,project,Shared native namespace contracts and verification + src/sdk/index.ts,project,Shared native namespace contracts and verification + tests/fixtures/contracts/full.json,project,Namespace discovery compatibility and release verification + tests/helpers/cliRunner.ts,project,Exercise real source handlers through shared output capture for truthful CLI coverage + tests/integration/context-ops-namespace.integration.spec.ts,project,Shared native namespace contracts and verification + tests/integration/contract-command-enumeration.integration.spec.ts,project,Namespace discovery compatibility and release verification + tests/integration/help-runtime.spec.ts,project,Namespace discovery compatibility and release verification + tests/integration/release-readiness-runtime.spec.ts,project,Namespace discovery compatibility and release verification + tests/unit/cli/command-namespaces.spec.ts,project,Shared native namespace contracts and verification + tests/unit/commands/completion-command.spec.ts,project,Namespace discovery compatibility and release verification + tests/unit/commands/contracts-command.spec.ts,project,Namespace discovery compatibility and release verification + tests/unit/sdk/cli-contracts/grammar-contracts.spec.ts,project,Shared native namespace contracts and verification + tests/unit/sdk/contracts-full-projection.spec.ts,project,Namespace discovery compatibility and release verification +tests[2]{command,scope,timeout_seconds,provenance{author,created_at,source_kind,source_ref}}: + node scripts/run-tests.mjs test -- tests/unit/cli/command-namespaces.spec.ts tests/unit/sdk/cli-contracts tests/integration/context-ops-namespace.integration.spec.ts,project,240,"harness:codex","2026-09-09T04:24:14.680Z",local_mutation,feat/context-ops-command-namespaces + node scripts/run-tests.mjs test -- tests/unit/commands/completion-command.spec.ts,project,240,"harness:codex","2026-09-09T17:17:21.899Z",local_mutation,feat/context-ops-command-namespaces +test_runs[3]: + - run_id: test-local-mttn7b8b-r62xzt + kind: test + status: passed + started_at: "2026-09-09T05:12:46.368Z" + finished_at: "2026-09-09T05:13:09.274Z" + recorded_at: "2026-09-09T05:13:09.274Z" + passed: 1 + failed: 0 + skipped: 0 + executions[1]{command,requested_pm_context_mode,pm_context_mode,workspace_context_mode,trust_reason}: + node scripts/run-tests.mjs test -- tests/unit/cli/command-namespaces.spec.ts tests/unit/sdk/cli-contracts tests/integration/context-ops-namespace.integration.spec.ts,schema,schema,source,local_source_ref + - run_id: test-local-mtubz69r-4doqoh + kind: test + status: passed + started_at: "2026-09-09T16:46:16.728Z" + finished_at: "2026-09-09T16:46:39.999Z" + recorded_at: "2026-09-09T16:46:39.999Z" + passed: 1 + failed: 0 + skipped: 0 + executions[1]{command,requested_pm_context_mode,pm_context_mode,workspace_context_mode,trust_reason}: + node scripts/run-tests.mjs test -- tests/unit/cli/command-namespaces.spec.ts tests/unit/sdk/cli-contracts tests/integration/context-ops-namespace.integration.spec.ts,schema,schema,source,local_source_ref + - run_id: test-local-mtud3rbd-yw7mrx + kind: test + status: passed + started_at: "2026-09-09T17:17:23.319Z" + finished_at: "2026-09-09T17:18:13.511Z" + recorded_at: "2026-09-09T17:18:13.511Z" + passed: 2 + failed: 0 + skipped: 0 + executions[2]{command,requested_pm_context_mode,pm_context_mode,workspace_context_mode,trust_reason}: + node scripts/run-tests.mjs test -- tests/unit/cli/command-namespaces.spec.ts tests/unit/sdk/cli-contracts tests/integration/context-ops-namespace.integration.spec.ts,schema,schema,source,local_source_ref + node scripts/run-tests.mjs test -- tests/unit/commands/completion-command.spec.ts,schema,schema,source,local_source_ref +docs[8]{path,scope,note}: + CHANGELOG.md,project,Package-generated reviewed delivery attribution + docs/COMMAND_NAMESPACES.md,project,Native commands compatibility and package ownership + docs/generated/AGENT_CAPABILITY_ROUTING.md,project,Namespace discovery compatibility and release verification + docs/generated/AGENT_COMMAND_SURFACE.md,project,Namespace discovery compatibility and release verification + docs/generated/FLAG_LEXICON_BUDGETS.md,project,Namespace discovery compatibility and release verification + docs/README.md,project,Namespace discovery compatibility and release verification + packages/pm-governance-audit/README.md,project,Namespace discovery compatibility and release verification + packages/pm-search-advanced/README.md,project,Namespace discovery compatibility and release verification +close_reason: Implementation and review corrections verified for PR 1225. body: "" diff --git a/.github/workflows/codspeed.yml b/.github/workflows/codspeed.yml index 8bd1466ee..d9e86d909 100644 --- a/.github/workflows/codspeed.yml +++ b/.github/workflows/codspeed.yml @@ -44,6 +44,16 @@ jobs: - name: Install dependencies run: pnpm install --frozen-lockfile + - name: Disable unused Chrome APT sources + run: | + # pm-zvy31w: Chrome index outages must not block Ubuntu instrument dependencies. + # Preserve the unused sources without relaxing package signature or hash checks. + for chrome_source in /etc/apt/sources.list.d/google-chrome.list /etc/apt/sources.list.d/google-chrome.sources; do + if [ -f "${chrome_source}" ]; then + sudo mv -- "${chrome_source}" "${chrome_source}.disabled" + fi + done + - name: Run benchmarks uses: CodSpeedHQ/action@373d6868929f444bc08d901fd0eb0ad52a8875ea # v5.2.1 with: diff --git a/CHANGELOG.md b/CHANGELOG.md index 011c16a17..bb3b3b38a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## Unreleased + +### Fixed + +- Isolate CodSpeed dependency setup from unrelated Chrome APT index failures ([pm-zvy31w](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-zvy31w.toon)) + +### Other + +- Native pm ops stats, health, validate, gc, telemetry, eval and test-all with compatible root commands ([pm-6apl](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-6apl.toon)) +- Native pm context next and pm context focus with permanent navigation aliases ([pm-kcs4](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-kcs4.toon)) +- Native pm ops normalize, pm ops reindex and pm history events with compatibility aliases ([pm-3i9q8g](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-3i9q8g.toon)) + ## 2026.9.9 - 2026-09-09 ### Added diff --git a/docs/COMMAND_NAMESPACES.md b/docs/COMMAND_NAMESPACES.md new file mode 100644 index 000000000..b0097fff8 --- /dev/null +++ b/docs/COMMAND_NAMESPACES.md @@ -0,0 +1,65 @@ +# Context and operations command namespaces + +Tracked in [pm-kcs4](../.agents/pm/tasks/pm-kcs4.toon), +[pm-6apl](../.agents/pm/tasks/pm-6apl.toon), and +[pm-3i9q8g](../.agents/pm/tasks/pm-3i9q8g.toon). + +The CLI groups navigation and maintenance under stable nouns. Existing root +spellings remain executable compatibility aliases with the same arguments, +results, exit codes, and SDK behavior. + +| Native invocation | Compatibility spelling | Purpose | +| --- | --- | --- | +| `pm context next` | `pm next` | Select ready work and explain blockers | +| `pm context focus` | `pm focus` | Read, set, or clear the focused item | +| `pm ops stats` | `pm stats` | Inspect tracker statistics | +| `pm ops health` | `pm health` | Diagnose tracker health | +| `pm ops validate` | `pm validate` | Validate metadata and history | +| `pm ops gc` | `pm gc` | Clean optional cache artifacts | +| `pm ops telemetry` | `pm telemetry` | Inspect and manage telemetry | +| `pm ops eval` | `pm eval` | Evaluate retrieval quality | +| `pm ops test-all` | `pm test-all` | Run selected linked tests | +| `pm ops reindex` | `pm reindex` | Refresh indexes through search-advanced | +| `pm ops normalize` | `pm normalize` | Normalize through an active governance package | +| `pm history events` | `pm events` | Read or follow committed mutation events | + +`pm context --limit 10 --for orient` still produces a context snapshot. +`pm history --verify` still reads and verifies one item's history. +Namespace leaves do not change either default operation. + +## Discover only what the current task needs + +```bash +pm context next --limit 5 --ready-only +pm context focus --id pm-example +pm ops health --check-only --summary +pm ops validate --check-history-drift +pm history events --item pm-example --limit 10 +pm ops --help +pm contracts --command "ops stats" --flags-only +``` + +Help, contracts, and shell completion expose native paths. Compatibility aliases +remain declared in the SDK alias table. Alias guidance uses the existing +`ux.deprecation_hints` setting. Human-readable calls emit it on stderr; JSON and +quiet calls suppress it. Compact contract summaries omit duplicate root alias +rows; full and explicitly selected contracts retain them. Optional commands appear only when their providing package is active; +namespace placement does not promote package behavior into core. + +## SDK and package integration + +`PM_NAMESPACED_COMMAND_ALIASES` and `resolvePmCommandOperation` are exported +from `@unbrained/pm-cli/sdk` and `@unbrained/pm-cli/sdk/contracts`. +The resolver maps a native path such as `context next` to the existing SDK +operation identity `next`. Unknown paths are preserved. SDK functions, MCP +action names, extension activation selectors, and command hooks retain their +existing operation identities. + +Packages that provide `reindex` or `normalize` keep their existing command +registration. The CLI places the registered handler beneath `ops` after +activation, preserving flags, argument parsing, and nested commands. A conflicting +native destination fails explicitly instead of silently replacing a handler. + +Generated Bash, Zsh, and Fish scripts recognize namespace command positions and +skip global option values when selecting a leaf. Re-generate installed completion +scripts after upgrading with `pm completion ` from guide-shell. diff --git a/docs/README.md b/docs/README.md index 8c8cea713..323807bf5 100644 --- a/docs/README.md +++ b/docs/README.md @@ -35,6 +35,7 @@ pm guide release --json - [Onboarding](ONBOARDING.md) - first-two-hours maintainer and contributor setup. - [Agent Guide](AGENT_GUIDE.md) - canonical agent loop, tracker linking, and token-minimal command choices. - [Command Reference](COMMANDS.md) - command families with examples and when to use each family. +- [Context and Operations Namespaces](COMMAND_NAMESPACES.md) - native navigation, diagnostics, event streams, and compatibility aliases. - [CLI Scripting Contract](SCRIPTING.md) - exit codes, flat mutation receipts versus read envelopes, stdout/stderr boundaries, stable JSON fields, uniform OR filters, and shell composition recipes. - [Configuration](CONFIGURATION.md) - settings, storage formats, output, search, validation, and environment variables. - [Testing](TESTING.md) - sandbox-safe local tests and linked-test orchestration. diff --git a/docs/generated/AGENT_CAPABILITY_ROUTING.md b/docs/generated/AGENT_CAPABILITY_ROUTING.md index 62976adfe..32f280859 100644 --- a/docs/generated/AGENT_CAPABILITY_ROUTING.md +++ b/docs/generated/AGENT_CAPABILITY_ROUTING.md @@ -6,12 +6,12 @@ This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it ma | Capability family | Commands | | --- | --- | -| workspace | `init`, `config`, `merge`, `schema`, `profile`, `telemetry`, `health`, `gc`, `workspace` | -| intake | `create`, `copy`, `focus`, `restore` | -| context | `list`, `aggregate`, `context`, `get`, `search`, `duplicates`, `eval`, `next`, `activity`, `stats`, `help` | +| workspace | `init`, `config`, `merge`, `schema`, `profile`, `ops telemetry`, `ops health`, `ops gc`, `workspace` | +| intake | `create`, `copy`, `context focus`, `restore` | +| context | `list`, `aggregate`, `context`, `get`, `search`, `duplicates`, `ops eval`, `context next`, `activity`, `ops stats`, `help` | | lifecycle | `update`, `update-many`, `close`, `close-many`, `delete`, `claim`, `release`, `start-task`, `pause-task`, `close-task` | -| evidence | `history`, `events`, `history-redact`, `history-repair`, `history-compact`, `history-author-acknowledge`, `append`, `comments`, `notes`, `learnings`, `files`, `docs` | +| evidence | `history`, `history events`, `history-redact`, `history-repair`, `history-compact`, `history-author-acknowledge`, `append`, `comments`, `notes`, `learnings`, `files`, `docs` | | graph | `graph`, `deps`, `plan` | -| quality | `test`, `test-all`, `validate`, `assurance`, `contracts` | +| quality | `test`, `ops test-all`, `ops validate`, `assurance`, `contracts`, `ops` | | automation | `meet`, `event`, `remind` | | extensions | `package` | diff --git a/docs/generated/AGENT_COMMAND_SURFACE.md b/docs/generated/AGENT_COMMAND_SURFACE.md index ae9ae0920..b502b4854 100644 --- a/docs/generated/AGENT_COMMAND_SURFACE.md +++ b/docs/generated/AGENT_COMMAND_SURFACE.md @@ -15,6 +15,7 @@ This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it ma | `item-reopen` | full | lifecycle | | `copy` | full | intake | | `focus` | standard | intake | +| `context focus` | standard | intake | | `list` | core | context | | `list-all` | standard | context | | `list-draft` | full | context | @@ -31,9 +32,12 @@ This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it ma | `search` | core | context | | `duplicates` | full | context | | `eval` | full | context | +| `ops eval` | full | context | | `next` | core | context | +| `context next` | core | context | | `history` | standard | evidence | | `events` | standard | evidence | +| `history events` | standard | evidence | | `history-redact` | full | evidence | | `history-repair` | full | evidence | | `history-compact` | full | evidence | @@ -58,12 +62,18 @@ This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it ma | `plan` | core | graph | | `test` | standard | quality | | `test-all` | full | quality | +| `ops test-all` | full | quality | | `telemetry` | full | workspace | +| `ops telemetry` | full | workspace | | `stats` | full | context | +| `ops stats` | full | context | | `health` | standard | workspace | +| `ops health` | standard | workspace | | `validate` | core | quality | +| `ops validate` | core | quality | | `assurance` | full | quality | | `gc` | full | workspace | +| `ops gc` | full | workspace | | `workspace` | full | workspace | | `contracts` | standard | quality | | `claim` | core | lifecycle | @@ -75,6 +85,7 @@ This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it ma | `event` | full | automation | | `remind` | full | automation | | `help` | core | context | +| `ops` | core | quality | | `completion-statuses` | internal | internal | | `completion-tags` | internal | internal | | `completion-types` | internal | internal | diff --git a/docs/generated/FLAG_LEXICON_BUDGETS.md b/docs/generated/FLAG_LEXICON_BUDGETS.md index 5b72ba078..c310618be 100644 --- a/docs/generated/FLAG_LEXICON_BUDGETS.md +++ b/docs/generated/FLAG_LEXICON_BUDGETS.md @@ -74,3 +74,13 @@ This file is generated by `listPmFlagLexicon()`. Compatibility aliases do not co | `event` | automation | 33 | 33 | | `remind` | automation | 29 | 29 | | `test-runs-worker` | internal | 25 | 25 | +| `context next` | context | 38 | 38 | +| `context focus` | intake | 22 | 22 | +| `ops stats` | context | 29 | 29 | +| `ops health` | workspace | 36 | 36 | +| `ops validate` | quality | 46 | 46 | +| `ops gc` | workspace | 22 | 22 | +| `ops telemetry` | workspace | 21 | 21 | +| `ops eval` | context | 25 | 25 | +| `ops test-all` | quality | 40 | 40 | +| `history events` | evidence | 33 | 33 | diff --git a/packages/pm-governance-audit/README.md b/packages/pm-governance-audit/README.md index 4e1f19d66..350c7f76a 100644 --- a/packages/pm-governance-audit/README.md +++ b/packages/pm-governance-audit/README.md @@ -23,7 +23,7 @@ bodies and full before/after snapshots. - `pm dedupe-audit` - `pm dedupe-merge` - `pm comments-audit` -- `pm normalize` +- `pm ops normalize` The package also augments existing commands with audit-only flags: @@ -63,7 +63,7 @@ pm install audit --project pm dedupe-audit --mode parent_scope --status all --limit 20 --json pm dedupe-merge --keep pm-canonical --close pm-duplicate --dry-run --json pm comments-audit --latest 3 --limit-items 20 --limit-rows 50 --json -pm normalize --dry-run --json +pm ops normalize --dry-run --json ``` `dedupe-audit --status all` explicitly selects every status and is equivalent @@ -80,3 +80,5 @@ For `comments-audit`, `--limit-items` caps item scanning while `--limit-rows` caps emitted comment rows across the whole result. The older `--limit` spelling remains a deprecated alias for `--limit-rows`; do not combine the two row-limit spellings. + +`pm normalize` remains a compatibility alias for `pm ops normalize`. diff --git a/packages/pm-search-advanced/README.md b/packages/pm-search-advanced/README.md index 709cd211d..459a046a3 100644 --- a/packages/pm-search-advanced/README.md +++ b/packages/pm-search-advanced/README.md @@ -13,7 +13,7 @@ First-party package that restores optional advanced search surfaces in bare-core - `--type`, `--tag`, `--priority` - `--deadline-before`, `--deadline-after` - `--limit`, `--fields`, `--compact`, `--full` -- Adds `pm reindex` with: +- Adds `pm ops reindex` with: - `--mode keyword|semantic|hybrid` - `--progress` - `--eval` @@ -31,8 +31,8 @@ pm install search-advanced --project pm search-advanced "vector cache" --mode hybrid --limit 5 --json pm search-advanced --hybrid "vector cache" --limit 5 --json pm search-advanced "calendar package" --mode keyword --fields id,title,score --compact --json -pm reindex --mode hybrid --progress --json -pm reindex --mode keyword --eval --eval-fixtures tests/search-eval/golden-queries.json --json +pm ops reindex --mode hybrid --progress --json +pm ops reindex --mode keyword --eval --eval-fixtures tests/search-eval/golden-queries.json --json ``` Without `--mode`, `--semantic`, or `--hybrid`, `search-advanced` stays keyword-first for fast agent reads. @@ -44,7 +44,7 @@ lockstep with the core CLI without a copied flag table. ## Reindex eval harness -`pm reindex --eval` runs a golden-query relevance harness after the reindex pass and appends a deterministic `eval` object to JSON output: +`pm ops reindex --eval` runs a golden-query relevance harness after the reindex pass and appends a deterministic `eval` object to JSON output: - per-fixture pass/fail verdicts - `ndcg_at_5` score for each fixture @@ -76,3 +76,5 @@ Rules: - `mode` is optional (`keyword`, `semantic`, `hybrid`), default `keyword`. - `expected_top_ids` is required and defines the ideal ranking for nDCG@5. - `min_ndcg_at_5` is optional (`0..1`), default `0.7`. + +`pm reindex` remains a compatibility alias for `pm ops reindex`. diff --git a/scripts/agent-token-surface-baseline.json b/scripts/agent-token-surface-baseline.json index 0ade3a0c8..7f75ed4e7 100644 --- a/scripts/agent-token-surface-baseline.json +++ b/scripts/agent-token-surface-baseline.json @@ -30,11 +30,13 @@ "claim", "close", "context", + "context next", "create", "get", "init", "list", - "next", + "ops", + "ops validate", "plan", "plan add-step", "plan approve", @@ -55,7 +57,6 @@ "release", "search", "update", - "validate", "workspace position", "workspace snapshot create", "workspace snapshot delete", @@ -85,11 +86,11 @@ "create": 9394, "list": 9204, "search": 8261, - "validate": 4870, + "ops validate": 4870, "context": 3441, "get": 3049, "init": 2204, - "next": 2165, + "context next": 2165, "close": 2077, "claim": 2020, "assurance risk": 1152, @@ -110,7 +111,8 @@ "workspace snapshot delete": 888, "release": 537, "workspace position": 136, - "assurance lineages": 1229 + "assurance lineages": 1229, + "ops": 1591 } } } diff --git a/scripts/measure-agent-token-surface.mjs b/scripts/measure-agent-token-surface.mjs index 6b83cfb82..25748592b 100644 --- a/scripts/measure-agent-token-surface.mjs +++ b/scripts/measure-agent-token-surface.mjs @@ -13,7 +13,9 @@ import { fileURLToPath } from "node:url"; import { PM_CORE_COMMAND_NAMES, PM_POSITIONAL_ACTION_CONTRACTS, + PM_NAMESPACED_COMMAND_ALIASES, } from "../dist/sdk/cli-contracts.js"; +import { resolvePmCommandVisibilityTier } from "../dist/sdk/agent-capability-contracts.js"; const REPO_ROOT = join(dirname(fileURLToPath(import.meta.url)), ".."); const CONFIGURED_PM_BIN = process.env.PM_BIN; @@ -30,17 +32,25 @@ const DEFAULT_BASELINE = join( const POSITIONAL_ACTION_COMMAND_NAMES = PM_POSITIONAL_ACTION_CONTRACTS.map( ({ command }) => command, ); +// Canonical core leaves remain measured after their root aliases leave help. +const NAMESPACED_CORE_COMMAND_NAMES = PM_NAMESPACED_COMMAND_ALIASES + .filter(({ canonical }) => resolvePmCommandVisibilityTier(canonical) === "core") + .map(({ canonical }) => canonical); const REQUIRED_COMMAND_NAMES = new Set([ + ...NAMESPACED_CORE_COMMAND_NAMES, + ...NAMESPACED_CORE_COMMAND_NAMES.map((command) => command.split(" ")[0]), ...PM_CORE_COMMAND_NAMES, ...POSITIONAL_ACTION_COMMAND_NAMES, ]); +/** Estimate display tokens from UTF-8 bytes using the same conservative four-byte convention as the report. */ function tokens(bytes) { return Math.ceil(bytes / 4); } /** Build a versioned regression baseline with explicit percentage headroom. */ export function buildBaseline(report, headroom = 1.1) { + /** Apply configured headroom when creating a new baseline; existing regression ceilings are checked independently. */ const budget = (measurement) => Math.ceil(measurement.bytes * headroom); return { version: 2, @@ -72,6 +82,7 @@ export function buildBaseline(report, headroom = 1.1) { export function compareBaseline(report, baseline) { const violations = []; const surfaces = baseline.surfaces ?? {}; + /** Collect missing or exceeded ceilings so the gate reports every measured regression together. */ const compare = (name, bytes, maxBytes) => { if (!Number.isFinite(maxBytes)) { violations.push(`${name}: missing baseline`); @@ -129,6 +140,7 @@ export function compareBaseline(report, baseline) { return violations; } +/** Measure complete CLI output in bytes, including usage refusals that carry their response on stdout. */ function measure(args) { try { const out = execFileSync( @@ -150,6 +162,7 @@ function measure(args) { } } +/** Discover visible roots and required native leaves without losing hidden-alias budget coverage. */ function listCommands() { const help = execFileSync( PM_BIN, @@ -173,6 +186,7 @@ function listCommands() { rootHelpBytes: Buffer.byteLength(help), names: [ ...names, + ...NAMESPACED_CORE_COMMAND_NAMES.filter((name) => !names.includes(name)), ...POSITIONAL_ACTION_COMMAND_NAMES.filter( (name) => !names.includes(name), ), @@ -180,6 +194,7 @@ function listCommands() { }; } +/** Measure one real MCP tools/list response and terminate the child after a response or bounded timeout. */ function measureMcpToolsList() { return new Promise((resolve, reject) => { const child = spawn(process.execPath, [MCP_SERVER], { diff --git a/scripts/release/flag-invocation-parity.mjs b/scripts/release/flag-invocation-parity.mjs index 3cde01693..868e05ea6 100644 --- a/scripts/release/flag-invocation-parity.mjs +++ b/scripts/release/flag-invocation-parity.mjs @@ -8,6 +8,7 @@ * command. This prevents spelling heuristics from silently teaching agents an * invocation grammar the executable rejects. */ +import { installCommandNamespaces } from "../../dist/cli/command-namespaces.js"; import { pathToFileURL } from "node:url"; import { registerListQueryCommands } from "../../dist/cli/register-list-query.js"; @@ -35,12 +36,13 @@ const COMMAND_SCOPED_OPTION_OVERRIDES = new Set([ ]); /** Build the complete core Commander tree without loading project extensions. */ -export function buildCoreCommandProgram() { +export function buildCoreCommandProgram({ namespaced = false } = {}) { const program = createPmCliProgram("contract-parity"); registerSetupCommands(program); registerListQueryCommands(program); registerMutationCommands(program); registerOperationCommands(program); + if (namespaced) installCommandNamespaces(program); return program; } @@ -56,8 +58,7 @@ export function observeCommanderOption(command, option) { } /** Collect every root-global and command-local option by canonical long spelling. */ -export function observeCommandOptions(program, command) { - const commandPath = command.name(); +export function observeCommandOptions(program, command, commandPath = command.name()) { return [...program.options, ...command.options] .filter((option) => typeof option.long === "string") .map((option) => observeCommanderOption(commandPath, option)) @@ -68,11 +69,16 @@ export function observeCommandOptions(program, command) { export function verifyCoreFlagInvocationParity({ injectMismatch = false, program = buildCoreCommandProgram(), + nativeProgram = buildCoreCommandProgram({ namespaced: true }), } = {}) { const commandReports = []; const missingCommands = []; - for (const command of program.commands) { - const commandPath = command.name(); + const commandEntries = program.commands.map((command) => ({ command, commandPath: command.name(), root: program })); + for (const parent of nativeProgram.commands) { + if (!["context", "ops", "history"].includes(parent.name())) continue; + for (const command of parent.commands) commandEntries.push({ command, commandPath: `${parent.name()} ${command.name()}`, root: nativeProgram }); + } + for (const { command, commandPath, root } of commandEntries) { if (!hasSubcommandFlagContractsForCommand(commandPath)) { missingCommands.push({ code: "missing_command_contract", @@ -91,7 +97,7 @@ export function verifyCoreFlagInvocationParity({ declarations.map((declaration) => [declaration.flag, declaration]), ); const observedSignatures = new Set(); - const observations = observeCommandOptions(program, command) + const observations = observeCommandOptions(root, command, commandPath) .map((observation) => ({ ...observation, // Commander exposes variadic argv syntax, not accumulation through an diff --git a/sdk/public-surface.json b/sdk/public-surface.json index ea7645992..be88b0bfe 100644 --- a/sdk/public-surface.json +++ b/sdk/public-surface.json @@ -1,6 +1,6 @@ { "aggregate_completeness": { - "covered_symbols": 1919, + "covered_symbols": 1922, "excluded": [ { "name": "_testOnlyCliContracts", @@ -8,7 +8,7 @@ } ], "missing": [], - "required_symbols": 1920 + "required_symbols": 1923 }, "breaking_acknowledgements": [ { @@ -11682,6 +11682,12 @@ "name": "PM_CONTEXT_INTENTS_FILE", "signature": "\"context-intents.json\"" }, + { + "classification": "contract_data", + "kind": "value", + "name": "PM_CONTEXT_OPS_COMMAND_ALIASES", + "signature": "readonly PmCommandAliasContract[]" + }, { "classification": "contract_data", "kind": "value", @@ -12006,6 +12012,12 @@ "name": "PM_MUTATION_ACTION_CONTRACTS", "signature": "readonly [{ readonly action: \"append\"; readonly history_scope: \"item\"; }, { readonly action: \"claim\"; readonly history_scope: \"item\"; }, { readonly action: \"close\"; readonly history_scope: \"item\"; }, { readonly action: \"close-many\"; readonly history_scope: \"item\"; }, { readonly action: \"close-task\"; readonly history_scope: \"item\"; }, { readonly action: \"comments\"; readonly history_scope: \"conditional\"; }, { readonly action: \"config\"; readonly history_scope: \"conditional\"; }, { readonly action: \"copy\"; readonly history_scope: \"item\"; }, { readonly action: \"create\"; readonly history_scope: \"item\"; }, { readonly action: \"delete\"; readonly history_scope: \"item\"; }, { readonly action: \"deps\"; readonly history_scope: \"conditional\"; }, { readonly action: \"discover\"; readonly history_scope: \"item\"; }, { readonly action: \"docs\"; readonly history_scope: \"conditional\"; }, { readonly action: \"files\"; readonly history_scope: \"conditional\"; }, { readonly action: \"focus\"; readonly history_scope: \"conditional\"; }, { readonly action: \"gc\"; readonly history_scope: \"conditional\"; }, { readonly action: \"history-compact\"; readonly history_scope: \"history\"; }, { readonly action: \"history-author-acknowledge\"; readonly history_scope: \"workspace\"; }, { readonly action: \"history-redact\"; readonly history_scope: \"history\"; }, { readonly action: \"history-repair\"; readonly history_scope: \"history\"; }, { readonly action: \"init\"; readonly history_scope: \"workspace\"; }, { readonly action: \"install\"; readonly history_scope: \"conditional\"; }, { readonly action: \"learnings\"; readonly history_scope: \"conditional\"; }, { readonly action: \"notes\"; readonly history_scope: \"conditional\"; }, { readonly action: \"package\"; readonly history_scope: \"conditional\"; }, { readonly action: \"pause-task\"; readonly history_scope: \"item\"; }, { readonly action: \"plan\"; readonly history_scope: \"conditional\"; }, { readonly action: \"profile\"; readonly history_scope: \"conditional\"; }, { readonly action: \"release\"; readonly history_scope: \"item\"; }, { readonly action: \"restore\"; readonly history_scope: \"item\"; }, { readonly action: \"schema\"; readonly history_scope: \"conditional\"; }, { readonly action: \"start-task\"; readonly history_scope: \"item\"; }, { readonly action: \"templates\"; readonly history_scope: \"conditional\"; }, { readonly action: \"test\"; readonly history_scope: \"conditional\"; }, { readonly action: \"test-all\"; readonly history_scope: \"conditional\"; }, { readonly action: \"update\"; readonly history_scope: \"item\"; }, { readonly action: \"update-many\"; readonly history_scope: \"item\"; }, { readonly action: \"upgrade\"; readonly history_scope: \"conditional\"; }]" }, + { + "classification": "contract_data", + "kind": "value", + "name": "PM_NAMESPACED_COMMAND_ALIASES", + "signature": "readonly PmCommandAliasContract[]" + }, { "classification": "advanced_export", "kind": "value", @@ -16044,6 +16056,12 @@ "name": "resolvePmCommandExitContract", "signature": "(commandPath: string) => PmCommandExitContract | undefined | calls: (commandPath: string) => PmCommandExitContract | undefined" }, + { + "classification": "contract_data", + "kind": "function", + "name": "resolvePmCommandOperation", + "signature": "(command: string) => string | calls: (command: string) => string" + }, { "classification": "contract_data", "kind": "function", @@ -22446,6 +22464,12 @@ "name": "PM_CONTEXT_INTENT_CONTRACTS", "signature": "readonly PmContextIntentContract[]" }, + { + "classification": "contract_data", + "kind": "value", + "name": "PM_CONTEXT_OPS_COMMAND_ALIASES", + "signature": "readonly PmCommandAliasContract[]" + }, { "classification": "contract_data", "kind": "value", @@ -22548,6 +22572,12 @@ "name": "PM_ITEM_ACTION_SUBCOMMANDS", "signature": "readonly [\"reopen\"]" }, + { + "classification": "contract_data", + "kind": "value", + "name": "PM_NAMESPACED_COMMAND_ALIASES", + "signature": "readonly PmCommandAliasContract[]" + }, { "classification": "contract_data", "kind": "value", @@ -23448,6 +23478,12 @@ "name": "resolvePmCommandExitContract", "signature": "(commandPath: string) => PmCommandExitContract | undefined | calls: (commandPath: string) => PmCommandExitContract | undefined" }, + { + "classification": "contract_data", + "kind": "function", + "name": "resolvePmCommandOperation", + "signature": "(command: string) => string | calls: (command: string) => string" + }, { "classification": "contract_data", "kind": "function", diff --git a/src/cli/command-namespaces.ts b/src/cli/command-namespaces.ts new file mode 100644 index 000000000..0c1d75117 --- /dev/null +++ b/src/cli/command-namespaces.ts @@ -0,0 +1,27 @@ +/** + * @module cli/command-namespaces + * + * Places existing Commander handlers under SDK-declared nouns. Moving the + * actual node preserves its parser, action closure, flags, and nested verbs. + */ +import type { Command } from "commander"; +import { PM_CONTEXT_OPS_COMMAND_ALIASES } from "../sdk/cli-contracts/command-aliases.js"; + +/** Install available namespace leaves after core and package command registration. */ +export function installCommandNamespaces(program: Command): void { + if (!program.commands.some((command) => command.name() === "ops")) program.command("ops").description("Discover workspace diagnostics and maintenance operations."); + for (const { alias, canonical_argv: [noun, verb] } of PM_CONTEXT_OPS_COMMAND_ALIASES) { + const sourceIndex = program.commands.findIndex((command) => command.name() === alias); + if (sourceIndex < 0) continue; + const source = program.commands[sourceIndex]; + const parent = program.commands.find((command) => command.name() === noun) ?? program.command(noun).description(`Discover ${noun} operations.`); + if (parent.commands.some((command) => command.name() === verb)) { + throw new Error(`Cannot install canonical command ${noun} ${verb}: destination already exists.`); + } + // Commander exposes this mutable registration array as readonly in its + // public types and has no removeCommand API. Keep the cast at this boundary. + (program.commands as Command[]).splice(sourceIndex, 1); + source.name(verb); + parent.addCommand(source); + } +} diff --git a/src/cli/help-content.ts b/src/cli/help-content.ts index 629c0a871..32bb8213d 100644 --- a/src/cli/help-content.ts +++ b/src/cli/help-content.ts @@ -19,6 +19,7 @@ import { } from "../sdk/agent-capability-contracts.js"; import { PM_COMMAND_ALIAS_CONTRACTS, + PM_CONTEXT_OPS_COMMAND_ALIASES, renderPmCommandAliasMigrationHint, } from "../sdk/cli-contracts.js"; @@ -174,6 +175,10 @@ export function isFullHelpDiscovery(argv: readonly string[]): boolean { } const HELP_BY_COMMAND_PATH: Record = { + ops: { + why: "Groups workspace diagnostics, quality checks, and maintenance under one discoverable command.", + examples: ["pm ops health --summary", "pm ops validate --check-history-drift", "pm ops --help"], + }, init: { why: "Bootstraps tracker storage and settings so all other commands can run safely.", examples: [ @@ -575,7 +580,7 @@ const HELP_BY_COMMAND_PATH: Record = { ], }, next: { - why: "Answers 'what should I work on now?' in one read: the single highest-priority ready item with rationale, plus the ranked ready and blocked queues (project management = context management).", + why: "Answers 'what should I work on now?' with the highest-priority ready item, rationale, and ranked ready and blocked queues.", examples: [ "pm next", "pm next --json", @@ -922,6 +927,16 @@ const HELP_BY_COMMAND_PATH: Record = { }, }; +for (const { alias, canonical } of PM_CONTEXT_OPS_COMMAND_ALIASES) { + const bundle = HELP_BY_COMMAND_PATH[alias]; + if (bundle) { + HELP_BY_COMMAND_PATH[canonical] = { + ...bundle, + examples: bundle.examples.map((example) => example.replace(`pm ${alias}`, `pm ${canonical}`)), + }; + } +} + /** Public contract for root help bundle, shared by SDK and presentation-layer consumers. */ export const ROOT_HELP_BUNDLE: HelpBundle = { why: "Provides deterministic project management workflows for humans and coding agents.", diff --git a/src/cli/help-json-payload.ts b/src/cli/help-json-payload.ts index bf93f142e..350376249 100644 --- a/src/cli/help-json-payload.ts +++ b/src/cli/help-json-payload.ts @@ -8,6 +8,7 @@ import { hasSubcommandFlagContractsForCommand, PM_COMMAND_ALIAS_CONTRACTS, PM_CORE_COMMAND_NAMES, + resolvePmCommandOperation, } from "../sdk/cli-contracts.js"; import { commandOptionFlagLabel, @@ -107,12 +108,13 @@ const EXTENSION_TIER_ORDER = { internal: 3, } as const; +/** Resolve semantic package metadata, or fold descendant tiers and families for a namespace. */ function resolveExtensionCommandSurface( commandPath: string, descriptors: ReadonlyMap, allowDescendants = true, ): ExtensionCommandSurface | undefined { - const exact = descriptors.get(commandPath); + const exact = descriptors.get(resolvePmCommandOperation(commandPath)); if (exact) return exact; if (!allowDescendants) return undefined; const descendants = [...descriptors.entries()] @@ -133,6 +135,7 @@ function resolveExtensionCommandSurface( }; } +/** Find a registered command or known positional parent; reject missing namespace leaves instead of returning root help. */ function resolveCommandFromPathTokens( root: Command, pathTokens: string[], @@ -145,6 +148,7 @@ function resolveCommandFromPathTokens( return exactCommand; } const requestedPath = pathTokens.join(" "); + if (resolvePmCommandOperation(requestedPath) !== requestedPath) return null; if ( !PM_CORE_COMMAND_NAMES.some( (commandName) => commandName === requestedPath, @@ -366,6 +370,7 @@ function buildHelpArgumentSummaries(command: Command): HelpArgumentSummary[] { }); } +/** Describe discoverable children with semantic tiers and package metadata, retaining hidden public commands for full discovery. */ function buildHelpSubcommandSummaries( command: Command, extensionDescriptors: ReadonlyMap< @@ -388,7 +393,7 @@ function buildHelpSubcommandSummaries( ) .map((entry) => { const commandPath = normalizeHelpCommandPath(getCommandPath(entry)); - const rootCommand = commandPath.split(" ")[0]!; + const rootCommand = commandPath; const declaredTier = getPmCommandHelpVisibilityTier(entry); const extensionDescriptor = resolveExtensionCommandSurface( commandPath, @@ -583,6 +588,7 @@ function buildPositionalActionHelpProjection( }; } +/** Build structured help for the requested command path, including canonical metadata, flags, aliases, and examples. */ function buildJsonHelpPayload( rootProgram: Command, targetCommand: Command, @@ -603,10 +609,10 @@ function buildJsonHelpPayload( const positionalAction = resolvePmPositionalActionContract(resolvedPath); const projectedPath = positionalAction?.command ?? commanderPath; const commandPath = projectedPath.length > 0 ? projectedPath : undefined; - const rootCommandPath = commandPath?.split(" ")[0]; + const rootCommandPath = commandPath; const fallbackNarrative = resolveHelpNarrative(commandPath, detailMode); const extensionDescriptor = commandPath - ? extensionDescriptors.get(commandPath) + ? extensionDescriptors.get(resolvePmCommandOperation(commandPath)) : undefined; const extensionSurface = commandPath ? resolveExtensionCommandSurface( @@ -678,6 +684,7 @@ export async function maybeRenderBootstrapJsonHelp( rootProgram: Command, argv: string[], extensionDescriptors: ReadonlyMap, + requestedArgv: string[] = argv, ): Promise { const bootstrapGlobal = parseBootstrapGlobalOptions(argv); if (!bootstrapGlobal.json) { @@ -693,7 +700,7 @@ export async function maybeRenderBootstrapJsonHelp( ); if (!targetCommand) { if (!bootstrapGlobal.quiet) { - const unknownMessage = `unknown command '${helpRequest.commandPathTokens.join(" ")}'`; + const unknownMessage = `unknown command '${resolvePmCommandOperation(helpRequest.commandPathTokens.join(" "))}'`; const runtimeContext = buildUnknownCommandGuidanceFromRuntime( unknownMessage, rootProgram, @@ -727,6 +734,7 @@ export async function maybeRenderBootstrapJsonHelp( helpRequest.commandPathTokens, extensionDescriptors, ); + payload.requested_path = parseBootstrapHelpRequest(requestedArgv).commandPathTokens; writeStdout(`${JSON.stringify(payload, null, 2)}\n`); } process.exitCode = EXIT_CODE.SUCCESS; diff --git a/src/cli/main.ts b/src/cli/main.ts index ee8f44c51..7d0be65d2 100644 --- a/src/cli/main.ts +++ b/src/cli/main.ts @@ -3,7 +3,7 @@ * @module cli/main */ import { Command, CommanderError } from "commander"; -import { resolvePmHistoryOperation } from "../sdk/cli-contracts/command-aliases.js"; +import { PM_CONTEXT_OPS_COMMAND_ALIASES, resolvePmCommandOperation } from "../sdk/cli-contracts/command-aliases.js"; import { activateExtensions, clearActiveExtensionHooks, @@ -151,6 +151,7 @@ import { normalizeBootstrapInvocation, stripGlobalBootstrapTokens, } from "./bootstrap-args.js"; +import type { BootstrapGlobalOptions } from "../sdk/cli-bootstrap.js"; import { applyInvocationAuthorOverride } from "../sdk/invocation-author.js"; import { createPmCliProgram } from "../sdk/cli-program.js"; import { @@ -182,6 +183,7 @@ import { } from "../sdk/read-output-contracts.js"; import { loadContextIntentSnapshotForInvocation } from "./context-intent-invocation.js"; import { isPmSuccessfulExitCode } from "../sdk/cli-contracts/command-exit-contracts.js"; +import { installCommandNamespaces } from "./command-namespaces.js"; const PM_PACKAGE_ROOT_ENV = "PM_CLI_PACKAGE_ROOT"; const READ_OUTPUT_INVOCATION_PROVENANCE = Symbol.for("pm.readOutputInvocationProvenance"); @@ -1227,7 +1229,7 @@ function collectActivationCommandCandidates(probe: RuntimeExtensionActivationPro parts.push(...arg.split(" ").filter((part) => part.length > 0)); candidates.push(parts.join(" ")); } - return [...new Set(candidates.flatMap((candidate) => [candidate, resolvePmHistoryOperation(candidate)]))]; + return [...new Set(candidates.flatMap((candidate) => [candidate, resolvePmCommandOperation(candidate)]))]; } function activationCommandMatchesProbe(command: string, probe: RuntimeExtensionActivationProbe): boolean { @@ -1826,7 +1828,7 @@ function wrapProgramActionsForExtensionHandlers(rootProgram: Command): void { const startedAt = Date.now(); clearResolvedGlobalOptions(actionCommand); let globalOptions = getGlobalOptions(actionCommand); - const commandPath = resolvePmHistoryOperation(getCommandPath(actionCommand)); + const commandPath = resolvePmCommandOperation(getCommandPath(actionCommand)); const pmRoot = resolvePmRoot(process.cwd(), globalOptions.path); let commandArgs = actionCommand.args.map(String); const activeRegistrations = getActiveExtensionRegistrations(); @@ -2088,7 +2090,7 @@ function attachProgramLifecycleHooks(rootProgram: Command): void { clearResolvedGlobalOptions(actionCommand); const rawGlobalOptions = actionCommand.optsWithGlobals() as Record; const bootstrapGlobalOptions = getGlobalOptions(actionCommand); - const commandPath = resolvePmHistoryOperation(getCommandPath(actionCommand)); + const commandPath = resolvePmCommandOperation(getCommandPath(actionCommand)); let commandArgs = actionCommand.args.map(String); let commandOptions = extractCommandScopedOptions(actionCommand, commandArgs); let globalOptions = { ...bootstrapGlobalOptions }; @@ -2365,6 +2367,11 @@ function resolveCoreCommandRegistrationSelection(invocationArgv: string[]): Core return REGISTER_ALL_CORE_COMMAND_FAMILIES; } const normalizedCommand = commandName.trim().toLowerCase(); + const commandTokens = stripGlobalBootstrapTokens(invocationArgv); + const semanticCommand = resolvePmCommandOperation(commandTokens.slice(0, 2).join(" ")); + if (PM_CONTEXT_OPS_COMMAND_ALIASES.some((alias) => alias.alias === semanticCommand)) { + return { ...REGISTER_ALL_CORE_COMMAND_FAMILIES, targetCommandName: semanticCommand }; + } if (SETUP_COMMAND_NAMES.has(normalizedCommand)) { return { setup: true, @@ -2751,8 +2758,9 @@ async function handleRunPmCliKnownError(context: RunPmCliErrorContext, numericEx return true; } +/** Classify failed help requests by semantic operation so optional package recovery and error telemetry retain the attempted command. */ async function handleUnknownHelpCommandError(context: RunPmCliErrorContext, code: string | undefined): Promise { - const unknownToken = resolveUnknownCommanderToken(context.invocationArgv); + const unknownToken = resolvePmCommandOperation(parseBootstrapHelpRequest(context.invocationArgv).commandPathTokens.join(" ")) || resolveUnknownCommanderToken(context.invocationArgv); const unknownMessage = `unknown command '${unknownToken}'`; const pmRoot = resolvePmRoot(process.cwd(), context.bootstrapGlobal.path); const recoveryCommandDescriptors = await loadRuntimeExtensionCommandDescriptorsForRecovery(pmRoot); @@ -2942,6 +2950,13 @@ async function handleRunPmCliError(params: { error: unknown; invocationArgv: str }); } +/** Offer a suppressible canonical spelling without altering machine-readable command results. */ +function printNamespaceAliasHint(invocation: ReturnType, enabled: boolean, global: BootstrapGlobalOptions): void { + if (!enabled || global.json || global.quiet) return; + const usedAlias = invocation.trace.find((event) => event.reason === "command_alias" && PM_CONTEXT_OPS_COMMAND_ALIASES.some((alias) => alias.alias === event.from)); + if (usedAlias) printError(`Command \`${usedAlias.from}\` is an alias; use \`pm ${usedAlias.to.join(" ")}\`.`); +} + /** Dispatch one fresh CLI invocation with deterministic process state and tracker-scoped attribution. */ async function runPmCliInReproducibleContext(rawArgv: string[]): Promise { program = createPmCliProgram(CLI_VERSION); @@ -2975,9 +2990,6 @@ async function runPmCliInReproducibleContext(rawArgv: string[]): Promise { restorePagerPolicy = applyBootstrapPagerPolicy(invocationArgv); const registrationSelection = resolveCoreCommandRegistrationSelection(invocationArgv); await registerCoreCommandFamilies(program, registrationSelection); - if (shouldAttachRichHelpTextForInvocation(invocationArgv)) { - attachRichHelpText(program, invocationArgv); - } const registerDynamicCommands = shouldRegisterDynamicExtensionPaths(program, invocationArgv); if (registerDynamicCommands) { await registerDynamicExtensionCommandPaths(program, invocationArgv); @@ -2988,8 +3000,12 @@ async function runPmCliInReproducibleContext(rawArgv: string[]): Promise { if (shouldRegisterRuntimeSchemaFlags(invocationArgv)) { await registerRuntimeSchemaFieldFlags(program, invocationArgv); } + installCommandNamespaces(program); + if (shouldAttachRichHelpTextForInvocation(invocationArgv)) { + attachRichHelpText(program, invocationArgv); + } wrapProgramActionsForExtensionHandlers(program); - const renderedBootstrapJsonHelp = await maybeRenderBootstrapJsonHelp(program, invocationArgv, activeRuntimeExtensionCommandDescriptors); + const renderedBootstrapJsonHelp = await maybeRenderBootstrapJsonHelp(program, invocationArgv, activeRuntimeExtensionCommandDescriptors, rawArgv); if (renderedBootstrapJsonHelp) { return; } @@ -3007,6 +3023,7 @@ async function runPmCliInReproducibleContext(rawArgv: string[]): Promise { } const invocationPmRoot = resolvePmRoot(process.cwd(), bootstrapGlobal.path); const invocationSettings = await readSettings(invocationPmRoot); + printNamespaceAliasHint(bootstrapInvocation, invocationSettings.ux!.deprecation_hints!, bootstrapGlobal); const intentSnapshot = await loadContextIntentSnapshotForInvocation( invocationArgv, invocationPmRoot, diff --git a/src/sdk/agent-capability-contracts.ts b/src/sdk/agent-capability-contracts.ts index 3be8f928d..8f76ab08f 100644 --- a/src/sdk/agent-capability-contracts.ts +++ b/src/sdk/agent-capability-contracts.ts @@ -6,6 +6,7 @@ */ import { PM_CORE_COMMAND_NAMES } from "./cli-contracts/enum-contracts.js"; import type { ExtensionCommandCapabilityFamily } from "../core/extensions/command-metadata-contract.js"; +import { PM_CONTEXT_OPS_COMMAND_ALIASES, resolvePmCommandOperation } from "./cli-contracts/command-aliases.js"; /** Visibility tiers shared by CLI help, completions, docs, extensions, and MCP. */ export type PmCommandVisibilityTier = "core" | "standard" | "full" | "internal"; @@ -160,7 +161,8 @@ const EXTENSION_COMMANDS = new Set([ export function resolvePmCommandCapabilityFamily( command: string, ): PmCommandCapabilityFamily { - const normalized = command.trim().toLowerCase(); + const normalized = resolvePmCommandOperation(command.trim().toLowerCase()); + if (normalized === "ops") return "quality"; for (const [family, commands] of Object.entries(COMMANDS_BY_FAMILY)) { if (commands.has(normalized)) return family as PmCommandCapabilityFamily; } @@ -177,16 +179,17 @@ export function resolvePmCommandCapabilityFamily( export const PM_COMMAND_CAPABILITY_CONTRACTS: readonly PmCommandCapabilityContract[] = Object.freeze([ ...PM_CORE_COMMAND_NAMES.flatMap((command) => - command === "item" ? ["item-reopen"] : [command], + command === "item" ? ["item-reopen"] : [command, ...PM_CONTEXT_OPS_COMMAND_ALIASES.filter((alias) => alias.alias === command).map((alias) => alias.canonical)], ).map((command) => ({ command, - tier: CORE_COMMANDS.has(command) + tier: CORE_COMMANDS.has(resolvePmCommandOperation(command)) ? ("core" as const) - : STANDARD_COMMANDS.has(command) + : STANDARD_COMMANDS.has(resolvePmCommandOperation(command)) ? ("standard" as const) : ("full" as const), family: resolvePmCommandCapabilityFamily(command), })), + { command: "ops", tier: "core", family: "quality" }, { command: "completion-statuses", tier: "internal" as const, @@ -330,6 +333,7 @@ const CAPABILITY_FAMILY_ORDER: readonly PmCommandCapabilityFamily[] = [ ]; const CAPABILITY_ROUTING_EXCLUDED_ALIASES = new Set([ + ...PM_CONTEXT_OPS_COMMAND_ALIASES.map((alias) => alias.alias), "ctx", "extension", "install", diff --git a/src/sdk/agent/item-addressing.ts b/src/sdk/agent/item-addressing.ts index efbc97085..9f8df5a1f 100644 --- a/src/sdk/agent/item-addressing.ts +++ b/src/sdk/agent/item-addressing.ts @@ -6,7 +6,7 @@ * spelling, so integrations no longer need a per-command addressing table. */ import { findBootstrapCommandTokenIndex } from "../cli-contracts/bootstrap-command-scanner.js"; -import { resolvePmHistoryOperation } from "../cli-contracts/command-aliases.js"; +import { resolvePmCommandOperation } from "../cli-contracts/command-aliases.js"; import { type CliFlagContract, resolveSubcommandFlagContractsForCommand, @@ -77,7 +77,7 @@ interface NamedItemId { export function supportsItemIdAlias( commandName: string | undefined, ): boolean { - const normalized = resolvePmHistoryOperation( + const normalized = resolvePmCommandOperation( commandName?.trim().toLowerCase() ?? "", ); return ( @@ -86,23 +86,26 @@ export function supportsItemIdAlias( ); } +/** Keep namespace verbs separate from default history item addresses and unaddressed context reads. */ +function resolveNamespacedItemAddressIndex(argv: string[], commandIndex: number, commandName: string): number | undefined { + const fallback = commandName === "history" ? commandIndex + 1 : undefined; + const leafOffset = findBootstrapCommandTokenIndex(argv.slice(commandIndex + 1)); + if (leafOffset === undefined) return fallback; + const leafIndex = commandIndex + 1 + leafOffset; + const candidate = `${commandName} ${argv[leafIndex]}`; + const operation = resolvePmCommandOperation(candidate); + if (operation === candidate) return fallback; + return supportsItemIdAlias(operation) ? leafIndex + 1 : undefined; +} + /** Resolve the positional-id slot for direct and declared nested commands. */ function resolveItemAddressIndex( argv: string[], commandIndex: number, commandName: string, ): number | undefined { - if (commandName === "history") { - const leafOffset = findBootstrapCommandTokenIndex( - argv.slice(commandIndex + 1), - ); - const leafIndex = - leafOffset === undefined ? undefined : commandIndex + 1 + leafOffset; - if (leafIndex === undefined) return commandIndex + 1; - const candidate = `${commandName} ${argv[leafIndex]}`; - const operation = resolvePmHistoryOperation(candidate); - if (operation !== candidate) - return operation === "activity" ? undefined : leafIndex! + 1; + if (commandName === "history" || commandName === "context" || commandName === "ctx") { + return resolveNamespacedItemAddressIndex(argv, commandIndex, commandName); } const declaredSubcommand = ITEM_ID_ALIAS_SUBCOMMANDS.get(commandName); if (declaredSubcommand === undefined) return commandIndex + 1; @@ -200,7 +203,7 @@ function hasPositionalItemId( return ( trailingPositionals > (TRAILING_POSITIONAL_COUNTS.get( - resolvePmHistoryOperation(commandPath), + resolvePmCommandOperation(commandPath), ) ?? 0) ); } @@ -218,7 +221,7 @@ export function normalizeItemAddressInvocation( commandIndex === undefined ? undefined : argv[commandIndex]?.toLowerCase(); - if (!supportsItemIdAlias(commandName)) { + if (commandName !== "context" && commandName !== "ctx" && !supportsItemIdAlias(commandName)) { return { argv: [...argv], changed: false, conflict: false }; } const addressIndex = resolveItemAddressIndex( diff --git a/src/sdk/cli-bootstrap.ts b/src/sdk/cli-bootstrap.ts index 570f9358b..1cc58796f 100644 --- a/src/sdk/cli-bootstrap.ts +++ b/src/sdk/cli-bootstrap.ts @@ -432,7 +432,11 @@ function rewriteCommandAlias( argv: string[], trace: BootstrapNormalizationEvent[], ): string[] { - const index = findBootstrapCommandTokenIndex(argv); + let index = findBootstrapCommandTokenIndex(argv); + if (index !== undefined && argv[index] === "help") { + const offset = findBootstrapCommandTokenIndex(argv.slice(index + 1)); + index = offset === undefined ? undefined : index + 1 + offset; + } if (index === undefined) { return argv; } @@ -441,11 +445,11 @@ function rewriteCommandAlias( if (!canonical) { return argv; } - const rewritten = [...argv]; - rewritten[index] = canonical; + const canonicalTokens = canonical.split(" "); + const rewritten = [...argv.slice(0, index), ...canonicalTokens, ...argv.slice(index + 1)]; trace.push({ from: token, - to: [canonical], + to: canonicalTokens, reason: "command_alias", confidence: "high", }); @@ -1154,7 +1158,7 @@ function parseBootstrapCommandPathName(argv: string[]): string | undefined { const first = stripped[0]?.trim().toLowerCase(); const second = stripped[1]?.trim().toLowerCase(); const historyPath = `${first} ${second}`; - if (first === "history" && resolvePmHistoryOperation(historyPath) !== historyPath) return historyPath; + if (resolvePmHistoryOperation(historyPath) !== historyPath) return historyPath; if ( (first === "extension" || first === "package" || first === "packages") && typeof second === "string" && diff --git a/src/sdk/cli-contracts.ts b/src/sdk/cli-contracts.ts index 72c3e8900..13732e137 100644 --- a/src/sdk/cli-contracts.ts +++ b/src/sdk/cli-contracts.ts @@ -18,6 +18,9 @@ export { EXECUTABLE_COMMAND_ALIASES, PM_COMMAND_ALIAS_CONTRACTS, PM_HISTORY_COMMAND_ALIASES, + PM_CONTEXT_OPS_COMMAND_ALIASES, + PM_NAMESPACED_COMMAND_ALIASES, + resolvePmCommandOperation, resolvePmHistoryOperation, renderPmCommandAliasMigrationHint, resolvePmCommandAlias, diff --git a/src/sdk/cli-contracts/command-aliases.ts b/src/sdk/cli-contracts/command-aliases.ts index fe695af3f..18e1b5d55 100644 --- a/src/sdk/cli-contracts/command-aliases.ts +++ b/src/sdk/cli-contracts/command-aliases.ts @@ -47,10 +47,35 @@ export const PM_HISTORY_COMMAND_ALIASES: readonly PmCommandAliasContract[] = ([ owner: "pm-tqel", })); -/** Resolve a native history leaf to its stable SDK operation; other paths retain their identity. */ -export function resolvePmHistoryOperation(command: string): string { +/** Navigation, maintenance, and event aliases share native handlers and stable SDK identities. */ +export const PM_CONTEXT_OPS_COMMAND_ALIASES: readonly PmCommandAliasContract[] = [ + ...["next", "focus"].map((alias) => ({ alias, canonical: `context ${alias}`, owner: "pm-kcs4" })), + ...["stats", "health", "validate", "gc", "telemetry", "eval", "test-all"].map((alias) => ({ alias, canonical: `ops ${alias}`, owner: "pm-6apl" })), + ...["normalize", "reindex"].map((alias) => ({ alias, canonical: `ops ${alias}`, owner: "pm-3i9q8g" })), + { alias: "events", canonical: "history events", owner: "pm-3i9q8g" }, +].map((entry) => ({ + ...entry, + canonical_argv: entry.canonical.split(" "), + lifecycle: "permanent", + hidden: true, + registration: "bootstrap", +})); + +/** Native noun-verb paths whose stable operation identities survive grammar consolidation. */ +export const PM_NAMESPACED_COMMAND_ALIASES: readonly PmCommandAliasContract[] = [ + ...PM_HISTORY_COMMAND_ALIASES, + ...PM_CONTEXT_OPS_COMMAND_ALIASES, +]; + +/** Resolve a native command leaf to its stable SDK operation without changing unknown paths. */ +export function resolvePmCommandOperation(command: string): string { const normalized = command.trim().replace(/\s+/gu, " "); - return PM_HISTORY_COMMAND_ALIASES.find((alias) => alias.canonical === normalized)?.alias ?? normalized; + return PM_NAMESPACED_COMMAND_ALIASES.find((alias) => alias.canonical === normalized.replace(/^ctx /u, "context "))?.alias ?? normalized; +} + +/** Compatibility entrypoint for hosts that adopted namespace resolution with history. */ +export function resolvePmHistoryOperation(command: string): string { + return resolvePmCommandOperation(command); } /** @@ -58,7 +83,7 @@ export function resolvePmHistoryOperation(command: string): string { * are intentionally absent from default help and completion discovery. */ export const PM_COMMAND_ALIAS_CONTRACTS: readonly PmCommandAliasContract[] = [ - ...PM_HISTORY_COMMAND_ALIASES, + ...PM_NAMESPACED_COMMAND_ALIASES, { alias: "tests", canonical: "test", diff --git a/src/sdk/cli-contracts/flag-lexicon-contracts.ts b/src/sdk/cli-contracts/flag-lexicon-contracts.ts index 8fe5ac515..8eaf2c4a6 100644 --- a/src/sdk/cli-contracts/flag-lexicon-contracts.ts +++ b/src/sdk/cli-contracts/flag-lexicon-contracts.ts @@ -12,6 +12,7 @@ import { PM_COMMAND_CAPABILITY_CONTRACTS, type PmCommandCapabilityFamily, } from "../agent-capability-contracts.js"; +import { PM_CONTEXT_OPS_COMMAND_ALIASES, resolvePmCommandOperation } from "./command-aliases.js"; import { enrichCliFlagInvocationContracts } from "../flag-invocation-contracts.js"; /** Stable value kinds used by the public flag lexicon. */ @@ -125,7 +126,7 @@ export function resolvePmFlagSemanticConcept( if (flag === "--output-budget") return "rendered-output-byte-budget"; if (flag === "--token-budget") return "context-intent-token-budget"; if (flag === "--full") { - const concept = FULL_PROJECTION_CONCEPT_BY_COMMAND[command]; + const concept = FULL_PROJECTION_CONCEPT_BY_COMMAND[resolvePmCommandOperation(command)]; if (concept === undefined) { throw new Error( `Command ${command} exposes --full without a registered projection concept.`, @@ -212,7 +213,7 @@ export function listPmFlagSpellingInventory(): readonly PmFlagSpellingInventoryE // declared-only census. pm-08mt4k adds two explicit scheduling opt-ins to next // and claim; aliases remain free and every future increase still fails closed. // pm-5bsofk adds one install planning opt-in to each executable install surface. -const PM_COMMAND_FLAG_BUDGET_MAXIMUMS = Object.freeze({ +const LEGACY_COMMAND_FLAG_BUDGET_MAXIMUMS = Object.freeze({ init: 30, config: 36, extension: 54, @@ -294,6 +295,15 @@ const PM_COMMAND_FLAG_BUDGET_MAXIMUMS = Object.freeze({ "test-runs-worker": 25, } satisfies Readonly>); +/** Native paths inherit the identical flag ceiling of their compatibility operation. */ +const PM_COMMAND_FLAG_BUDGET_MAXIMUMS = Object.freeze({ + ...LEGACY_COMMAND_FLAG_BUDGET_MAXIMUMS, + ...Object.fromEntries(PM_CONTEXT_OPS_COMMAND_ALIASES.flatMap(({ alias, canonical }) => { + const maximum = (LEGACY_COMMAND_FLAG_BUDGET_MAXIMUMS as Readonly>)[alias]; + return maximum === undefined ? [] : [[canonical, maximum]]; + })), +}); + /** Return persisted no-growth ratchets with current counts derived from the canonical vocabulary. */ export function listPmCommandFlagBudgets(): readonly PmCommandFlagBudget[] { const currentByCommand = new Map( diff --git a/src/sdk/cli-contracts/grammar-contracts.ts b/src/sdk/cli-contracts/grammar-contracts.ts index 4f5fcf720..7597cf28a 100644 --- a/src/sdk/cli-contracts/grammar-contracts.ts +++ b/src/sdk/cli-contracts/grammar-contracts.ts @@ -9,6 +9,7 @@ import { resolvePmCommandAlias, PM_HISTORY_COMMAND_ALIASES, + PM_CONTEXT_OPS_COMMAND_ALIASES, resolvePmHistoryOperation, type PmCommandAliasContract, } from "./command-aliases.js"; @@ -766,6 +767,8 @@ export const PM_COMMAND_DESTINATION_CONTRACTS: readonly PmCommandDestinationCont "focus", "next", ]), + ...destinationRows("context", "context next", "consolidation", "pm-kcs4", ["ctx next"]), + ...destinationRows("context", "context focus", "consolidation", "pm-kcs4", ["ctx focus"]), ...destinationRows("search", "search", "target_noun", "pm-pbyu", [ "search", ]), @@ -902,6 +905,8 @@ export const PM_COMMAND_DESTINATION_CONTRACTS: readonly PmCommandDestinationCont "pm-o3fh", ["event", "meet", "remind"], ), + ...destinationRows("ops", "ops", "target_noun", "pm-6apl", ["ops"]), + ...destinationRows("ops", "ops normalize", "package_owned", "package:pm-governance-audit", ["normalize"]), ...destinationRows("ops", "ops", "consolidation", "pm-6apl", [ "assurance", "config", @@ -951,7 +956,15 @@ export const PM_COMMAND_DESTINATION_CONTRACTS: readonly PmCommandDestinationCont "guide", ], ), - ]; + ].flatMap((entry): PmCommandDestinationContract[] => { + const alias = PM_CONTEXT_OPS_COMMAND_ALIASES.find((candidate) => candidate.alias === entry.command); + if (!alias) return [entry]; + const noun = alias.canonical_argv[0] as PmCommandDestinationContract["noun"]; + return [ + { ...entry, noun, target: alias.canonical, owner: alias.owner }, + { ...entry, command: alias.canonical, noun, target: alias.canonical, owner: alias.owner, disposition: entry.disposition === "package_owned" ? "package_owned" : "target_noun" }, + ]; + }); /** Exhaustive current command and positional-action signature table. */ export const PM_COMMAND_POSITIONAL_CONTRACTS: readonly PmCommandPositionalContract[] = @@ -1323,7 +1336,8 @@ export function verifyPmCliGrammar( nounSet, ), ...validateDestinationCensus(commandSet, destinations), - ...validateAliasTargets(aliases, commandSet), + ...validateAliasTargets(aliases.filter((alias) => commandSet.has(alias.alias) || + !(destinationsByCommand.get(alias.canonical) ?? []).some((destination) => destination.disposition === "package_owned")), commandSet), ]; const hiddenAliasNames = new Set( aliases.filter((alias) => alias.hidden).map((alias) => alias.alias), diff --git a/src/sdk/cli-contracts/runtime-contracts.ts b/src/sdk/cli-contracts/runtime-contracts.ts index d52f39f1f..664ea5199 100644 --- a/src/sdk/cli-contracts/runtime-contracts.ts +++ b/src/sdk/cli-contracts/runtime-contracts.ts @@ -114,6 +114,7 @@ import { PROFILE_FLAG_CONTRACTS, SEARCH_COMMANDER_STRING_OPTION_CONTRACTS, EVAL_FLAG_CONTRACTS, + EVENTS_FLAG_CONTRACTS, WORKSPACE_FLAG_CONTRACTS, NEXT_FLAG_CONTRACTS, SEARCH_FLAG_CONTRACTS, @@ -141,7 +142,7 @@ import { type PmDiagnosticOutputBudgetContract, type PmCommandAliasContract, } from "../cli-contracts.js"; -import { PM_HISTORY_COMMAND_ALIASES, resolvePmHistoryOperation } from "./command-aliases.js"; +import { PM_NAMESPACED_COMMAND_ALIASES, resolvePmCommandOperation } from "./command-aliases.js"; import { PM_POSITIONAL_ACTION_FLAG_CONTRACTS } from "./flag-contracts.js"; import { GOVERNANCE_CLOSE_VALIDATION_DEFAULT_VALUES, @@ -625,6 +626,7 @@ const PACKAGE_OWNED_COMMANDS = new Set([ "completion-types", "guide", "reindex", + "normalize", "templates", "templates list", "templates save", @@ -646,6 +648,7 @@ const PACKAGE_OWNED_COMMAND_INSTALL_HINTS = new Map([ ["completion-types", "guide-shell"], ["guide", "guide-shell"], ["reindex", "search-advanced"], + ["normalize", "governance-audit"], ["templates", "templates"], ["templates list", "templates"], ["templates save", "templates"], @@ -861,6 +864,7 @@ const CORE_COMMAND_FLAG_CONTRACT_ENTRIES: Array< ["get", GET_FLAG_CONTRACTS], ["search", SEARCH_FLAG_CONTRACTS], ["eval", EVAL_FLAG_CONTRACTS], + ["events", EVENTS_FLAG_CONTRACTS], ["workspace", WORKSPACE_FLAG_CONTRACTS], ["workspace position", []], ["workspace snapshot", WORKSPACE_FLAG_CONTRACTS], @@ -905,6 +909,7 @@ const CORE_COMMAND_FLAG_CONTRACT_ENTRIES: Array< ["test-runs", TEST_RUNS_FLAG_CONTRACTS], ["gc", GC_FLAG_CONTRACTS], ["stats", STATS_FLAG_CONTRACTS], + ["ops", []], ["duplicates", DUPLICATES_FLAG_CONTRACTS], ["validate", VALIDATE_FLAG_CONTRACTS], ["health", HEALTH_FLAG_CONTRACTS], @@ -919,8 +924,9 @@ const CORE_COMMAND_FLAG_CONTRACT_ENTRIES: Array< ]; const CORE_COMMAND_FLAG_CONTRACTS_BY_COMMAND = new Map(CORE_COMMAND_FLAG_CONTRACT_ENTRIES); -for (const { alias, canonical } of PM_HISTORY_COMMAND_ALIASES) { - CORE_COMMAND_FLAG_CONTRACTS_BY_COMMAND.set(canonical, CORE_COMMAND_FLAG_CONTRACTS_BY_COMMAND.get(alias)!); +for (const { alias, canonical } of PM_NAMESPACED_COMMAND_ALIASES) { + const flags = CORE_COMMAND_FLAG_CONTRACTS_BY_COMMAND.get(alias); + if (flags !== undefined) CORE_COMMAND_FLAG_CONTRACTS_BY_COMMAND.set(canonical, flags); } /* c8 ignore start -- extension contract shaping utilities are exercised by dedicated extension/runtime integration suites. */ @@ -938,9 +944,9 @@ function packageOwnedActionForCommand(command: string): string { return command; } -/** Project stable SDK/MCP actions into discoverable CLI paths, retaining native and legacy history spellings. */ +/** Project stable SDK/MCP actions into discoverable CLI paths, retaining native and legacy spellings. */ function resolveActionCommandPath(action: PmToolAction): string | null { - const historyAlias = PM_HISTORY_COMMAND_ALIASES.find((contract) => contract.alias === action); + const historyAlias = PM_NAMESPACED_COMMAND_ALIASES.find((contract) => contract.alias === action); if (historyAlias) return `${historyAlias.canonical}|${historyAlias.alias}`; if ( PM_CORE_COMMAND_NAMES.includes( @@ -984,7 +990,7 @@ function actionDescriptorMatchesSelectedCommand( descriptor: ActionContractDescriptor, selectedCommand: string, ): boolean { - const historyOperation = resolvePmHistoryOperation(selectedCommand); + const historyOperation = resolvePmCommandOperation(selectedCommand); if (historyOperation !== selectedCommand) return descriptor.action === historyOperation; if (descriptor.command_path === null) { return false; @@ -1662,6 +1668,7 @@ interface ActionContractDescriptor { command_path: string | null; } +/** Merge stable core and package action identities with canonical command paths for contract discovery. */ function collectActionContractDescriptors( extensionContracts: ExtensionCommandContract[], options: { includePackageOwnedActions?: boolean } = {}, @@ -1702,7 +1709,7 @@ function collectActionContractDescriptors( action: contract.action, provider: "extension", requires_extension: true, - command_path: normalizeCommandPath(contract.command), + command_path: PM_NAMESPACED_COMMAND_ALIASES.find((entry) => entry.alias === contract.command)?.canonical ?? normalizeCommandPath(contract.command), }); } return [...descriptors.values()].sort((left, right) => @@ -1711,6 +1718,7 @@ function collectActionContractDescriptors( /* c8 ignore stop */ } +/** Derive invocability from active handlers and policy, preserving installation hints for unavailable optional operations. */ function resolveActionAvailability( descriptor: ActionContractDescriptor, runtimeProbe: RuntimeExtensionActionProbe, @@ -1733,10 +1741,10 @@ function resolveActionAvailability( ? splitCommandPathAliases(descriptor.command_path) : []; const extensionCommandAvailable = commandPaths.some((commandPath) => - runtimeProbe.handlers.has(commandPath), + runtimeProbe.handlers.has(resolvePmCommandOperation(commandPath)), ); const optionalPackageHint = commandPaths - .map((commandPath) => PACKAGE_OWNED_COMMAND_INSTALL_HINTS.get(commandPath)) + .map((commandPath) => PACKAGE_OWNED_COMMAND_INSTALL_HINTS.get(resolvePmCommandOperation(commandPath))) .find((hint): hint is string => typeof hint === "string"); const invocable = runtimeProbe.disabledReason === null && extensionCommandAvailable; @@ -1769,8 +1777,9 @@ function resolveCoreCommandFlags(command: string): CliFlagContract[] { ); } +/** Recognize core flag contracts while keeping package-owned operations outside the core provider surface. */ function isCoreCommandPath(command: string): boolean { - if (PACKAGE_OWNED_COMMANDS.has(command)) { + if (PACKAGE_OWNED_COMMANDS.has(resolvePmCommandOperation(command))) { return false; } return CORE_COMMAND_FLAG_CONTRACTS_BY_COMMAND.has(command); @@ -1892,6 +1901,7 @@ function mergeFlagContracts( /* c8 ignore stop */ } +/** Merge core, runtime field, and extension flags for each public command path with optional semantic metadata. */ function buildCommandFlagSurface( commands: string[], extensionFlagMap: ReturnType, @@ -1906,7 +1916,7 @@ function buildCommandFlagSurface( runtimeFieldFlagMap.get( normalizeCommandForRuntimeFieldFlags(command), ) ?? []; - const extensionFlags = extensionFlagMap.get(command); + const extensionFlags = extensionFlagMap.get(resolvePmCommandOperation(command)); const coreWithRuntime = mergeFlagContracts(coreFlags, runtimeFlags); const flags = mergeFlagContracts( coreWithRuntime, @@ -2270,6 +2280,7 @@ async function resolveContractsRuntimeContext( }; } +/** Include absent optional actions only when explicitly requested through availability discovery. */ function shouldIncludePackageOwnedActions( selection: ContractsSelection, ): boolean { @@ -2278,10 +2289,11 @@ function shouldIncludePackageOwnedActions( ((selection.selectedAction !== undefined && PACKAGE_OWNED_ACTIONS.has(selection.selectedAction)) || (selection.selectedCommand !== undefined && - PACKAGE_OWNED_COMMANDS.has(selection.selectedCommand))) + PACKAGE_OWNED_COMMANDS.has(resolvePmCommandOperation(selection.selectedCommand)))) ); } +/** Scope action discovery and synthesize optional package descriptors needed to explain unavailable command selections. */ function collectContractsActionDescriptors( selection: ContractsSelection, mergedExtensionContracts: ExtensionCommandContract[], @@ -2304,13 +2316,13 @@ function collectContractsActionDescriptors( if ( shouldIncludePackageOwnedActions(selection) && selection.selectedCommand !== undefined && - PACKAGE_OWNED_COMMANDS.has(selection.selectedCommand) && + PACKAGE_OWNED_COMMANDS.has(resolvePmCommandOperation(selection.selectedCommand)) && !actionDescriptors.some( (entry) => entry.command_path === selection.selectedCommand, ) ) { actionDescriptors.push({ - action: packageOwnedActionForCommand(selection.selectedCommand), + action: packageOwnedActionForCommand(resolvePmCommandOperation(selection.selectedCommand)), provider: "extension", requires_extension: true, command_path: selection.selectedCommand, @@ -2332,6 +2344,7 @@ function assertKnownContractsAction( } } +/** Collect sorted core and active package command paths, retaining native namespace paths and compatibility aliases. */ function buildContractsCommandCatalog( actionDescriptors: ActionContractDescriptor[], mergedExtensionContracts: ExtensionCommandContract[], @@ -2339,16 +2352,19 @@ function buildContractsCommandCatalog( return [ ...new Set([ ...PM_CORE_COMMAND_NAMES.filter( - (entry) => !PACKAGE_OWNED_COMMANDS.has(entry), + (entry) => !PACKAGE_OWNED_COMMANDS.has(resolvePmCommandOperation(entry)), ), ...[...CORE_COMMAND_FLAG_CONTRACTS_BY_COMMAND.keys()].filter( - (entry) => !PACKAGE_OWNED_COMMANDS.has(entry), + (entry) => !PACKAGE_OWNED_COMMANDS.has(resolvePmCommandOperation(entry)), ), /* c8 ignore next -- action descriptors always include concrete command paths in command-scoped test fixtures. */ ...actionDescriptors.flatMap((entry) => entry.command_path ? splitCommandPathAliases(entry.command_path) : [], ), - ...mergedExtensionContracts.flatMap((entry) => entry.command.split("|")), + ...mergedExtensionContracts.flatMap((entry) => entry.command.split("|").flatMap((command) => { + const canonical = PM_NAMESPACED_COMMAND_ALIASES.find((alias) => alias.alias === command)?.canonical; + return canonical === undefined ? [command] : [command, canonical]; + })), ]), ] .map((entry) => normalizeCommandPath(entry)) @@ -2445,6 +2461,7 @@ function buildUnknownCommandError(command: string): PmCliError { }); } +/** Validate a selected command and distinguish namespace, missing package, and unknown command recovery. */ function assertKnownContractsCommand( selection: ContractsSelection, commandCatalog: string[], @@ -2466,7 +2483,7 @@ function assertKnownContractsCommand( ); } const packageHint = PACKAGE_OWNED_COMMAND_INSTALL_HINTS.get( - selection.selectedCommand, + resolvePmCommandOperation(selection.selectedCommand), ); if (packageHint) { throw buildPackageOwnedCommandError(selection.selectedCommand, packageHint); @@ -2474,6 +2491,7 @@ function assertKnownContractsCommand( throw buildUnknownCommandError(selection.selectedCommand); } +/** Validate command and action selection together, then derive scoped descriptors and runtime availability. */ function resolveContractsActionContext( selection: ContractsSelection, runtime: ContractsRuntimeContext, @@ -2489,7 +2507,7 @@ function resolveContractsActionContext( ); assertKnownContractsCommand(selection, commandCatalog); const selectedPackageOwnedAction = selection.selectedCommand - ? PACKAGE_OWNED_COMMAND_ACTIONS.get(selection.selectedCommand) + ? PACKAGE_OWNED_COMMAND_ACTIONS.get(resolvePmCommandOperation(selection.selectedCommand)) : undefined; const commandScopedDescriptors = selection.selectedCommand ? actionDescriptors.filter((descriptor) => @@ -2671,12 +2689,15 @@ function resolveOutputCommands( (contract) => contract.hidden && (contract.lifecycle === "deprecated" || (!selection.fullOutput && !selection.availabilityOnly)), ).map((contract) => contract.alias), ); + if (selection.summary && !selection.fullOutput) { + for (const alias of COMMAND_ALIAS_TO_CANONICAL.keys()) hiddenAliases.add(alias); + } return commands.filter((command) => !hiddenAliases.has(command)); } -/** Resolve a command's summary identity through explicit history aliases and established root aliases. */ +/** Resolve a command's summary identity through explicit namespace aliases and established root aliases. */ function canonicalSummaryCommand(command: string): string { - const historyAlias = PM_HISTORY_COMMAND_ALIASES.find((contract) => contract.alias === command || contract.canonical === command); + const historyAlias = PM_NAMESPACED_COMMAND_ALIASES.find((contract) => contract.alias === command || contract.canonical === command); if (historyAlias) return historyAlias.canonical; const rootCommand = command.split(" ")[0]!; if (rootCommand.startsWith("list-")) return "list"; @@ -2722,7 +2743,7 @@ function summarizeCommandIntent( extensionContracts: readonly ExtensionCommandContract[], ): Required> { const declared = - COMMAND_INTENTS.get(resolvePmHistoryOperation(command)) ?? + COMMAND_INTENTS.get(resolvePmCommandOperation(command)) ?? (command.includes(" ") ? undefined : COMMAND_INTENTS.get(canonicalSummaryCommand(command))); @@ -2730,7 +2751,7 @@ function summarizeCommandIntent( return { intent: declared, intent_source: "command" }; } const extensionContract = extensionContracts.find((contract) => - splitCommandPathAliases(contract.command).includes(command), + splitCommandPathAliases(contract.command).includes(resolvePmCommandOperation(command)), ); if ( extensionContract?.intent !== null && @@ -2792,12 +2813,12 @@ function buildCommandSummarySurface( ...resolveCoreCommandFlags(command).map((contract) => contract.flag), ...extensionContracts .filter((contract) => - splitCommandPathAliases(contract.command).includes(command), + splitCommandPathAliases(contract.command).includes(resolvePmCommandOperation(command)), ) .flatMap((contract) => contract.flags.map((flag) => flag.flag)), ]); const flags = ( - AGENT_BOOTSTRAP_FLAGS.get(resolvePmHistoryOperation(command)) ?? + AGENT_BOOTSTRAP_FLAGS.get(resolvePmCommandOperation(command)) ?? AGENT_BOOTSTRAP_FLAGS.get(canonicalRoot) ?? AGENT_BOUNDED_FLAG_PRIORITY ).filter((flag) => availableFlags.has(flag)); @@ -2862,6 +2883,7 @@ function buildCommandExitContractGroups( return [...groups.values()]; } +/** Select provider contracts by semantic operation or action scope, preserving equivalent public command paths. */ function resolveExtensionCommandContracts( selection: ContractsSelection, runtime: ContractsRuntimeContext, @@ -2870,7 +2892,7 @@ function resolveExtensionCommandContracts( if (selection.selectedCommand) { return runtime.extensionContracts.filter((entry) => splitCommandPathAliases(entry.command).includes( - selection.selectedCommand as string, + resolvePmCommandOperation(selection.selectedCommand as string), ), ); } diff --git a/src/sdk/completion.ts b/src/sdk/completion.ts index 6546907d1..e0b0e2d24 100644 --- a/src/sdk/completion.ts +++ b/src/sdk/completion.ts @@ -35,6 +35,7 @@ import { NEXT_FLAG_CONTRACTS, PM_COMMAND_ALIAS_CONTRACTS, PM_HISTORY_COMMAND_ALIASES, + PM_NAMESPACED_COMMAND_ALIASES, resolveSubcommandFlagContractsForCommand, PACKAGE_FLAG_CONTRACTS, PLAN_FLAG_CONTRACTS, @@ -93,7 +94,7 @@ const HIDDEN_COMMAND_ALIASES = new Set( ), ); const ALL_COMMANDS = listPmCommandsForTier("full").filter( - (command) => !HIDDEN_COMMAND_ALIASES.has(command), + (command) => !command.includes(" ") && !HIDDEN_COMMAND_ALIASES.has(command), ); const LIST_FLAGS = toCompletionFlagString(LIST_FILTER_FLAG_CONTRACTS); const AGGREGATE_FLAGS = toCompletionFlagString(AGGREGATE_FLAG_CONTRACTS); @@ -111,7 +112,8 @@ const GET_FLAGS = toCompletionFlagString(GET_FLAG_CONTRACTS); const UPDATE_FLAGS = toCompletionFlagString(UPDATE_FLAG_CONTRACTS); const UPDATE_MANY_FLAGS = toCompletionFlagString(UPDATE_MANY_FLAG_CONTRACTS); const CLOSE_MANY_FLAGS = toCompletionFlagString(CLOSE_MANY_FLAG_CONTRACTS); -const HISTORY_LEAVES = PM_HISTORY_COMMAND_ALIASES.map((entry) => entry.canonical_argv[1]).join(" "); +const NAMESPACE_LEAVES = Object.fromEntries(["history", "context", "ops"].map((noun) => [noun, PM_NAMESPACED_COMMAND_ALIASES.filter((entry) => entry.canonical_argv[0] === noun).map((entry) => entry.canonical_argv[1]).join(" ")])); +const HISTORY_LEAVES = NAMESPACE_LEAVES.history; const HISTORY_OPERATION_FLAGS = PM_HISTORY_COMMAND_ALIASES.map((entry) => ({ ...entry, flags: toCompletionFlagString(resolveSubcommandFlagContractsForCommand(entry.alias)), @@ -365,14 +367,14 @@ function renderZshArgumentSpecs( /** Render root Zsh descriptions while keeping executable compatibility aliases out of default suggestions. */ function renderZshCommandDescriptions(): string { - return COMMAND_COMPLETION_DESCRIPTIONS.filter(([command]) => !HIDDEN_COMMAND_ALIASES.has(command)).map( + return [...COMMAND_COMPLETION_DESCRIPTIONS, ["ops", "Workspace maintenance and diagnostics"] as const].filter(([command]) => !HIDDEN_COMMAND_ALIASES.has(command)).map( ([command, description]) => ` '${command}:${description}'`, ).join("\n"); } /** Render visible Fish root commands with shell-specific descriptions and hidden-alias filtering. */ function renderFishCommandDescriptions(): string { - return COMMAND_COMPLETION_DESCRIPTIONS.filter( + return [...COMMAND_COMPLETION_DESCRIPTIONS, ["ops", "Workspace maintenance and diagnostics"] as const].filter( ([command]) => command !== "help" && !HIDDEN_COMMAND_ALIASES.has(command), ) .map(([command, description]) => { @@ -534,6 +536,7 @@ function renderZshBulkSelectionFilterSpecs( ]); } +/** Render schema field flags behind command predicates, isolating context snapshots from navigation leaves. */ function renderFishRuntimeFieldFlagSpecs( commands: string[], runtimeFlags: string[] | undefined, @@ -546,9 +549,12 @@ function renderFishRuntimeFieldFlagSpecs( } const lines: string[] = []; for (const command of commands) { + const predicate = command === "context" + ? "__pm_history_operation" + : "__fish_seen_subcommand_from"; for (const flag of normalizedFlags) { lines.push( - `complete -c pm -n '__fish_seen_subcommand_from ${command}' -l ${flag} -d 'Runtime schema field flag' -r`, + `complete -c pm -n '${predicate} ${command}' -l ${flag} -d 'Runtime schema field flag' -r`, ); } } @@ -778,10 +784,11 @@ export function generateBashScript( " esac", ' if [[ -z "$cmd" ]]; then', ' cmd="$word"', - ' [[ "$cmd" == "history" ]] || break', + ' [[ "$cmd" == "ctx" ]] && cmd="context"', + ' [[ "$cmd" == "history" || "$cmd" == "context" || "$cmd" == "ops" ]] || break', " else", - ' case "$word" in', - ...PM_HISTORY_COMMAND_ALIASES.map((entry) => ` ${entry.canonical_argv[1]}) cmd="${entry.alias}" ;;`), + ' case "$cmd $word" in', + ...PM_NAMESPACED_COMMAND_ALIASES.map((entry) => ` "${entry.canonical}") cmd="${entry.alias}" ;;`), " esac", " break", " fi", @@ -823,6 +830,12 @@ export function generateBashScript( " ;;", " context|ctx)", ` COMPREPLY=(${compgen(contextFlags)})`, + ' if [[ $word_index -eq $cword ]]; then', + ` COMPREPLY+=(${compgen(NAMESPACE_LEAVES.context)})`, + " fi", + " ;;", + " ops)", + ` COMPREPLY=(${compgen(`${GLOBAL_FLAGS} ${NAMESPACE_LEAVES.ops}`)})`, " ;;", " next)", ` COMPREPLY=(${compgen(NEXT_FLAGS)})`, @@ -1049,7 +1062,7 @@ _pm() { local context state line local -a words=("$words[@]") local CURRENT=$CURRENT - local word_index=2 history_seen=0 operation_index=0 word + local word_index=2 namespace_noun="" operation_index=0 word while (( word_index < CURRENT )); do word="$words[word_index]" case "\${word//_/-}" in @@ -1057,24 +1070,27 @@ _pm() { ${GLOBAL_COMPLETION_INLINE_PATTERNS}|${GLOBAL_COMPLETION_SWITCH_PATTERNS}) (( word_index++ )); continue ;; --) break ;; esac - if (( history_seen == 0 )); then - [[ "$word" == "history" ]] || break - history_seen=1 + if [[ -z "$namespace_noun" ]]; then + [[ "$word" == "ctx" ]] && word="context" + [[ "$word" == "history" || "$word" == "context" || "$word" == "ops" ]] || break + namespace_noun="$word" else operation_index=$word_index break fi (( word_index++ )) done - if (( history_seen && word_index == CURRENT )) && [[ "$words[CURRENT]" != -* ]]; then + if [[ -n "$namespace_noun" ]] && (( word_index == CURRENT )) && [[ "$words[CURRENT]" != -* ]]; then local -a history_commands - history_commands=(${HISTORY_LEAVES}) + case "$namespace_noun" in +${Object.entries(NAMESPACE_LEAVES).map(([noun, leaves]) => ` ${noun}) history_commands=(${leaves}) ;;`).join("\n")} + esac _describe 'history operation' history_commands return fi if (( operation_index > 0 )); then - case "$words[operation_index]" in -${PM_HISTORY_COMMAND_ALIASES.map((entry) => ` ${entry.canonical_argv[1]}) words=("$words[1]" "${entry.alias}" "\${words[@]:$operation_index}"); (( CURRENT -= operation_index - 2 )) ;;`).join("\n")} + case "$namespace_noun $words[operation_index]" in +${PM_NAMESPACED_COMMAND_ALIASES.map((entry) => ` "${entry.canonical}") words=("$words[1]" "${entry.alias}" "\${words[@]:$operation_index}"); (( CURRENT -= operation_index - 2 )) ;;`).join("\n")} esac fi _arguments -C \\ @@ -2143,7 +2159,7 @@ export function generateFishScript( runtime.command_flags?.calendar, ); const fishContextRuntimeFieldFlags = renderFishRuntimeFieldFlagSpecs( - ["context", "ctx"], + ["context"], runtime.command_flags?.context, ); const dynamicTagResolver = useEagerTagExpansion @@ -2328,7 +2344,7 @@ complete -c pm -n '__fish_seen_subcommand_from copy' -l message -d 'History mess complete -c pm -n '__fish_seen_subcommand_from copy' -l force -d 'Force ownership override' # focus flags -complete -c pm -n '__fish_seen_subcommand_from focus' -l clear -d 'Clear the focused item' +complete -c pm -n '__pm_history_operation focus' -l clear -d 'Clear the focused item' # update flags complete -c pm -n '__fish_seen_subcommand_from update' -s t -l title -d 'Item title' -r @@ -2587,36 +2603,36 @@ complete -c pm -n '__fish_seen_subcommand_from calendar cal' -l format -d 'Ou ${fishCalendarRuntimeFieldFlags} # context flags -complete -c pm -n '__fish_seen_subcommand_from context ctx' -l date -d 'Anchor date/time (ISO/date string or relative)' -r -complete -c pm -n '__fish_seen_subcommand_from context ctx' -l from -d 'Agenda lower bound (ISO/date string or relative)' -r -complete -c pm -n '__fish_seen_subcommand_from context ctx' -l to -d 'Agenda upper bound (ISO/date string or relative)' -r -complete -c pm -n '__fish_seen_subcommand_from context ctx' -l past -d 'Include past entries in bounded windows' -complete -c pm -n '__fish_seen_subcommand_from context ctx' -l type -d 'Filter by type' -r -a '${typeChoices}' -complete -c pm -n '__fish_seen_subcommand_from context ctx' -l tag -d 'Filter by tag' -r -a ${fishTagChoices} -complete -c pm -n '__fish_seen_subcommand_from context ctx' -l priority -d 'Filter by priority' -r -a '0 1 2 3 4' -complete -c pm -n '__fish_seen_subcommand_from context ctx' -l assignee -d 'Filter by assignee' -r -complete -c pm -n '__fish_seen_subcommand_from context ctx' -l assignee-filter -d 'Filter assignee presence' -r -a 'assigned unassigned' -complete -c pm -n '__fish_seen_subcommand_from context ctx' -l sprint -d 'Filter by sprint' -r -complete -c pm -n '__fish_seen_subcommand_from context ctx' -l release -d 'Filter by release' -r -complete -c pm -n '__fish_seen_subcommand_from context ctx' -l parent -d 'Scope snapshot to one item subtree' -r -complete -c pm -n '__fish_seen_subcommand_from context ctx' -l limit -d 'Limit focus and agenda rows per section' -r -complete -c pm -n '__fish_seen_subcommand_from context ctx' -l depth -d 'Context depth' -r -a 'brief standard deep full' -complete -c pm -n '__fish_seen_subcommand_from context ctx' -l format -d 'Output override' -r -a 'markdown toon json' +complete -c pm -n '__pm_history_operation context' -l date -d 'Anchor date/time (ISO/date string or relative)' -r +complete -c pm -n '__pm_history_operation context' -l from -d 'Agenda lower bound (ISO/date string or relative)' -r +complete -c pm -n '__pm_history_operation context' -l to -d 'Agenda upper bound (ISO/date string or relative)' -r +complete -c pm -n '__pm_history_operation context' -l past -d 'Include past entries in bounded windows' +complete -c pm -n '__pm_history_operation context' -l type -d 'Filter by type' -r -a '${typeChoices}' +complete -c pm -n '__pm_history_operation context' -l tag -d 'Filter by tag' -r -a ${fishTagChoices} +complete -c pm -n '__pm_history_operation context' -l priority -d 'Filter by priority' -r -a '0 1 2 3 4' +complete -c pm -n '__pm_history_operation context' -l assignee -d 'Filter by assignee' -r +complete -c pm -n '__pm_history_operation context' -l assignee-filter -d 'Filter assignee presence' -r -a 'assigned unassigned' +complete -c pm -n '__pm_history_operation context' -l sprint -d 'Filter by sprint' -r +complete -c pm -n '__pm_history_operation context' -l release -d 'Filter by release' -r +complete -c pm -n '__pm_history_operation context' -l parent -d 'Scope snapshot to one item subtree' -r +complete -c pm -n '__pm_history_operation context' -l limit -d 'Limit focus and agenda rows per section' -r +complete -c pm -n '__pm_history_operation context' -l depth -d 'Context depth' -r -a 'brief standard deep full' +complete -c pm -n '__pm_history_operation context' -l format -d 'Output override' -r -a 'markdown toon json' ${fishContextRuntimeFieldFlags} # next flags -complete -c pm -n '__fish_seen_subcommand_from next' -l type -d 'Filter candidates by type' -r -a '${typeChoices}' -complete -c pm -n '__fish_seen_subcommand_from next' -l tag -d 'Filter candidates by tag' -r -a ${fishTagChoices} -complete -c pm -n '__fish_seen_subcommand_from next' -l priority -d 'Filter candidates by priority' -r -a '0 1 2 3 4' -complete -c pm -n '__fish_seen_subcommand_from next' -l assignee -d 'Filter candidates by assignee' -r -complete -c pm -n '__fish_seen_subcommand_from next' -l assignee-filter -d 'Filter assignee presence' -r -a 'assigned unassigned' -complete -c pm -n '__fish_seen_subcommand_from next' -l sprint -d 'Filter candidates by sprint' -r -complete -c pm -n '__fish_seen_subcommand_from next' -l release -d 'Filter candidates by release' -r -complete -c pm -n '__fish_seen_subcommand_from next' -l parent -d 'Scope to one item subtree' -r -complete -c pm -n '__fish_seen_subcommand_from next' -l limit -d 'Limit ready rows' -r -complete -c pm -n '__fish_seen_subcommand_from next' -l blocked-limit -d 'Limit blocked rows' -r -complete -c pm -n '__fish_seen_subcommand_from next' -l ready-only -d 'Omit the blocked companion list' -complete -c pm -n '__fish_seen_subcommand_from next' -l format -d 'Output override' -r -a 'markdown toon json' +complete -c pm -n '__pm_history_operation next' -l type -d 'Filter candidates by type' -r -a '${typeChoices}' +complete -c pm -n '__pm_history_operation next' -l tag -d 'Filter candidates by tag' -r -a ${fishTagChoices} +complete -c pm -n '__pm_history_operation next' -l priority -d 'Filter candidates by priority' -r -a '0 1 2 3 4' +complete -c pm -n '__pm_history_operation next' -l assignee -d 'Filter candidates by assignee' -r +complete -c pm -n '__pm_history_operation next' -l assignee-filter -d 'Filter assignee presence' -r -a 'assigned unassigned' +complete -c pm -n '__pm_history_operation next' -l sprint -d 'Filter candidates by sprint' -r +complete -c pm -n '__pm_history_operation next' -l release -d 'Filter candidates by release' -r +complete -c pm -n '__pm_history_operation next' -l parent -d 'Scope to one item subtree' -r +complete -c pm -n '__pm_history_operation next' -l limit -d 'Limit ready rows' -r +complete -c pm -n '__pm_history_operation next' -l blocked-limit -d 'Limit blocked rows' -r +complete -c pm -n '__pm_history_operation next' -l ready-only -d 'Omit the blocked companion list' +complete -c pm -n '__pm_history_operation next' -l format -d 'Output override' -r -a 'markdown toon json' # guide flags complete -c pm -n '__fish_seen_subcommand_from guide' -l list -d 'Show guide topic index' @@ -2625,8 +2641,8 @@ complete -c pm -n '__fish_seen_subcommand_from guide' -l depth -d 'Guide det complete -c pm -n '__fish_seen_subcommand_from guide' -a '${guideTopicChoices}' -d 'Guide topic' # reindex flags -complete -c pm -n '__fish_seen_subcommand_from reindex' -l mode -d 'Reindex mode' -r -a 'keyword semantic hybrid' -complete -c pm -n '__fish_seen_subcommand_from reindex' -l progress -d 'Emit progress updates to stderr' +complete -c pm -n '__pm_history_operation reindex' -l mode -d 'Reindex mode' -r -a 'keyword semantic hybrid' +complete -c pm -n '__pm_history_operation reindex' -l progress -d 'Emit progress updates to stderr' # get flags complete -c pm -n '__fish_seen_subcommand_from get' -l depth -d 'Detail depth' -r -a 'brief standard deep full' @@ -2655,9 +2671,12 @@ function __pm_history_tokens printf '%s\\n' -- return end + if test $positions -eq 0; and test "$token" = ctx + set token context + end printf '%s\\n' "$token" set positions (math $positions + 1) - if test $positions -eq 2; or test "$token" != history + if test $positions -eq 2; or not contains -- "$token" history context ops return end end @@ -2669,13 +2688,12 @@ end # Match only the command positions, keeping item history separate from maintenance. function __pm_history_operation set -l tokens (__pm_history_tokens) - if test "$tokens[1]" = history; and contains -- "$tokens[2]" ${HISTORY_LEAVES} - test "$tokens[2]" = "$argv[2]" - else - test "$tokens[1]" = "$argv[1]" + switch "$tokens[1] $tokens[2]" +${PM_NAMESPACED_COMMAND_ALIASES.map((entry) => ` case '${entry.canonical}'\n test "$argv[1]" = '${entry.alias}'\n return`).join("\n")} end + test "$tokens[1]" = "$argv[1]" end -complete -c pm -n 'test (count (__pm_history_tokens)) -eq 1; and __pm_history_operation history' -a '${HISTORY_LEAVES}' -d 'History operation' +${Object.entries(NAMESPACE_LEAVES).map(([noun, leaves]) => `complete -c pm -n 'test (count (__pm_history_tokens)) -eq 1; and __pm_history_operation ${noun}' -a '${leaves}' -d '${noun} operation'`).join("\n")} ${RESTORE_INVOCATIONS.map((flag) => `complete -c pm -n '__pm_history_operation restore restore' -l ${flag.flag.slice(2)}${flag.takes_value ? " -r" : ""}`).join("\n")} # history / activity flags @@ -2690,19 +2708,19 @@ complete -c pm -n '__pm_history_operation history' -l provenance-filter -d 'Fil complete -c pm -n '__pm_history_operation history' -l diff -d 'Include per-entry field-level before/after value diffs' complete -c pm -n '__pm_history_operation history' -l field -d 'With --diff, show only entries that changed this field' -r complete -c pm -n '__pm_history_operation history' -l verify -d 'Verify history hash chain and replay integrity' -complete -c pm -n '__fish_seen_subcommand_from events' -l since -d 'Resume after a cursor or from an ISO timestamp' -r -complete -c pm -n '__fish_seen_subcommand_from events' -l type -d 'Filter by mutation operation' -r -complete -c pm -n '__fish_seen_subcommand_from events' -l author -d 'Filter by mutation author' -r -complete -c pm -n '__fish_seen_subcommand_from events' -l item -d 'Filter by item or workspace stream' -r -complete -c pm -n '__fish_seen_subcommand_from events' -l limit -d 'Maximum events, up to 1000' -r -complete -c pm -n '__fish_seen_subcommand_from events' -l full -d 'Include complete authoritative history entries' -complete -c pm -n '__fish_seen_subcommand_from events' -l provenance -d 'Include patch-free identity and agent provenance' -complete -c pm -n '__fish_seen_subcommand_from events' -l provenance-summary -d 'Include bounded provenance completeness counts' -complete -c pm -n '__fish_seen_subcommand_from events' -l harness -d 'Filter by recorded or vocabulary-resolved harness' -r -complete -c pm -n '__fish_seen_subcommand_from events' -l agent-instance -d 'Filter by privacy-safe agent instance' -r -complete -c pm -n '__fish_seen_subcommand_from events' -l provenance-filter -d 'Filter by exact declared provenance value' -r -complete -c pm -n '__fish_seen_subcommand_from events' -l follow -d 'Continue emitting committed events' -complete -c pm -n '__fish_seen_subcommand_from events' -l interval-ms -d 'Empty-read delay while following' -r +complete -c pm -n '__pm_history_operation events' -l since -d 'Resume after a cursor or from an ISO timestamp' -r +complete -c pm -n '__pm_history_operation events' -l type -d 'Filter by mutation operation' -r +complete -c pm -n '__pm_history_operation events' -l author -d 'Filter by mutation author' -r +complete -c pm -n '__pm_history_operation events' -l item -d 'Filter by item or workspace stream' -r +complete -c pm -n '__pm_history_operation events' -l limit -d 'Maximum events, up to 1000' -r +complete -c pm -n '__pm_history_operation events' -l full -d 'Include complete authoritative history entries' +complete -c pm -n '__pm_history_operation events' -l provenance -d 'Include patch-free identity and agent provenance' +complete -c pm -n '__pm_history_operation events' -l provenance-summary -d 'Include bounded provenance completeness counts' +complete -c pm -n '__pm_history_operation events' -l harness -d 'Filter by recorded or vocabulary-resolved harness' -r +complete -c pm -n '__pm_history_operation events' -l agent-instance -d 'Filter by privacy-safe agent instance' -r +complete -c pm -n '__pm_history_operation events' -l provenance-filter -d 'Filter by exact declared provenance value' -r +complete -c pm -n '__pm_history_operation events' -l follow -d 'Continue emitting committed events' +complete -c pm -n '__pm_history_operation events' -l interval-ms -d 'Empty-read delay while following' -r complete -c pm -n '__pm_history_operation history-compact compact' -l before -d 'Compact entries strictly before this version number or ISO timestamp' -r complete -c pm -n '__pm_history_operation history-compact compact' -l id -d 'Item ID (alternative to positional ID)' -r complete -c pm -n '__pm_history_operation history-compact compact' -l ids -d 'Bulk: compact an explicit comma-separated list of item ids' -r @@ -2889,23 +2907,23 @@ complete -c pm -n '__fish_seen_subcommand_from test' -l message -d 'History mess complete -c pm -n '__fish_seen_subcommand_from test' -l force -d 'Force override' # test-all flags -complete -c pm -n '__fish_seen_subcommand_from test-all' -l status -d 'Filter by status' -r -a 'open in_progress' -complete -c pm -n '__fish_seen_subcommand_from test-all' -l limit -d 'Limit matching items before running linked tests' -r -complete -c pm -n '__fish_seen_subcommand_from test-all' -l offset -d 'Skip matching items before running linked tests' -r -complete -c pm -n '__fish_seen_subcommand_from test-all' -l background -d 'Run linked tests in managed background mode' -complete -c pm -n '__fish_seen_subcommand_from test-all' -l timeout -d 'Default timeout seconds' -r -complete -c pm -n '__fish_seen_subcommand_from test-all' -l progress -d 'Emit linked-test progress to stderr' -complete -c pm -n '__fish_seen_subcommand_from test-all' -l env-set -d 'Set linked-test runtime environment values' -r -complete -c pm -n '__fish_seen_subcommand_from test-all' -l env-clear -d 'Clear linked-test runtime environment values' -r -complete -c pm -n '__fish_seen_subcommand_from test-all' -l shared-host-safe -d 'Apply shared-host-safe runtime defaults' -complete -c pm -n '__fish_seen_subcommand_from test-all' -l pm-context -d 'PM linked-test context mode' -r -a 'schema tracker auto' -complete -c pm -n '__fish_seen_subcommand_from test-all' -l override-linked-pm-context -d 'Force run-level --pm-context over per-linked-test metadata' -complete -c pm -n '__fish_seen_subcommand_from test-all' -l fail-on-context-mismatch -d 'Fail when context item counts mismatch' -complete -c pm -n '__fish_seen_subcommand_from test-all' -l fail-on-skipped -d 'Treat skipped linked tests as dependency failures' -complete -c pm -n '__fish_seen_subcommand_from test-all' -l fail-on-empty-test-run -d 'Treat empty linked-test selections as failures' -complete -c pm -n '__fish_seen_subcommand_from test-all' -l require-assertions-for-pm -d 'Require assertions for linked PM command tests' -complete -c pm -n '__fish_seen_subcommand_from test-all' -l check-context -d 'Preflight linked PM command context diagnostics before execution' -complete -c pm -n '__fish_seen_subcommand_from test-all' -l auto-pm-context -d 'Auto-remediate tracker-read context mismatches using tracker context' +complete -c pm -n '__pm_history_operation test-all' -l status -d 'Filter by status' -r -a 'open in_progress' +complete -c pm -n '__pm_history_operation test-all' -l limit -d 'Limit matching items before running linked tests' -r +complete -c pm -n '__pm_history_operation test-all' -l offset -d 'Skip matching items before running linked tests' -r +complete -c pm -n '__pm_history_operation test-all' -l background -d 'Run linked tests in managed background mode' +complete -c pm -n '__pm_history_operation test-all' -l timeout -d 'Default timeout seconds' -r +complete -c pm -n '__pm_history_operation test-all' -l progress -d 'Emit linked-test progress to stderr' +complete -c pm -n '__pm_history_operation test-all' -l env-set -d 'Set linked-test runtime environment values' -r +complete -c pm -n '__pm_history_operation test-all' -l env-clear -d 'Clear linked-test runtime environment values' -r +complete -c pm -n '__pm_history_operation test-all' -l shared-host-safe -d 'Apply shared-host-safe runtime defaults' +complete -c pm -n '__pm_history_operation test-all' -l pm-context -d 'PM linked-test context mode' -r -a 'schema tracker auto' +complete -c pm -n '__pm_history_operation test-all' -l override-linked-pm-context -d 'Force run-level --pm-context over per-linked-test metadata' +complete -c pm -n '__pm_history_operation test-all' -l fail-on-context-mismatch -d 'Fail when context item counts mismatch' +complete -c pm -n '__pm_history_operation test-all' -l fail-on-skipped -d 'Treat skipped linked tests as dependency failures' +complete -c pm -n '__pm_history_operation test-all' -l fail-on-empty-test-run -d 'Treat empty linked-test selections as failures' +complete -c pm -n '__pm_history_operation test-all' -l require-assertions-for-pm -d 'Require assertions for linked PM command tests' +complete -c pm -n '__pm_history_operation test-all' -l check-context -d 'Preflight linked PM command context diagnostics before execution' +complete -c pm -n '__pm_history_operation test-all' -l auto-pm-context -d 'Auto-remediate tracker-read context mismatches using tracker context' # test-runs flags complete -c pm -n '__fish_seen_subcommand_from test-runs' -a 'list status logs stop resume' -d 'test-runs subcommand' @@ -2917,19 +2935,19 @@ complete -c pm -n '__fish_seen_subcommand_from test-runs' -l force -d 'Force-sto complete -c pm -n '__fish_seen_subcommand_from test-runs' -l author -d 'Resume author' -r # gc flags -complete -c pm -n '__fish_seen_subcommand_from gc' -l dry-run -d 'Preview cleanup targets without deleting files' -complete -c pm -n '__fish_seen_subcommand_from gc' -l scope -d 'Limit cleanup to index/embeddings/runtime/locks scopes' -r +complete -c pm -n '__pm_history_operation gc' -l dry-run -d 'Preview cleanup targets without deleting files' +complete -c pm -n '__pm_history_operation gc' -l scope -d 'Limit cleanup to index/embeddings/runtime/locks scopes' -r # stats flags -complete -c pm -n '__fish_seen_subcommand_from stats' -l include-empty -d 'Include registered zero-count type and status buckets' -complete -c pm -n '__fish_seen_subcommand_from stats' -l storage -d 'Include aggregate history-stream storage metrics' -complete -c pm -n '__fish_seen_subcommand_from stats' -l metadata-coverage -d 'Include metadata coverage percentages overall and by type' -complete -c pm -n '__fish_seen_subcommand_from stats' -l field-utilization -d 'Include content-field utilization rates across all items' -complete -c pm -n '__fish_seen_subcommand_from stats' -l by-assignee -d 'Lifecycle-bucketed breakdown grouped by assignee' -complete -c pm -n '__fish_seen_subcommand_from stats' -l by-tag -d 'Lifecycle-bucketed breakdown grouped by tag' -complete -c pm -n '__fish_seen_subcommand_from stats' -l by-priority -d 'Lifecycle-bucketed breakdown grouped by priority' -complete -c pm -n '__fish_seen_subcommand_from stats' -l tag-prefix -d 'With --by-tag: only count tags with this prefix' -r -complete -c pm -n '__fish_seen_subcommand_from stats' -l analytics -d 'Improvement ledger/history analytics JSON' -r +complete -c pm -n '__pm_history_operation stats' -l include-empty -d 'Include registered zero-count type and status buckets' +complete -c pm -n '__pm_history_operation stats' -l storage -d 'Include aggregate history-stream storage metrics' +complete -c pm -n '__pm_history_operation stats' -l metadata-coverage -d 'Include metadata coverage percentages overall and by type' +complete -c pm -n '__pm_history_operation stats' -l field-utilization -d 'Include content-field utilization rates across all items' +complete -c pm -n '__pm_history_operation stats' -l by-assignee -d 'Lifecycle-bucketed breakdown grouped by assignee' +complete -c pm -n '__pm_history_operation stats' -l by-tag -d 'Lifecycle-bucketed breakdown grouped by tag' +complete -c pm -n '__pm_history_operation stats' -l by-priority -d 'Lifecycle-bucketed breakdown grouped by priority' +complete -c pm -n '__pm_history_operation stats' -l tag-prefix -d 'With --by-tag: only count tags with this prefix' -r +complete -c pm -n '__pm_history_operation stats' -l analytics -d 'Improvement ledger/history analytics JSON' -r # append flags complete -c pm -n '__fish_seen_subcommand_from append' -s b -l body -d 'Item body' -r @@ -3030,29 +3048,29 @@ complete -c pm -n '__fish_seen_subcommand_from close-many' -l rollback complete -c pm -n '__fish_seen_subcommand_from close-many' -l no-checkpoint -d 'Disable checkpoint creation during apply mode' # validate flags -complete -c pm -n '__fish_seen_subcommand_from validate' -l check-completeness -d 'Check declarative required fields' -complete -c pm -n '__fish_seen_subcommand_from validate' -l check-metadata -d 'Run metadata completeness checks' -complete -c pm -n '__fish_seen_subcommand_from validate' -l metadata-profile -d 'Select metadata validation profile for --check-metadata' -r -a 'core strict custom' -complete -c pm -n '__fish_seen_subcommand_from validate' -l check-resolution -d 'Run closed-item resolution metadata checks' -complete -c pm -n '__fish_seen_subcommand_from validate' -l check-lifecycle -d 'Run active-item lifecycle governance drift checks' -complete -c pm -n '__fish_seen_subcommand_from validate' -l check-stale-blockers -d 'Include stale blocker-pattern diagnostics in lifecycle checks' -complete -c pm -n '__fish_seen_subcommand_from validate' -l dependency-cycle-severity -d 'Set dependency-cycle warning policy for lifecycle checks' -r -a 'off warn error' -complete -c pm -n '__fish_seen_subcommand_from validate' -l parent-cycle-severity -d 'Set parent-hierarchy cycle warning policy for lifecycle checks' -r -a 'off warn error' -complete -c pm -n '__fish_seen_subcommand_from validate' -l check-files -d 'Run linked-file and orphaned-file checks' -complete -c pm -n '__fish_seen_subcommand_from validate' -l scan-mode -d 'Select file candidate scan mode for --check-files' -r -a 'default tracked-all tracked-all-strict' -complete -c pm -n '__fish_seen_subcommand_from validate' -l include-pm-internals -d 'Include PM storage internals in tracked-all candidate scans' -complete -c pm -n '__fish_seen_subcommand_from validate' -l verbose-file-lists -d 'Include full file-path lists for validate --check-files details' -complete -c pm -n '__fish_seen_subcommand_from validate' -l verbose-diagnostics -d 'Include full validate diagnostic ID lists instead of compact summaries' -complete -c pm -n '__fish_seen_subcommand_from validate' -l all-affected-ids -d 'Emit complete missing_* affected-ID lists with no truncation (implied by --json)' -complete -c pm -n '__fish_seen_subcommand_from validate' -l strict-exit -d 'Return non-zero exit when validation warnings are present' -complete -c pm -n '__fish_seen_subcommand_from validate' -l fail-on-warn -d 'Alias for --strict-exit' -complete -c pm -n '__fish_seen_subcommand_from validate' -l fix-hints -d 'Add a machine-executable fix_hints[] of pm commands to each failing check' -complete -c pm -n '__fish_seen_subcommand_from validate' -l auto-fix -d 'Apply the safe, deterministic subset of fix-hint remediations automatically' -complete -c pm -n '__fish_seen_subcommand_from validate' -l dry-run -d 'Preview planned --auto-fix/--prune-missing fixes without applying them' -complete -c pm -n '__fish_seen_subcommand_from validate' -l fix-scope -d 'Grant --auto-fix scopes (estimates/lifecycle must be named explicitly)' -r -a 'metadata resolution estimates lifecycle' -complete -c pm -n '__fish_seen_subcommand_from validate' -l prune-missing -d 'Remove stale linked-file/doc links classified as deleted' -complete -c pm -n '__fish_seen_subcommand_from validate' -l check-history-drift -d 'Run item/history hash drift checks' -complete -c pm -n '__fish_seen_subcommand_from validate' -l check-command-references -d 'Run linked-command PM-ID reference checks' +complete -c pm -n '__pm_history_operation validate' -l check-completeness -d 'Check declarative required fields' +complete -c pm -n '__pm_history_operation validate' -l check-metadata -d 'Run metadata completeness checks' +complete -c pm -n '__pm_history_operation validate' -l metadata-profile -d 'Select metadata validation profile for --check-metadata' -r -a 'core strict custom' +complete -c pm -n '__pm_history_operation validate' -l check-resolution -d 'Run closed-item resolution metadata checks' +complete -c pm -n '__pm_history_operation validate' -l check-lifecycle -d 'Run active-item lifecycle governance drift checks' +complete -c pm -n '__pm_history_operation validate' -l check-stale-blockers -d 'Include stale blocker-pattern diagnostics in lifecycle checks' +complete -c pm -n '__pm_history_operation validate' -l dependency-cycle-severity -d 'Set dependency-cycle warning policy for lifecycle checks' -r -a 'off warn error' +complete -c pm -n '__pm_history_operation validate' -l parent-cycle-severity -d 'Set parent-hierarchy cycle warning policy for lifecycle checks' -r -a 'off warn error' +complete -c pm -n '__pm_history_operation validate' -l check-files -d 'Run linked-file and orphaned-file checks' +complete -c pm -n '__pm_history_operation validate' -l scan-mode -d 'Select file candidate scan mode for --check-files' -r -a 'default tracked-all tracked-all-strict' +complete -c pm -n '__pm_history_operation validate' -l include-pm-internals -d 'Include PM storage internals in tracked-all candidate scans' +complete -c pm -n '__pm_history_operation validate' -l verbose-file-lists -d 'Include full file-path lists for validate --check-files details' +complete -c pm -n '__pm_history_operation validate' -l verbose-diagnostics -d 'Include full validate diagnostic ID lists instead of compact summaries' +complete -c pm -n '__pm_history_operation validate' -l all-affected-ids -d 'Emit complete missing_* affected-ID lists with no truncation (implied by --json)' +complete -c pm -n '__pm_history_operation validate' -l strict-exit -d 'Return non-zero exit when validation warnings are present' +complete -c pm -n '__pm_history_operation validate' -l fail-on-warn -d 'Alias for --strict-exit' +complete -c pm -n '__pm_history_operation validate' -l fix-hints -d 'Add a machine-executable fix_hints[] of pm commands to each failing check' +complete -c pm -n '__pm_history_operation validate' -l auto-fix -d 'Apply the safe, deterministic subset of fix-hint remediations automatically' +complete -c pm -n '__pm_history_operation validate' -l dry-run -d 'Preview planned --auto-fix/--prune-missing fixes without applying them' +complete -c pm -n '__pm_history_operation validate' -l fix-scope -d 'Grant --auto-fix scopes (estimates/lifecycle must be named explicitly)' -r -a 'metadata resolution estimates lifecycle' +complete -c pm -n '__pm_history_operation validate' -l prune-missing -d 'Remove stale linked-file/doc links classified as deleted' +complete -c pm -n '__pm_history_operation validate' -l check-history-drift -d 'Run item/history hash drift checks' +complete -c pm -n '__pm_history_operation validate' -l check-command-references -d 'Run linked-command PM-ID reference checks' complete -c pm -n '__fish_seen_subcommand_from init' -l preset -d 'Governance preset for new setups' -r -a 'minimal default strict' complete -c pm -n '__fish_seen_subcommand_from init' -l id-prefix -d 'Set the item ID prefix' -r complete -c pm -n '__fish_seen_subcommand_from init' -l prefix -d 'Alias for --id-prefix' -r @@ -3067,16 +3085,16 @@ complete -c pm -n '__fish_seen_subcommand_from config' -l criterion -d 'Criteria complete -c pm -n '__fish_seen_subcommand_from config' -l clear-criteria -d 'Clear config criteria-list key values' complete -c pm -n '__fish_seen_subcommand_from config' -l format -d 'Item format for item-format key' -r -a 'toon' complete -c pm -n '__fish_seen_subcommand_from config' -l policy -d 'Policy value for supported policy keys' -r -complete -c pm -n '__fish_seen_subcommand_from health' -l strict-directories -d 'Treat optional item-type directories as required failures' -complete -c pm -n '__fish_seen_subcommand_from health' -l check-only -d 'Run read-only health diagnostics without refreshing vectors' -complete -c pm -n '__fish_seen_subcommand_from health' -l no-refresh -d 'Disable automatic vector refresh attempts during health checks' -complete -c pm -n '__fish_seen_subcommand_from health' -l refresh-vectors -d 'Explicitly enable vector refresh attempts during health checks' -complete -c pm -n '__fish_seen_subcommand_from health' -l verbose-stale-items -d 'Include full stale vectorization ID lists in health output' -complete -c pm -n '__fish_seen_subcommand_from health' -l verbose-author-events -d 'Include complete actionable unknown-author coordinates' -complete -c pm -n '__fish_seen_subcommand_from health' -l brief -d 'Emit compact health details for low-token agent checks' -complete -c pm -n '__fish_seen_subcommand_from health' -l summary -d 'Emit one-line-style health status with check names and warning count' -complete -c pm -n '__fish_seen_subcommand_from health' -l strict-exit -d 'Return non-zero exit when health warnings are present' -complete -c pm -n '__fish_seen_subcommand_from health' -l fail-on-warn -d 'Alias for --strict-exit' +complete -c pm -n '__pm_history_operation health' -l strict-directories -d 'Treat optional item-type directories as required failures' +complete -c pm -n '__pm_history_operation health' -l check-only -d 'Run read-only health diagnostics without refreshing vectors' +complete -c pm -n '__pm_history_operation health' -l no-refresh -d 'Disable automatic vector refresh attempts during health checks' +complete -c pm -n '__pm_history_operation health' -l refresh-vectors -d 'Explicitly enable vector refresh attempts during health checks' +complete -c pm -n '__pm_history_operation health' -l verbose-stale-items -d 'Include full stale vectorization ID lists in health output' +complete -c pm -n '__pm_history_operation health' -l verbose-author-events -d 'Include complete actionable unknown-author coordinates' +complete -c pm -n '__pm_history_operation health' -l brief -d 'Emit compact health details for low-token agent checks' +complete -c pm -n '__pm_history_operation health' -l summary -d 'Emit one-line-style health status with check names and warning count' +complete -c pm -n '__pm_history_operation health' -l strict-exit -d 'Return non-zero exit when health warnings are present' +complete -c pm -n '__pm_history_operation health' -l fail-on-warn -d 'Alias for --strict-exit' # completion shell argument complete -c pm -n '__fish_seen_subcommand_from completion' -l eager-tags -d 'Embed current tracker tags directly in script output' diff --git a/src/sdk/index.ts b/src/sdk/index.ts index ac0cabcb7..5fc942a87 100644 --- a/src/sdk/index.ts +++ b/src/sdk/index.ts @@ -129,7 +129,7 @@ export { type WorkspaceSnapshotRestorePlan, } from "./workspace-snapshot.js"; export { flushTelemetryQueue } from "./telemetry-flush.js"; -export { PM_HISTORY_COMMAND_ALIASES, resolvePmHistoryOperation } from "./cli-contracts.js"; +export { PM_HISTORY_COMMAND_ALIASES, PM_CONTEXT_OPS_COMMAND_ALIASES, PM_NAMESPACED_COMMAND_ALIASES, resolvePmCommandOperation, resolvePmHistoryOperation } from "./cli-contracts.js"; export { EXECUTABLE_COMMAND_ALIASES, PM_COMMAND_ALIAS_CONTRACTS, diff --git a/tests/fixtures/contracts/full.json b/tests/fixtures/contracts/full.json index 416a7cacc..ea4e335a7 100644 --- a/tests/fixtures/contracts/full.json +++ b/tests/fixtures/contracts/full.json @@ -194,7 +194,7 @@ "action": "eval", "available": true, "cli_exposed": true, - "command_path": "eval", + "command_path": "ops eval|eval", "disabled_reason": null, "invocable": true, "provider": "core", @@ -214,7 +214,7 @@ "action": "events", "available": true, "cli_exposed": true, - "command_path": "events", + "command_path": "history events|events", "disabled_reason": null, "invocable": true, "provider": "core", @@ -364,7 +364,7 @@ "action": "focus", "available": true, "cli_exposed": true, - "command_path": "focus", + "command_path": "context focus|focus", "disabled_reason": null, "invocable": true, "provider": "core", @@ -374,7 +374,7 @@ "action": "gc", "available": true, "cli_exposed": true, - "command_path": "gc", + "command_path": "ops gc|gc", "disabled_reason": null, "invocable": true, "provider": "core", @@ -404,7 +404,7 @@ "action": "health", "available": true, "cli_exposed": true, - "command_path": "health", + "command_path": "ops health|health", "disabled_reason": null, "invocable": true, "provider": "core", @@ -524,7 +524,7 @@ "action": "next", "available": true, "cli_exposed": true, - "command_path": "next", + "command_path": "context next|next", "disabled_reason": null, "invocable": true, "provider": "core", @@ -784,7 +784,7 @@ "action": "stats", "available": true, "cli_exposed": true, - "command_path": "stats", + "command_path": "ops stats|stats", "disabled_reason": null, "invocable": true, "provider": "core", @@ -794,7 +794,7 @@ "action": "telemetry", "available": true, "cli_exposed": true, - "command_path": "telemetry", + "command_path": "ops telemetry|telemetry", "disabled_reason": null, "invocable": true, "provider": "core", @@ -814,7 +814,7 @@ "action": "test-all", "available": true, "cli_exposed": true, - "command_path": "test-all", + "command_path": "ops test-all|test-all", "disabled_reason": null, "invocable": true, "provider": "core", @@ -844,7 +844,7 @@ "action": "validate", "available": true, "cli_exposed": true, - "command_path": "validate", + "command_path": "ops validate|validate", "disabled_reason": null, "invocable": true, "provider": "core", @@ -1000,6 +1000,46 @@ ], "canonical": "context" }, + { + "aliases": [ + "focus" + ], + "canonical": "context focus", + "contracts": [ + { + "alias": "focus", + "canonical": "context focus", + "canonical_argv": [ + "context", + "focus" + ], + "hidden": true, + "lifecycle": "permanent", + "owner": "pm-kcs4", + "registration": "bootstrap" + } + ] + }, + { + "aliases": [ + "next" + ], + "canonical": "context next", + "contracts": [ + { + "alias": "next", + "canonical": "context next", + "canonical_argv": [ + "context", + "next" + ], + "hidden": true, + "lifecycle": "permanent", + "owner": "pm-kcs4", + "registration": "bootstrap" + } + ] + }, { "aliases": [ "fetch", @@ -1095,6 +1135,26 @@ } ] }, + { + "aliases": [ + "events" + ], + "canonical": "history events", + "contracts": [ + { + "alias": "events", + "canonical": "history events", + "canonical_argv": [ + "history", + "events" + ], + "hidden": true, + "lifecycle": "permanent", + "owner": "pm-3i9q8g", + "registration": "bootstrap" + } + ] + }, { "aliases": [ "history-redact" @@ -1297,6 +1357,146 @@ } ] }, + { + "aliases": [ + "eval" + ], + "canonical": "ops eval", + "contracts": [ + { + "alias": "eval", + "canonical": "ops eval", + "canonical_argv": [ + "ops", + "eval" + ], + "hidden": true, + "lifecycle": "permanent", + "owner": "pm-6apl", + "registration": "bootstrap" + } + ] + }, + { + "aliases": [ + "gc" + ], + "canonical": "ops gc", + "contracts": [ + { + "alias": "gc", + "canonical": "ops gc", + "canonical_argv": [ + "ops", + "gc" + ], + "hidden": true, + "lifecycle": "permanent", + "owner": "pm-6apl", + "registration": "bootstrap" + } + ] + }, + { + "aliases": [ + "health" + ], + "canonical": "ops health", + "contracts": [ + { + "alias": "health", + "canonical": "ops health", + "canonical_argv": [ + "ops", + "health" + ], + "hidden": true, + "lifecycle": "permanent", + "owner": "pm-6apl", + "registration": "bootstrap" + } + ] + }, + { + "aliases": [ + "stats" + ], + "canonical": "ops stats", + "contracts": [ + { + "alias": "stats", + "canonical": "ops stats", + "canonical_argv": [ + "ops", + "stats" + ], + "hidden": true, + "lifecycle": "permanent", + "owner": "pm-6apl", + "registration": "bootstrap" + } + ] + }, + { + "aliases": [ + "telemetry" + ], + "canonical": "ops telemetry", + "contracts": [ + { + "alias": "telemetry", + "canonical": "ops telemetry", + "canonical_argv": [ + "ops", + "telemetry" + ], + "hidden": true, + "lifecycle": "permanent", + "owner": "pm-6apl", + "registration": "bootstrap" + } + ] + }, + { + "aliases": [ + "test-all" + ], + "canonical": "ops test-all", + "contracts": [ + { + "alias": "test-all", + "canonical": "ops test-all", + "canonical_argv": [ + "ops", + "test-all" + ], + "hidden": true, + "lifecycle": "permanent", + "owner": "pm-6apl", + "registration": "bootstrap" + } + ] + }, + { + "aliases": [ + "validate" + ], + "canonical": "ops validate", + "contracts": [ + { + "alias": "validate", + "canonical": "ops validate", + "canonical_argv": [ + "ops", + "validate" + ], + "hidden": true, + "lifecycle": "permanent", + "owner": "pm-6apl", + "registration": "bootstrap" + } + ] + }, { "aliases": [ "extension", @@ -1403,6 +1603,8 @@ "comments", "config", "context", + "context focus", + "context next", "contracts", "copy", "create", @@ -1438,6 +1640,7 @@ "history", "history activity", "history compact", + "history events", "history redact", "history repair", "history restore", @@ -1456,6 +1659,14 @@ "merge", "next", "notes", + "ops", + "ops eval", + "ops gc", + "ops health", + "ops stats", + "ops telemetry", + "ops test-all", + "ops validate", "package", "package activate", "package adopt", @@ -2535,6 +2746,95 @@ ], "provider": "core" }, + { + "command": "context focus", + "flags": [ + { + "flag": "--id", + "value_name": "item-id" + }, + { + "flag": "--clear" + } + ], + "provider": "core" + }, + { + "command": "context next", + "flags": [ + { + "flag": "--include-decisions" + }, + { + "flag": "--include-gates" + }, + { + "flag": "--include-containers" + }, + { + "flag": "--for", + "value_name": "intent" + }, + { + "flag": "--type" + }, + { + "flag": "--tag" + }, + { + "flag": "--priority" + }, + { + "flag": "--assignee" + }, + { + "aliases": [ + "--assignee_filter" + ], + "flag": "--assignee-filter" + }, + { + "flag": "--sprint" + }, + { + "flag": "--release" + }, + { + "flag": "--parent" + }, + { + "flag": "--limit" + }, + { + "aliases": [ + "--blocked_limit" + ], + "flag": "--blocked-limit" + }, + { + "aliases": [ + "--ready_only" + ], + "flag": "--ready-only" + }, + { + "flag": "--format" + }, + { + "aliases": [ + "--explain_ranking" + ], + "flag": "--explain-ranking" + }, + { + "aliases": [ + "--token_budget" + ], + "flag": "--token-budget" + } + ], + "provider": "core" + }, { "command": "contracts", "flags": [ @@ -3179,8 +3479,60 @@ }, { "command": "events", - "flags": [], - "provider": "extension" + "flags": [ + { + "flag": "--since" + }, + { + "flag": "--type", + "repeatable": true + }, + { + "flag": "--author", + "repeatable": true + }, + { + "flag": "--item", + "repeatable": true + }, + { + "flag": "--limit", + "value_type": "number" + }, + { + "flag": "--cursor-mode", + "value_name": "batch|row" + }, + { + "flag": "--full" + }, + { + "flag": "--provenance" + }, + { + "flag": "--provenance-summary" + }, + { + "flag": "--harness", + "repeatable": true + }, + { + "flag": "--agent-instance", + "repeatable": true + }, + { + "flag": "--provenance-filter", + "repeatable": true + }, + { + "flag": "--follow" + }, + { + "flag": "--interval-ms", + "value_type": "number" + } + ], + "provider": "core" }, { "command": "extension activate", @@ -3865,6 +4217,63 @@ ], "provider": "core" }, + { + "command": "history events", + "flags": [ + { + "flag": "--since" + }, + { + "flag": "--type", + "repeatable": true + }, + { + "flag": "--author", + "repeatable": true + }, + { + "flag": "--item", + "repeatable": true + }, + { + "flag": "--limit", + "value_type": "number" + }, + { + "flag": "--cursor-mode", + "value_name": "batch|row" + }, + { + "flag": "--full" + }, + { + "flag": "--provenance" + }, + { + "flag": "--provenance-summary" + }, + { + "flag": "--harness", + "repeatable": true + }, + { + "flag": "--agent-instance", + "repeatable": true + }, + { + "flag": "--provenance-filter", + "repeatable": true + }, + { + "flag": "--follow" + }, + { + "flag": "--interval-ms", + "value_type": "number" + } + ], + "provider": "core" + }, { "command": "history redact", "flags": [ @@ -4740,6 +5149,291 @@ ], "provider": "core" }, + { + "command": "ops", + "flags": [], + "provider": "core" + }, + { + "command": "ops eval", + "flags": [ + { + "flag": "--mode" + }, + { + "flag": "--k" + }, + { + "flag": "--fail-under" + }, + { + "flag": "--queries" + }, + { + "flag": "--format" + } + ], + "provider": "core" + }, + { + "command": "ops gc", + "flags": [ + { + "flag": "--dry-run" + }, + { + "flag": "--scope" + } + ], + "provider": "core" + }, + { + "command": "ops health", + "flags": [ + { + "flag": "--strict-directories" + }, + { + "flag": "--require-merge-drivers" + }, + { + "flag": "--strict-exit" + }, + { + "flag": "--fail-on-warn" + }, + { + "flag": "--check-only" + }, + { + "flag": "--check-telemetry" + }, + { + "flag": "--no-refresh" + }, + { + "flag": "--refresh-vectors" + }, + { + "flag": "--verbose-stale-items" + }, + { + "flag": "--verbose-author-events" + }, + { + "flag": "--brief" + }, + { + "flag": "--summary" + }, + { + "flag": "--skip-vectors" + }, + { + "flag": "--skip-integrity" + }, + { + "flag": "--skip-drift" + }, + { + "flag": "--full" + } + ], + "provider": "core" + }, + { + "command": "ops stats", + "flags": [ + { + "flag": "--include-empty" + }, + { + "flag": "--storage" + }, + { + "flag": "--metadata-coverage" + }, + { + "flag": "--field-utilization" + }, + { + "flag": "--by-assignee" + }, + { + "flag": "--by-tag" + }, + { + "flag": "--by-priority" + }, + { + "flag": "--tag-prefix" + }, + { + "flag": "--analytics" + } + ], + "provider": "core" + }, + { + "command": "ops telemetry", + "flags": [ + { + "flag": "--limit" + } + ], + "provider": "core" + }, + { + "command": "ops test-all", + "flags": [ + { + "flag": "--status" + }, + { + "flag": "--limit" + }, + { + "flag": "--offset" + }, + { + "flag": "--background" + }, + { + "flag": "--timeout" + }, + { + "flag": "--progress" + }, + { + "flag": "--env-set" + }, + { + "flag": "--env-clear" + }, + { + "flag": "--shared-host-safe" + }, + { + "flag": "--pm-context" + }, + { + "flag": "--override-linked-pm-context" + }, + { + "flag": "--workspace-context" + }, + { + "flag": "--override-linked-workspace-context" + }, + { + "flag": "--allow-untrusted-linked-tests" + }, + { + "flag": "--fail-on-context-mismatch" + }, + { + "flag": "--fail-on-skipped" + }, + { + "flag": "--fail-on-empty-test-run" + }, + { + "flag": "--require-assertions-for-pm" + }, + { + "flag": "--check-context" + }, + { + "flag": "--auto-pm-context" + } + ], + "provider": "core" + }, + { + "command": "ops validate", + "flags": [ + { + "flag": "--check-completeness", + "value_type": "boolean" + }, + { + "flag": "--check-metadata" + }, + { + "flag": "--metadata-profile" + }, + { + "flag": "--check-resolution" + }, + { + "flag": "--check-lifecycle" + }, + { + "flag": "--check-stale-blockers" + }, + { + "flag": "--dependency-cycle-severity" + }, + { + "flag": "--parent-cycle-severity" + }, + { + "flag": "--check-files" + }, + { + "flag": "--scan-mode" + }, + { + "flag": "--include-pm-internals" + }, + { + "flag": "--verbose-file-lists" + }, + { + "flag": "--verbose-diagnostics" + }, + { + "flag": "--all-affected-ids" + }, + { + "flag": "--strict-exit" + }, + { + "flag": "--fail-on-warn" + }, + { + "flag": "--fix-hints" + }, + { + "flag": "--auto-fix" + }, + { + "flag": "--dry-run" + }, + { + "flag": "--fix-scope" + }, + { + "flag": "--prune-missing" + }, + { + "flag": "--check-history-drift" + }, + { + "flag": "--check-command-references" + }, + { + "flag": "--check-storage-integrity" + }, + { + "flag": "--counts" + }, + { + "flag": "--full" + } + ], + "provider": "core" + }, { "command": "package", "flags": [ @@ -9388,6 +10082,60 @@ "wrapper_key": null } }, + { + "budget": { + "allows_unbounded_opt_out": true, + "budget_class": "mutation", + "command": "context focus", + "default_max_estimated_tokens": 2000, + "default_max_estimated_tokens_by_format": { + "json": 3000, + "toon": 2000 + }, + "degradation_ladder": [ + "full", + "compact", + "brief", + "summary", + "counts" + ], + "token_estimate": "ceil(utf8_bytes / 4)" + }, + "envelope": { + "cardinality": "one", + "command": "context focus", + "format_flag": "--json", + "kind": "mutation_receipt", + "wrapper_key": null + } + }, + { + "budget": { + "allows_unbounded_opt_out": true, + "budget_class": "read", + "command": "context next", + "default_max_estimated_tokens": 4000, + "default_max_estimated_tokens_by_format": { + "json": 6000, + "toon": 4000 + }, + "degradation_ladder": [ + "full", + "compact", + "brief", + "summary", + "counts" + ], + "token_estimate": "ceil(utf8_bytes / 4)" + }, + "envelope": { + "cardinality": "none", + "command": "context next", + "format_flag": "--json", + "kind": "diagnostic", + "wrapper_key": null + } + }, { "budget": { "allows_unbounded_opt_out": true, @@ -10333,6 +11081,33 @@ "wrapper_key": null } }, + { + "budget": { + "allows_unbounded_opt_out": true, + "budget_class": "read", + "command": "history events", + "default_max_estimated_tokens": 4000, + "default_max_estimated_tokens_by_format": { + "json": 6000, + "toon": 4000 + }, + "degradation_ladder": [ + "full", + "compact", + "brief", + "summary", + "counts" + ], + "token_estimate": "ceil(utf8_bytes / 4)" + }, + "envelope": { + "cardinality": "many", + "command": "history events", + "format_flag": "--json", + "kind": "collection", + "wrapper_key": "items" + } + }, { "budget": { "allows_unbounded_opt_out": true, @@ -10819,6 +11594,222 @@ "wrapper_key": "items" } }, + { + "budget": { + "allows_unbounded_opt_out": true, + "budget_class": "read", + "command": "ops", + "default_max_estimated_tokens": 4000, + "default_max_estimated_tokens_by_format": { + "json": 6000, + "toon": 4000 + }, + "degradation_ladder": [ + "full", + "compact", + "brief", + "summary", + "counts" + ], + "token_estimate": "ceil(utf8_bytes / 4)" + }, + "envelope": { + "cardinality": "none", + "command": "ops", + "format_flag": "--json", + "kind": "diagnostic", + "wrapper_key": null + } + }, + { + "budget": { + "allows_unbounded_opt_out": true, + "budget_class": "read", + "command": "ops eval", + "default_max_estimated_tokens": 4000, + "default_max_estimated_tokens_by_format": { + "json": 6000, + "toon": 4000 + }, + "degradation_ladder": [ + "full", + "compact", + "brief", + "summary", + "counts" + ], + "token_estimate": "ceil(utf8_bytes / 4)" + }, + "envelope": { + "cardinality": "none", + "command": "ops eval", + "format_flag": "--json", + "kind": "diagnostic", + "wrapper_key": null + } + }, + { + "budget": { + "allows_unbounded_opt_out": true, + "budget_class": "governance", + "command": "ops gc", + "default_max_estimated_tokens": 6000, + "default_max_estimated_tokens_by_format": { + "json": 9000, + "toon": 6000 + }, + "degradation_ladder": [ + "full", + "compact", + "brief", + "summary", + "counts" + ], + "token_estimate": "ceil(utf8_bytes / 4)" + }, + "envelope": { + "cardinality": "none", + "command": "ops gc", + "format_flag": "--json", + "kind": "diagnostic", + "wrapper_key": null + } + }, + { + "budget": { + "allows_unbounded_opt_out": true, + "budget_class": "governance", + "command": "ops health", + "default_max_estimated_tokens": 6000, + "default_max_estimated_tokens_by_format": { + "json": 9000, + "toon": 6000 + }, + "degradation_ladder": [ + "full", + "compact", + "brief", + "summary", + "counts" + ], + "token_estimate": "ceil(utf8_bytes / 4)" + }, + "envelope": { + "cardinality": "none", + "command": "ops health", + "format_flag": "--json", + "kind": "diagnostic", + "wrapper_key": null + } + }, + { + "budget": { + "allows_unbounded_opt_out": true, + "budget_class": "governance", + "command": "ops stats", + "default_max_estimated_tokens": 6000, + "default_max_estimated_tokens_by_format": { + "json": 9000, + "toon": 6000 + }, + "degradation_ladder": [ + "full", + "compact", + "brief", + "summary", + "counts" + ], + "token_estimate": "ceil(utf8_bytes / 4)" + }, + "envelope": { + "cardinality": "none", + "command": "ops stats", + "format_flag": "--json", + "kind": "diagnostic", + "wrapper_key": null + } + }, + { + "budget": { + "allows_unbounded_opt_out": true, + "budget_class": "governance", + "command": "ops telemetry", + "default_max_estimated_tokens": 6000, + "default_max_estimated_tokens_by_format": { + "json": 9000, + "toon": 6000 + }, + "degradation_ladder": [ + "full", + "compact", + "brief", + "summary", + "counts" + ], + "token_estimate": "ceil(utf8_bytes / 4)" + }, + "envelope": { + "cardinality": "none", + "command": "ops telemetry", + "format_flag": "--json", + "kind": "diagnostic", + "wrapper_key": null + } + }, + { + "budget": { + "allows_unbounded_opt_out": true, + "budget_class": "governance", + "command": "ops test-all", + "default_max_estimated_tokens": 6000, + "default_max_estimated_tokens_by_format": { + "json": 9000, + "toon": 6000 + }, + "degradation_ladder": [ + "full", + "compact", + "brief", + "summary", + "counts" + ], + "token_estimate": "ceil(utf8_bytes / 4)" + }, + "envelope": { + "cardinality": "none", + "command": "ops test-all", + "format_flag": "--json", + "kind": "diagnostic", + "wrapper_key": null + } + }, + { + "budget": { + "allows_unbounded_opt_out": true, + "budget_class": "governance", + "command": "ops validate", + "default_max_estimated_tokens": 6000, + "default_max_estimated_tokens_by_format": { + "json": 9000, + "toon": 6000 + }, + "degradation_ladder": [ + "full", + "compact", + "brief", + "summary", + "counts" + ], + "token_estimate": "ceil(utf8_bytes / 4)" + }, + "envelope": { + "cardinality": "none", + "command": "ops validate", + "format_flag": "--json", + "kind": "diagnostic", + "wrapper_key": null + } + }, { "budget": { "allows_unbounded_opt_out": true, @@ -13044,6 +14035,34 @@ "intent": "Build context.", "intent_source": "command" }, + { + "command": "context focus", + "default_max_estimated_tokens": 2000, + "default_max_estimated_tokens_by_format": { + "json": 3000, + "toon": 2000 + }, + "intent": "Manage focus.", + "intent_source": "command" + }, + { + "command": "context next", + "default_max_estimated_tokens": 4000, + "default_max_estimated_tokens_by_format": { + "json": 6000, + "toon": 4000 + }, + "flags": [ + "--limit", + "--blocked-limit", + "--ready-only", + "--token-budget", + "--explain-ranking", + "--format" + ], + "intent": "Pick next work.", + "intent_source": "command" + }, { "command": "contracts", "default_max_estimated_tokens": 3000, @@ -13188,6 +14207,11 @@ "json": 6000, "toon": 4000 }, + "flags": [ + "--limit", + "--full", + "--since" + ], "intent": "Read events.", "intent_source": "command" }, @@ -13471,6 +14495,21 @@ "intent": "Compact history.", "intent_source": "command" }, + { + "command": "history events", + "default_max_estimated_tokens": 4000, + "default_max_estimated_tokens_by_format": { + "json": 6000, + "toon": 4000 + }, + "flags": [ + "--limit", + "--full", + "--since" + ], + "intent": "Read events.", + "intent_source": "command" + }, { "command": "history redact", "default_max_estimated_tokens": 2000, @@ -13677,6 +14716,112 @@ "intent": "Manage notes.", "intent_source": "command" }, + { + "command": "ops", + "default_max_estimated_tokens": 4000, + "default_max_estimated_tokens_by_format": { + "json": 6000, + "toon": 4000 + }, + "intent": "Run operations.", + "intent_source": "command" + }, + { + "command": "ops eval", + "default_max_estimated_tokens": 4000, + "default_max_estimated_tokens_by_format": { + "json": 6000, + "toon": 4000 + }, + "flags": [ + "--format" + ], + "intent": "Run evaluations.", + "intent_source": "command" + }, + { + "command": "ops gc", + "default_max_estimated_tokens": 6000, + "default_max_estimated_tokens_by_format": { + "json": 9000, + "toon": 6000 + }, + "intent": "Clean caches.", + "intent_source": "command" + }, + { + "command": "ops health", + "default_max_estimated_tokens": 6000, + "default_max_estimated_tokens_by_format": { + "json": 9000, + "toon": 6000 + }, + "flags": [ + "--check-only", + "--summary", + "--brief", + "--check-telemetry", + "--strict-exit", + "--full" + ], + "intent": "Check health.", + "intent_source": "command" + }, + { + "command": "ops stats", + "default_max_estimated_tokens": 6000, + "default_max_estimated_tokens_by_format": { + "json": 9000, + "toon": 6000 + }, + "intent": "Show stats.", + "intent_source": "command" + }, + { + "command": "ops telemetry", + "default_max_estimated_tokens": 6000, + "default_max_estimated_tokens_by_format": { + "json": 9000, + "toon": 6000 + }, + "flags": [ + "--limit" + ], + "intent": "Manage telemetry.", + "intent_source": "command" + }, + { + "command": "ops test-all", + "default_max_estimated_tokens": 6000, + "default_max_estimated_tokens_by_format": { + "json": 9000, + "toon": 6000 + }, + "flags": [ + "--limit", + "--offset" + ], + "intent": "Run all linked tests.", + "intent_source": "command" + }, + { + "command": "ops validate", + "default_max_estimated_tokens": 6000, + "default_max_estimated_tokens_by_format": { + "json": 9000, + "toon": 6000 + }, + "flags": [ + "--check-resolution", + "--check-history-drift", + "--check-storage-integrity", + "--counts", + "--strict-exit", + "--fix-hints" + ], + "intent": "Validate data.", + "intent_source": "command" + }, { "command": "package", "default_max_estimated_tokens": 3000, @@ -15852,6 +16997,8 @@ "comments", "config", "context", + "context focus", + "context next", "contracts", "copy", "create", @@ -15887,6 +17034,7 @@ "history", "history activity", "history compact", + "history events", "history redact", "history repair", "history restore", @@ -15905,6 +17053,14 @@ "merge", "next", "notes", + "ops", + "ops eval", + "ops gc", + "ops health", + "ops stats", + "ops telemetry", + "ops test-all", + "ops validate", "package", "package activate", "package adopt", @@ -22976,14 +24132,42 @@ "disposition": "consolidation", "noun": "context", "owner": "pm-kcs4", - "target": "context" + "target": "context focus" + }, + { + "command": "context focus", + "disposition": "target_noun", + "noun": "context", + "owner": "pm-kcs4", + "target": "context focus" }, { "command": "next", "disposition": "consolidation", "noun": "context", "owner": "pm-kcs4", - "target": "context" + "target": "context next" + }, + { + "command": "context next", + "disposition": "target_noun", + "noun": "context", + "owner": "pm-kcs4", + "target": "context next" + }, + { + "command": "ctx next", + "disposition": "consolidation", + "noun": "context", + "owner": "pm-kcs4", + "target": "context next" + }, + { + "command": "ctx focus", + "disposition": "consolidation", + "noun": "context", + "owner": "pm-kcs4", + "target": "context focus" }, { "command": "search", @@ -22995,9 +24179,16 @@ { "command": "reindex", "disposition": "package_owned", - "noun": "search", - "owner": "package:search-advanced", - "target": "search" + "noun": "ops", + "owner": "pm-3i9q8g", + "target": "ops reindex" + }, + { + "command": "ops reindex", + "disposition": "package_owned", + "noun": "ops", + "owner": "pm-3i9q8g", + "target": "ops reindex" }, { "command": "search-advanced", @@ -23108,8 +24299,15 @@ "command": "events", "disposition": "consolidation", "noun": "history", - "owner": "pm-tqel", - "target": "history" + "owner": "pm-3i9q8g", + "target": "history events" + }, + { + "command": "history events", + "disposition": "target_noun", + "noun": "history", + "owner": "pm-3i9q8g", + "target": "history events" }, { "command": "history-author-acknowledge", @@ -23629,6 +24827,27 @@ "owner": "pm-o3fh", "target": "package calendar" }, + { + "command": "ops", + "disposition": "target_noun", + "noun": "ops", + "owner": "pm-6apl", + "target": "ops" + }, + { + "command": "normalize", + "disposition": "package_owned", + "noun": "ops", + "owner": "pm-3i9q8g", + "target": "ops normalize" + }, + { + "command": "ops normalize", + "disposition": "package_owned", + "noun": "ops", + "owner": "pm-3i9q8g", + "target": "ops normalize" + }, { "command": "assurance", "disposition": "consolidation", @@ -23648,21 +24867,42 @@ "disposition": "consolidation", "noun": "ops", "owner": "pm-6apl", - "target": "ops" + "target": "ops eval" + }, + { + "command": "ops eval", + "disposition": "target_noun", + "noun": "ops", + "owner": "pm-6apl", + "target": "ops eval" }, { "command": "gc", "disposition": "consolidation", "noun": "ops", "owner": "pm-6apl", - "target": "ops" + "target": "ops gc" + }, + { + "command": "ops gc", + "disposition": "target_noun", + "noun": "ops", + "owner": "pm-6apl", + "target": "ops gc" }, { "command": "health", "disposition": "consolidation", "noun": "ops", "owner": "pm-6apl", - "target": "ops" + "target": "ops health" + }, + { + "command": "ops health", + "disposition": "target_noun", + "noun": "ops", + "owner": "pm-6apl", + "target": "ops health" }, { "command": "profile", @@ -23683,28 +24923,56 @@ "disposition": "consolidation", "noun": "ops", "owner": "pm-6apl", - "target": "ops" + "target": "ops stats" + }, + { + "command": "ops stats", + "disposition": "target_noun", + "noun": "ops", + "owner": "pm-6apl", + "target": "ops stats" }, { "command": "telemetry", "disposition": "consolidation", "noun": "ops", "owner": "pm-6apl", - "target": "ops" + "target": "ops telemetry" + }, + { + "command": "ops telemetry", + "disposition": "target_noun", + "noun": "ops", + "owner": "pm-6apl", + "target": "ops telemetry" }, { "command": "test-all", "disposition": "consolidation", "noun": "ops", "owner": "pm-6apl", - "target": "ops" + "target": "ops test-all" + }, + { + "command": "ops test-all", + "disposition": "target_noun", + "noun": "ops", + "owner": "pm-6apl", + "target": "ops test-all" }, { "command": "validate", "disposition": "consolidation", "noun": "ops", "owner": "pm-6apl", - "target": "ops" + "target": "ops validate" + }, + { + "command": "ops validate", + "disposition": "target_noun", + "noun": "ops", + "owner": "pm-6apl", + "target": "ops validate" }, { "command": "assurance list", @@ -24354,10 +25622,42 @@ } ] }, + { + "command": "context focus", + "slots": [ + { + "name": "id", + "polymorphic": false, + "required": false, + "value_kind": "item_id", + "variadic": false + } + ] + }, { "command": "next", "slots": [] }, + { + "command": "context next", + "slots": [] + }, + { + "command": "ctx next", + "slots": [] + }, + { + "command": "ctx focus", + "slots": [ + { + "name": "id", + "polymorphic": false, + "required": false, + "value_kind": "item_id", + "variadic": false + } + ] + }, { "command": "search", "slots": [ @@ -24374,6 +25674,10 @@ "command": "reindex", "slots": [] }, + { + "command": "ops reindex", + "slots": [] + }, { "command": "search-advanced", "slots": [ @@ -24562,6 +25866,10 @@ "command": "events", "slots": [] }, + { + "command": "history events", + "slots": [] + }, { "command": "history-author-acknowledge", "slots": [] @@ -25253,6 +26561,18 @@ } ] }, + { + "command": "ops", + "slots": [] + }, + { + "command": "normalize", + "slots": [] + }, + { + "command": "ops normalize", + "slots": [] + }, { "command": "assurance", "slots": [ @@ -25316,14 +26636,26 @@ "command": "eval", "slots": [] }, + { + "command": "ops eval", + "slots": [] + }, { "command": "gc", "slots": [] }, + { + "command": "ops gc", + "slots": [] + }, { "command": "health", "slots": [] }, + { + "command": "ops health", + "slots": [] + }, { "command": "profile", "slots": [ @@ -25366,6 +26698,10 @@ "command": "stats", "slots": [] }, + { + "command": "ops stats", + "slots": [] + }, { "command": "telemetry", "slots": [ @@ -25385,14 +26721,41 @@ } ] }, + { + "command": "ops telemetry", + "slots": [ + { + "name": "namespace-or-subcommand", + "polymorphic": true, + "required": false, + "value_kind": "action", + "variadic": false + }, + { + "name": "subcommand", + "polymorphic": false, + "required": false, + "value_kind": "action", + "variadic": false + } + ] + }, { "command": "test-all", "slots": [] }, + { + "command": "ops test-all", + "slots": [] + }, { "command": "validate", "slots": [] }, + { + "command": "ops validate", + "slots": [] + }, { "command": "assurance list", "slots": [ @@ -35845,6 +37208,10 @@ "command": "context", "modes": [] }, + { + "command": "context next", + "modes": [] + }, { "command": "contracts", "modes": [ @@ -35916,6 +37283,12 @@ "full" ] }, + { + "command": "history events", + "modes": [ + "full" + ] + }, { "command": "list", "modes": [ @@ -35932,6 +37305,25 @@ "command": "notes", "modes": [] }, + { + "command": "ops health", + "modes": [ + "brief", + "full", + "summary" + ] + }, + { + "command": "ops stats", + "modes": [] + }, + { + "command": "ops validate", + "modes": [ + "counts", + "full" + ] + }, { "command": "package catalog", "modes": [] diff --git a/tests/helpers/cliRunner.ts b/tests/helpers/cliRunner.ts index 6cbe30c2c..c392d65d2 100644 --- a/tests/helpers/cliRunner.ts +++ b/tests/helpers/cliRunner.ts @@ -113,21 +113,29 @@ async function withInProcessCliLock(operation: () => Promise): Promise } } +/** Serialize real CLI execution with captured output and restored process state; accept an instrumented source runner without replacing command behavior. */ export async function runInProcessDistCli( args: string[], options: DirectCliRunOptions = {}, + sourceRunner?: (argv: string[]) => Promise, ): Promise { if (options.input !== undefined || options.stdin !== undefined) { throw new Error("runInProcessDistCli does not support stdin input."); } return withInProcessCliLock(async () => { - const mainModuleUrl = pathToFileURL(path.resolve(process.cwd(), "dist/cli/main.js")); - const cacheBustedUrl = `${mainModuleUrl.href}?inprocess=${Date.now()}-${Math.random().toString(16).slice(2)}`; - const loaded = (await import(cacheBustedUrl)) as { - runPmCli?: (argv: string[]) => Promise; - }; - if (typeof loaded.runPmCli !== "function") { - throw new Error(`dist main module does not export runPmCli: ${cacheBustedUrl}`); + // Share transport capture for packed runtime tests and instrumented source + // tests without replacing handlers, storage, or command behavior. + let runCli = sourceRunner; + if (runCli === undefined) { + const mainModuleUrl = pathToFileURL(path.resolve(process.cwd(), "dist/cli/main.js")); + const cacheBustedUrl = `${mainModuleUrl.href}?inprocess=${Date.now()}-${Math.random().toString(16).slice(2)}`; + const loaded = (await import(cacheBustedUrl)) as { + runPmCli?: (argv: string[]) => Promise; + }; + if (typeof loaded.runPmCli !== "function") { + throw new Error(`dist main module does not export runPmCli: ${cacheBustedUrl}`); + } + runCli = loaded.runPmCli; } let stdout = ""; @@ -170,7 +178,7 @@ export async function runInProcessDistCli( return true; }) as typeof process.stderr.write; - await loaded.runPmCli(args); + await runCli(args); status = process.exitCode ?? 0; } catch (error: unknown) { capturedError = error instanceof Error ? error : new Error(String(error)); diff --git a/tests/integration/ci-workflow-contract.spec.ts b/tests/integration/ci-workflow-contract.spec.ts index aae11f716..8404d9db9 100644 --- a/tests/integration/ci-workflow-contract.spec.ts +++ b/tests/integration/ci-workflow-contract.spec.ts @@ -1,4 +1,5 @@ -import { readFile, writeFile } from "node:fs/promises"; +import { execFileSync } from "node:child_process"; +import { mkdir, readFile, readdir, writeFile } from "node:fs/promises"; import path from "node:path"; import { fileURLToPath } from "node:url"; import fg from "fast-glob"; @@ -10,6 +11,7 @@ import { relativeToRepo, } from "../../scripts/release/static-quality-gate.mts"; import { withTempPmPath } from "../helpers/withTempPmPath.js"; +import { withTempDir } from "../helpers/temp.js"; const repoRoot = path.resolve( path.dirname(fileURLToPath(import.meta.url)), @@ -145,15 +147,21 @@ describe("GitHub workflow contract", () => { benchmarks?: { name?: unknown; "runs-on"?: unknown; - steps?: Array<{ name?: unknown; uses?: unknown; with?: unknown }>; + steps?: Array<{ + name?: unknown; + uses?: unknown; + with?: unknown; + run?: unknown; + }>; }; }; }; const benchmarkJob = parsedWorkflow.jobs?.benchmarks; - const setupNodeStep = benchmarkJob?.steps?.find( + const steps = benchmarkJob?.steps ?? []; + const setupNodeStep = steps.find( (step) => step.name === "Setup Node.js", ); - const codSpeedStep = benchmarkJob?.steps?.find( + const codSpeedStep = steps.find( (step) => typeof step.uses === "string" && step.uses.startsWith("CodSpeedHQ/action@"), @@ -174,6 +182,51 @@ describe("GitHub workflow contract", () => { run: "pnpm vitest bench --run --config vitest.bench.config.ts", }); expect(codSpeedOptions?.mode).not.toBe("walltime"); + + const chromeStepIndex = steps.findIndex( + (step) => step.name === "Disable unused Chrome APT sources", + ); + expect(chromeStepIndex).toBeGreaterThanOrEqual(0); + expect(chromeStepIndex).toBeLessThan(steps.indexOf(codSpeedStep!)); + const chromeScript = steps[chromeStepIndex]?.run; + if (typeof chromeScript !== "string") { + throw new Error("Chrome APT isolation step must provide a shell script"); + } + + // Run the real workflow body with relative fixture paths and no privilege escalation. + const isolatedScript = `sudo() { "$@"; }\n${chromeScript.replaceAll("/etc/apt/sources.list.d", "sources.list.d")}`; + for (const chromeFiles of [ + [], + ["google-chrome.list"], + ["google-chrome.sources"], + ["google-chrome.list", "google-chrome.sources"], + ]) { + await withTempDir("pm-codspeed-apt-", async (root) => { + const sources = path.join(root, "sources.list.d"); + await mkdir(sources); + const retained = ["ubuntu.sources", "microsoft-prod.list"]; + for (const name of [...retained, ...chromeFiles]) { + await writeFile(path.join(sources, name), `source: ${name}\n`); + } + for (let execution = 0; execution < 2; execution += 1) { + execFileSync("bash", ["-euo", "pipefail", "-s"], { + cwd: root, + input: isolatedScript, + encoding: "utf8", + timeout: 10_000, + }); + expect((await readdir(sources)).sort()).toEqual( + [...retained, ...chromeFiles.map((name) => `${name}.disabled`)].sort(), + ); + for (const name of [...retained, ...chromeFiles]) { + const actualName = chromeFiles.includes(name) ? `${name}.disabled` : name; + expect(await readFile(path.join(sources, actualName), "utf8")).toBe( + `source: ${name}\n`, + ); + } + } + }); + } }); it("keeps CI matrix and quality-gate steps aligned with release requirements", async () => { diff --git a/tests/integration/context-ops-namespace.integration.spec.ts b/tests/integration/context-ops-namespace.integration.spec.ts new file mode 100644 index 000000000..433c9c951 --- /dev/null +++ b/tests/integration/context-ops-namespace.integration.spec.ts @@ -0,0 +1,103 @@ +import { mkdir, writeFile } from "node:fs/promises"; +import path from "node:path"; +import { describe, expect, it } from "vitest"; +import { createTaskFixture } from "../helpers/createTaskFixture.js"; +import { withTempPmPath } from "../helpers/withTempPmPath.js"; +import { readSettings, writeSettings } from "../../src/core/store/settings.js"; +import { runPmCli } from "../../src/cli/main.js"; +import { runInProcessDistCli } from "../helpers/cliRunner.js"; + +describe("native context and operations namespaces", () => { + it("suppresses alias guidance for native, machine-readable, quiet, and configured invocations", async () => { + await withTempPmPath(async (context) => { + createTaskFixture(context, "pm-hint-target", "Alias hint target"); + for (const command of ["next", "stats"]) { + const hinted = await runInProcessDistCli([command], { env: context.env }, runPmCli); + expect(hinted.code, hinted.stderr).toBe(0); + expect(hinted.stderr).toContain(`Command \`${command}\` is an alias`); + } + for (const args of [["context", "focus", "--id", "pm-hint-target"], ["fetch", "pm-hint-target"], ["next", "--json"], ["next", "--quiet"]]) { + const result = await runInProcessDistCli(args, { env: context.env }, runPmCli); + expect(result.code, result.stderr).toBe(0); + expect(result.stderr).not.toContain("is an alias"); + } + const settings = await readSettings(context.pmPath); + settings.ux = { ...settings.ux, deprecation_hints: false }; + await writeSettings(context.pmPath, settings); + const suppressed = await runInProcessDistCli(["next"], { env: context.env }, runPmCli); + expect(suppressed.code, suppressed.stderr).toBe(0); + expect(suppressed.stderr).not.toContain("is an alias"); + }); + }); + it("preserves real read results, focus persistence, history events, and default context", async () => { + await withTempPmPath(async (context) => { + context.env.PM_CLOCK = "2026-09-09T00:00:00.000Z"; + context.env.PM_CLOCK_TICK_MS = "0"; + context.env.PM_SEED = "context-ops-namespace"; + createTaskFixture(context, "pm-native-navigation", "Namespace acceptance fixture"); + for (const [noun, verb, args] of [ + ["context", "next", ["--limit", "1"]], + ["context", "focus", []], + ["ops", "stats", []], + ["ops", "validate", ["--check-history-drift"]], + ["history", "events", ["--limit", "1"]], + ] as const) { + const native = context.runCli([noun, verb, ...args, "--json"], { expectJson: true }); + const legacy = context.runCli([verb, ...args, "--json"], { expectJson: true }); + expect(native.code, native.stderr).toBe(0); + expect(legacy.code, legacy.stderr).toBe(0); + expect(native.json).toEqual(legacy.json); + } + const focused = context.runCli(["context", "focus", "--id", "pm-native-navigation", "--json"], { expectJson: true }); + expect(focused.code, focused.stderr).toBe(0); + expect(context.runCli(["context", "--limit", "1", "--json"]).code).toBe(0); + expect(context.runCli(["context", "focus", "--clear", "--json"]).code).toBe(0); + const globals = context.runCli(["--json", "ops", "--quiet", "stats"]); + expect(globals.code, globals.stderr).toBe(0); + for (const [noun, leaves] of [["context", ["focus", "next"]], ["ops", ["gc", "health", "stats", "validate", "telemetry", "eval", "test-all"]], ["history", ["events"]]] as const) { + const help = context.runCli([noun, "--help"]); + expect(help.code, help.stderr).toBe(0); + for (const leaf of leaves) expect(help.stdout).toMatch(new RegExp(`^ ${leaf}(?:\\s|\\[|\\()`, "m")); + } + }); + }); + it("activates package-owned maintenance commands at native and compatibility paths", async () => { + await withTempPmPath(async (context) => { + const source = path.join(context.tempRoot, "maintenance-provider"); + await mkdir(source); + await writeFile(path.join(source, "manifest.json"), JSON.stringify({ name: "maintenance-provider", version: "1.0.0", entry: "index.js", capabilities: ["commands"] })); + await writeFile(path.join(source, "index.js"), `export default { activate(api) { + for (const name of ["normalize", "reindex"]) api.registerCommand({ name, run: () => ({ provider: "maintenance-provider", operation: name }) }); + } };`); + const missing = context.runCli(["contracts", "--command", "ops reindex", "--availability-only", "--json"], { expectJson: true }); + expect(missing.code, missing.stderr).toBe(0); + expect(missing.json).toMatchObject({ action_availability: [expect.objectContaining({ action: "reindex", available: false, disabled_reason: expect.stringContaining("optional") })] }); + for (const [command, packageName] of [["normalize", "audit"], ["reindex", "search-advanced"]]) { + const missingHelp = await runInProcessDistCli(["ops", command, "--help", "--json"], { env: context.env }, runPmCli); + expect(missingHelp.code).toBe(2); + expect(JSON.parse(missingHelp.stderr)).toMatchObject({ + code: "unknown_command", + examples: expect.arrayContaining([`pm install ${packageName}`]), + }); + } + const install = context.runCli(["package", "install", source, "--json"], { expectJson: true }); + expect(install.code, install.stderr).toBe(0); + for (const command of ["normalize", "reindex"]) { + for (const prefix of [[], ["ops"]]) { + const invoked = context.runCli([...prefix, command, "--json"], { expectJson: true }); + expect(invoked.code, invoked.stderr).toBe(0); + expect(invoked.json).toMatchObject({ provider: "maintenance-provider", operation: command }); + const help = context.runCli([...prefix, command, "--help", "--json"], { expectJson: true }); + expect(help.code, help.stderr).toBe(0); + } + const contracts = context.runCli(["contracts", "--command", `ops ${command}`, "--availability-only", "--json"], { expectJson: true }); + expect(contracts.code, contracts.stderr).toBe(0); + expect(contracts.json).toMatchObject({ action_availability: [expect.objectContaining({ action: command, available: true })] }); + const fullContracts = context.runCli(["contracts", "--command", `ops ${command}`, "--full", "--json"], { expectJson: true }); + expect(fullContracts.code, fullContracts.stderr).toBe(0); + expect(fullContracts.json).toMatchObject({ extension_commands: [expect.objectContaining({ command })] }); + } + }); + }); + +}); diff --git a/tests/integration/contract-command-enumeration.integration.spec.ts b/tests/integration/contract-command-enumeration.integration.spec.ts index 7529a64e9..f14495450 100644 --- a/tests/integration/contract-command-enumeration.integration.spec.ts +++ b/tests/integration/contract-command-enumeration.integration.spec.ts @@ -1,4 +1,5 @@ import { describe, expect, it } from "vitest"; +import { PM_COMMAND_ALIAS_CONTRACTS } from "../../src/sdk/cli-contracts/command-aliases.js"; import { listPmCommandsForTier } from "../../src/sdk/agent-capability-contracts.js"; import { withTempPmPath } from "../helpers/withTempPmPath.js"; @@ -62,7 +63,7 @@ describe("contract command enumeration", () => { expect(enumeratedRoots).toEqual(resolvedRoots); expect(helpCommands).toEqual( - [...listPmCommandsForTier("core"), "ctx"].sort(), + [...listPmCommandsForTier("core").filter((command) => !command.includes(" ") && !PM_COMMAND_ALIAS_CONTRACTS.some((alias) => alias.alias === command && alias.hidden)), "ctx"].sort(), ); for (const required of ["context", "search", "list"]) { expect(enumeratedRoots).toContain(required); diff --git a/tests/integration/help-runtime.spec.ts b/tests/integration/help-runtime.spec.ts index f87ef3b62..cdb6aeca6 100644 --- a/tests/integration/help-runtime.spec.ts +++ b/tests/integration/help-runtime.spec.ts @@ -199,7 +199,7 @@ describe("CLI help runtime coverage (sandboxed)", () => { expect(detailedHelp.stdout).toContain( "use --dry-run to preview targets without deleting files", ); - expect(detailedHelp.stdout).toContain("pm gc --dry-run"); + expect(detailedHelp.stdout).toContain("pm ops gc --dry-run"); }); }); diff --git a/tests/integration/release-readiness-runtime.spec.ts b/tests/integration/release-readiness-runtime.spec.ts index 70f522508..927ee5c83 100644 --- a/tests/integration/release-readiness-runtime.spec.ts +++ b/tests/integration/release-readiness-runtime.spec.ts @@ -4,6 +4,7 @@ import path from "node:path"; import { fileURLToPath } from "node:url"; import { describe, expect, it } from "vitest"; import { EXIT_CODE } from "../../src/core/shared/constants.js"; +import { PM_COMMAND_ALIAS_CONTRACTS } from "../../src/sdk/cli-contracts/command-aliases.js"; import { listPmCommandsForTier } from "../../src/sdk/agent-capability-contracts.js"; import { expectJsonErrorEnvelope, @@ -110,7 +111,11 @@ function isValidCalendarDate( ); } -const CORE_COMMANDS = listPmCommandsForTier("core"); +const CORE_COMMANDS = listPmCommandsForTier("core").filter( + (command) => !command.includes(" ") && !PM_COMMAND_ALIAS_CONTRACTS.some( + (alias) => alias.alias === command && alias.hidden, + ), +); const REQUIRED_CREATE_FLAGS = [ "--title", @@ -681,10 +686,10 @@ describe("release readiness runtime coverage", () => { ]); expect(validateHelpInProcess.code).toBe(validateHelpSubprocess.code); expect(validateHelpInProcess.stdout).toContain( - "Usage: pm validate [options]", + "Usage: pm ops validate [options]", ); expect(validateHelpSubprocess.stdout).toContain( - "Usage: pm validate [options]", + "Usage: pm ops validate [options]", ); }); }); @@ -1232,7 +1237,7 @@ describe("release readiness runtime coverage", () => { const validateHelp = context.runCli(["validate", "--help"]); expect(validateHelp.code).toBe(0); - expect(validateHelp.stdout).toContain("Usage: pm validate [options]"); + expect(validateHelp.stdout).toContain("Usage: pm ops validate [options]"); expect(validateHelp.stdout).toContain( "Validate metadata, lifecycle policies, files, command references, and history.", ); @@ -1242,7 +1247,7 @@ describe("release readiness runtime coverage", () => { const healthHelp = context.runCli(["health", "--help"]); expect(healthHelp.code).toBe(0); - expect(healthHelp.stdout).toContain("Usage: pm health [options]"); + expect(healthHelp.stdout).toContain("Usage: pm ops health [options]"); for (const flag of REQUIRED_HEALTH_FLAGS) { expect(healthHelp.stdout).toContain(flag); } diff --git a/tests/unit/cli/command-namespaces.spec.ts b/tests/unit/cli/command-namespaces.spec.ts new file mode 100644 index 000000000..3844f3693 --- /dev/null +++ b/tests/unit/cli/command-namespaces.spec.ts @@ -0,0 +1,100 @@ +import { execFileSync } from "node:child_process"; +import { generateBashScript, generateFishScript, generateZshScript } from "../../../src/sdk/completion.js"; +import { PM_CONTEXT_OPS_COMMAND_ALIASES, resolvePmCommandOperation } from "../../../src/sdk/cli-contracts/command-aliases.js"; +import { resolveSubcommandFlagContractsForCommand } from "../../../src/sdk/cli-contracts/flag-contracts.js"; +import { Command } from "commander"; +import { describe, expect, it } from "vitest"; +import { installCommandNamespaces } from "../../../src/cli/command-namespaces.js"; +import { normalizeBootstrapInvocation } from "../../../src/sdk/cli-bootstrap.js"; +import { _testOnly as mainInternals } from "../../../src/cli/main.js"; + +describe("canonical navigation and operations namespaces", () => { + it("moves existing handlers without copying their argument or option contracts", async () => { + const program = new Command().exitOverride(); + const calls: string[] = []; + const next = program.command("next").option("--limit ").action((options: { limit: string }) => { + calls.push(options.limit); + }); + program.command("context").action(() => { calls.push("context"); }); + installCommandNamespaces(program); + expect(program.commands.map((command) => command.name())).toEqual(["context", "ops"]); + expect(program.commands[0].commands[0]).toBe(next); + await program.parseAsync(["context", "next", "--limit", "3"], { from: "user" }); + expect(calls).toEqual(["3"]); + }); + + it("creates a missing navigation parent and keeps unrelated operation registration selective", () => { + const program = new Command(); + const next = program.command("next"); + installCommandNamespaces(program); + expect(program.commands.find((command) => command.name() === "context")?.commands).toEqual([next]); + expect(mainInternals.resolveCoreCommandRegistrationSelection(["claim", "pm-example"])).toEqual({ + setup: false, listQuery: false, mutation: false, operation: true, targetCommandName: "claim", + }); + expect(normalizeBootstrapInvocation(["help", "--json"]).argv).toEqual(["help", "--json"]); + }); + + it.each([ + ["next", "context", "next"], + ["focus", "context", "focus"], + ["health", "ops", "health"], + ["normalize", "ops", "normalize"], + ["reindex", "ops", "reindex"], + ["events", "history", "events"], + ])("retains the %s invocation through canonical argv", (legacy, noun, verb) => { + expect(normalizeBootstrapInvocation(["help", legacy]).argv).toEqual(["help", noun, verb]); + expect(normalizeBootstrapInvocation([legacy, "--help"]).argv).toEqual([noun, verb, "--help"]); + expect(normalizeBootstrapInvocation(["--pm-path", legacy, legacy]).argv).toEqual(["--pm-path", legacy, noun, verb]); + }); +}); + + +describe("namespace contracts and shell routing", () => { + it("preserves native and legacy SDK flag contracts", () => { + for (const { alias, canonical } of PM_CONTEXT_OPS_COMMAND_ALIASES) { + expect(resolvePmCommandOperation(canonical)).toBe(alias); + expect(resolveSubcommandFlagContractsForCommand(canonical)).toEqual(resolveSubcommandFlagContractsForCommand(alias)); + } + expect(resolvePmCommandOperation(" context unknown ")).toBe("context unknown"); + }); + + it("installs package commands after activation, preserving nested verbs and detecting collisions", async () => { + const program = new Command().exitOverride(); + const calls: string[] = []; + const telemetry = program.command("telemetry"); + telemetry.command("status").action(() => { calls.push("status"); }); + installCommandNamespaces(program); + installCommandNamespaces(program); + await program.parseAsync(["ops", "telemetry", "status"], { from: "user" }); + expect(calls).toEqual(["status"]); + program.command("normalize").option("--dry-run"); + installCommandNamespaces(program); + expect(program.commands[0].commands.map((command) => command.name())).toEqual(["telemetry", "normalize"]); + program.command("normalize"); + expect(() => installCommandNamespaces(program)).toThrow("destination already exists"); + }); + + it("executes Bash completion through namespace and global-option positions", () => { + const pairs = [ + ["context", "next", "--ready-only"], ["context", "focus", "--clear"], + ["ops", "stats", "--storage"], ["ops", "health", "--check-only"], + ["ops", "validate", "--check-history-drift"], ["ops", "gc", "--dry-run"], + ["ops", "test-all", "--timeout"], ["ops", "reindex", "--mode"], + ["history", "events", "--since"], + ]; + const cases = pairs.flatMap(([noun, verb, flag]) => [ + { words: ["pm", noun, verb, "--"], flag }, + { words: ["pm", verb, "--"], flag }, + { words: ["pm", "--pm-path", verb, noun, "--json", verb, "--"], flag }, + ]); + const commands = cases.map(({ words }) => `COMP_WORDS=(${words.map((word) => `'${word}'`).join(" ")}); COMP_CWORD=${words.length - 1}; _pm_completion; printf '%s ' "\${COMPREPLY[@]}"; printf '\\n'`); + const stdout = execFileSync("bash", ["-s"], { input: `${generateBashScript()}\n${commands.join("\n")}`, encoding: "utf8" }); + const rows = stdout.split("\n"); + expect(rows.pop()).toBe(""); + expect(rows).toHaveLength(cases.length); + for (const [index, entry] of cases.entries()) expect(rows[index].trim().split(/\s+/), entry.words.join(" ")).toContain(entry.flag); + for (const script of [generateZshScript(), generateFishScript()]) { + for (const { canonical } of PM_CONTEXT_OPS_COMMAND_ALIASES) expect(script).toContain(canonical); + } + }); +}); diff --git a/tests/unit/commands/completion-command.spec.ts b/tests/unit/commands/completion-command.spec.ts index e21c462e4..1c20784af 100644 --- a/tests/unit/commands/completion-command.spec.ts +++ b/tests/unit/commands/completion-command.spec.ts @@ -545,7 +545,7 @@ describe("generateBashScript", () => { for (const command of ["history", "activity", "events"]) { expect(bash).toContain(` ${command})`); expect(zsh).toContain(` ${command})`); - expect(fish).toContain(command === "activity" ? "__pm_history_operation activity activity" : `__fish_seen_subcommand_from ${command}`); + expect(fish).toContain(command === "activity" ? "__pm_history_operation activity activity" : `__pm_history_operation ${command}`); } for (const flag of flags) { expect(bash).toContain(`--${flag}`); @@ -798,12 +798,12 @@ describe("generateZshScript", () => { expect(script).toContain("ctx:Alias for context"); expect(script).not.toContain("history-compact:Compact"); expect(script).not.toContain("history-redact:Redact"); - expect(script).toContain("history_commands=(redact repair compact activity restore)"); + expect(script).toContain("history_commands=(redact repair compact activity restore events)"); expect(script).toContain("plan:Agent-optimized Plan item workflow"); expect(script).toContain("notes:List or add notes for an item"); expect(script).toContain("learnings:List or add learnings for an item"); expect(script).toContain("deps:Show dependency relationships for an item"); - expect(script).toContain("validate:Run standalone validation checks"); + expect(script).toContain('"ops validate")'); }); it("includes type completions for relevant flags", () => { @@ -1058,8 +1058,7 @@ describe("generateFishScript", () => { ["completion", "Generate shell completion"], ["guide", "progressive-disclosure guides"], ["contracts", "machine-readable command and schema contracts"], - ["health", "project tracker health"], - ["stats", "project tracker statistics"], + ["ops", "Workspace maintenance and diagnostics"], ["history", "Show item history entries"], ["plan", "Agent-optimized Plan workflow"], ] as [string, string][]) { @@ -1176,12 +1175,12 @@ describe("generateFishScript", () => { it("includes strict health flags in fish completion", () => { const script = generateFishScript(); - expect(script).toContain("__fish_seen_subcommand_from health"); + expect(script).toContain("__pm_history_operation health"); expect(script).toContain("-l strict-directories"); expect(script).toContain("-l verbose-stale-items"); expect(script).toContain("-l brief"); expect(script).toContain( - "complete -c pm -n '__fish_seen_subcommand_from health' -l summary -d 'Emit one-line-style health status with check names and warning count'", + "complete -c pm -n '__pm_history_operation health' -l summary -d 'Emit one-line-style health status with check names and warning count'", ); expect(script).toContain("-l strict-exit"); expect(script).toContain("-l fail-on-warn"); @@ -1192,12 +1191,12 @@ describe("generateFishScript", () => { expect(script).toContain("__fish_seen_subcommand_from test"); expect(script).toContain("-l override-linked-pm-context"); expect(script).toContain("-l fail-on-empty-test-run"); - expect(script).toContain("__fish_seen_subcommand_from test-all"); + expect(script).toContain("__pm_history_operation test-all"); }); it("includes test-all pagination flags in fish completion", () => { const script = generateFishScript(); - expect(script).toContain("__fish_seen_subcommand_from test-all"); + expect(script).toContain("__pm_history_operation test-all"); expect(script).toContain( "-l limit -d 'Limit matching items before running linked tests'", ); @@ -1246,7 +1245,7 @@ describe("generateFishScript", () => { it("includes fish context completions", () => { const script = generateFishScript(); - expect(script).toContain("__fish_seen_subcommand_from context ctx"); + expect(script).toContain("__pm_history_operation context"); expect(script).toContain("-l from"); expect(script).toContain("-l to"); expect(script).toContain("-l past"); @@ -1357,6 +1356,7 @@ describe("runCompletion", () => { command_flags: { list: ["--customer_segment", "--alpha_segment"], search: ["--customer_segment"], + context: ["--context_segment"], }, } satisfies CompletionRuntimeConfig; @@ -1407,6 +1407,15 @@ describe("runCompletion", () => { expect(fishResult.script).toContain( "-l customer-segment -d 'Runtime schema field flag' -r", ); + expect(fishResult.script).toContain( + "complete -c pm -n '__pm_history_operation context' -l context-segment -d 'Runtime schema field flag' -r", + ); + expect(fishResult.script).not.toContain( + "__fish_seen_subcommand_from context' -l context-segment", + ); + expect(fishResult.script).not.toContain( + "__fish_seen_subcommand_from ctx' -l context-segment", + ); }); it("deduplicates runtime flags after underscore normalization", () => { diff --git a/tests/unit/commands/contracts-command.spec.ts b/tests/unit/commands/contracts-command.spec.ts index 2cfe66ea4..de3a9de77 100644 --- a/tests/unit/commands/contracts-command.spec.ts +++ b/tests/unit/commands/contracts-command.spec.ts @@ -1155,7 +1155,7 @@ describe("contracts command runtime", () => { default_max_estimated_tokens: 4000, }), expect.objectContaining({ - command: "next", + command: "context next", flags: [ "--limit", "--blocked-limit", diff --git a/tests/unit/scripts/measure-agent-token-surface.spec.ts b/tests/unit/scripts/measure-agent-token-surface.spec.ts index f40b31a75..761a2e99f 100644 --- a/tests/unit/scripts/measure-agent-token-surface.spec.ts +++ b/tests/unit/scripts/measure-agent-token-surface.spec.ts @@ -25,9 +25,11 @@ const LS_HELP = "Usage: pm ls [options] — a deliberately longer help payload for sorting"; const GET_HELP_STDOUT = "GET HELP VIA STDOUT"; const ACTION_HELP = "POSITIONAL ACTION HELP"; -const ACTION_COMMAND_NAMES = PM_POSITIONAL_ACTION_CONTRACTS.map( - ({ command }) => command, -); +const SCOPED_COMMAND_NAMES = [ + ...PM_POSITIONAL_ACTION_CONTRACTS.map(({ command }) => command), + "context next", + "ops validate", +]; const CONTRACTS = { summary_toon: "SUMMARY-TOON", summary_json: "SUMMARY-JSON-PAYLOAD", @@ -40,17 +42,14 @@ interface ExecOverrides { lsHelp?: () => string; } -function keyOf(args: readonly string[]): string { - return args.join(" "); -} - +/** Model measured CLI outputs and stdout-bearing usage failures while rejecting undeclared command invocations. */ function createExecFileSync(overrides: ExecOverrides = {}) { return vi.fn((_command: string, args: readonly string[]) => { const commandArgs = args[0]?.endsWith("dist/cli.js") || args[0]?.endsWith("dist\\cli.js") ? args.slice(1) : args; - const key = keyOf(commandArgs); + const key = commandArgs.join(" "); if (key === "--version") return "9.9.9-test\n"; if (key === "--help --no-pager") return ROOT_HELP; if (key === "ls --help --no-pager") { @@ -60,7 +59,7 @@ function createExecFileSync(overrides: ExecOverrides = {}) { throw Object.assign(new Error("exit 2"), { stdout: GET_HELP_STDOUT }); } if ( - ACTION_COMMAND_NAMES.some( + SCOPED_COMMAND_NAMES.some( (command) => key === `${command} --help --no-pager`, ) ) { @@ -87,6 +86,7 @@ interface FakeMcpChild { spawn: ReturnType; } +/** Expose request-driven MCP stdout and process events so timeout, malformed response, and child-failure paths can be controlled independently. */ function createMcpChild( onRequest: (child: FakeMcpChild["child"]) => void, ): FakeMcpChild { @@ -99,6 +99,7 @@ function createMcpChild( return { child, spawn }; } +/** Replace both subprocess entrypoints together so measurement fixtures cannot launch undeclared real commands. */ function mockChildProcess( execFileSync: ReturnType, spawn: ReturnType, @@ -106,6 +107,7 @@ function mockChildProcess( vi.doMock("node:child_process", () => ({ execFileSync, spawn })); } +/** Connect deterministic CLI responses and a valid MCP tools list as the baseline for contract mutation tests. */ function configureSuccessfulMeasurement(): void { const execFileSync = createExecFileSync(); const { spawn } = createMcpChild((mcp) => { @@ -121,6 +123,7 @@ function configureSuccessfulMeasurement(): void { mockChildProcess(execFileSync, spawn); } +/** Build a complete high-ceiling fixture so each negative test can isolate the baseline contract it invalidates. */ function permissiveBaseline(overrides: Record = {}): string { return JSON.stringify({ version: 2, @@ -138,9 +141,9 @@ function permissiveBaseline(overrides: Record = {}): string { bounded_full: 1_000_000, }, commands: Object.fromEntries( - ["ls", "get", ...ACTION_COMMAND_NAMES].map((name) => [name, 1_000_000]), + ["ls", "get", ...SCOPED_COMMAND_NAMES].map((name) => [name, 1_000_000]), ), - required_commands: ["get", "ls", ...ACTION_COMMAND_NAMES].sort( + required_commands: ["get", "ls", ...SCOPED_COMMAND_NAMES].sort( (left, right) => left.localeCompare(right), ), }, @@ -179,6 +182,7 @@ interface TokenSurfaceModule { compareBaseline: (report: Report, baseline: TokenSurfaceBaseline) => string[]; } +/** Execute the measurement script through the isolated module harness and decode its terminal JSON report. */ async function importAndCaptureReport(): Promise { const stdoutWrite = vi .spyOn(process.stdout, "write") @@ -189,6 +193,7 @@ async function importAndCaptureReport(): Promise { return JSON.parse(payload) as Report; } +/** Capture a measurement report alongside the real baseline builder and comparator exports for contract assertions. */ async function importAndCaptureModule(): Promise<{ report: Report; module: TokenSurfaceModule; @@ -236,12 +241,12 @@ describe("measure-agent-token-surface", () => { }); // "help" is filtered, the alias line contributes only its primary name, and // the deeper-indented continuation line is skipped without ending the scan. - expect(report.command_count).toBe(2 + ACTION_COMMAND_NAMES.length); + expect(report.command_count).toBe(2 + SCOPED_COMMAND_NAMES.length); expect(report.commands.map((entry) => entry.name)).toEqual( - expect.arrayContaining(["ls", "get"]), + expect.arrayContaining(["ls", "get", "context next", "ops validate"]), ); expect(report.commands.map((entry) => entry.name)).toEqual( - expect.arrayContaining(ACTION_COMMAND_NAMES), + expect.arrayContaining(SCOPED_COMMAND_NAMES), ); expect(report.commands.find(({ name }) => name === "get")?.bytes).toBe( Buffer.byteLength(GET_HELP_STDOUT), @@ -249,7 +254,7 @@ describe("measure-agent-token-surface", () => { const perCommand = Buffer.byteLength(LS_HELP) + Buffer.byteLength(GET_HELP_STDOUT) + - ACTION_COMMAND_NAMES.length * Buffer.byteLength(ACTION_HELP); + SCOPED_COMMAND_NAMES.length * Buffer.byteLength(ACTION_HELP); expect(report.per_command_total.bytes).toBe(perCommand); expect(report.full_help_surface).toEqual({ bytes: rootBytes + perCommand, @@ -322,7 +327,7 @@ describe("measure-agent-token-surface", () => { 1, ); expect(coreBaseline.surfaces.required_commands).toEqual( - ["get", "list", ...ACTION_COMMAND_NAMES].sort((left, right) => + ["get", "list", ...SCOPED_COMMAND_NAMES].sort((left, right) => left.localeCompare(right), ), ); @@ -373,7 +378,7 @@ describe("measure-agent-token-surface", () => { report, incompleteBaseline, ); - expect(incompleteViolations).toHaveLength(6 + ACTION_COMMAND_NAMES.length); + expect(incompleteViolations).toHaveLength(6 + SCOPED_COMMAND_NAMES.length); expect(incompleteViolations).toEqual( expect.arrayContaining([ "contracts.summary_toon: missing baseline", @@ -385,7 +390,7 @@ describe("measure-agent-token-surface", () => { surfaces: undefined, } as unknown as TokenSurfaceBaseline); expect(missingSurfaceViolations).toHaveLength( - 10 + ACTION_COMMAND_NAMES.length, + 10 + SCOPED_COMMAND_NAMES.length, ); expect(missingSurfaceViolations).toContain( "commands.get: missing baseline", @@ -449,7 +454,7 @@ describe("measure-agent-token-surface", () => { "utf8", ); expect(stdoutWrite).toHaveBeenCalledWith( - `Agent token-surface gate passed (${11 + ACTION_COMMAND_NAMES.length} surfaces).\n`, + `Agent token-surface gate passed (${11 + SCOPED_COMMAND_NAMES.length} surfaces).\n`, ); } finally { stdoutWrite.mockRestore(); diff --git a/tests/unit/scripts/release/docs-skills-gate.spec.ts b/tests/unit/scripts/release/docs-skills-gate.spec.ts index 7f2318afb..7c122c68f 100644 --- a/tests/unit/scripts/release/docs-skills-gate.spec.ts +++ b/tests/unit/scripts/release/docs-skills-gate.spec.ts @@ -1098,12 +1098,16 @@ describe("docs-skills-gate", () => { mockUtilsWithRepo(fixtureRoot, runCommand); const scriptPath = path.join(process.cwd(), "scripts/release/docs-skills-gate.mjs"); process.argv = ["node", scriptPath, "--json"]; - const stdoutSpy = vi.spyOn(process.stdout, "write").mockImplementation(() => true); - await harness.importModuleStable("scripts/release/docs-skills-gate.mjs"); - await harness.waitForCondition(() => { - expect(stdoutSpy).toHaveBeenCalled(); + // The real gate can outlive a short polling deadline under coverage. + // Await its terminal output before fixture cleanup restores process state. + const output = new Promise((resolve) => { + vi.spyOn(process.stdout, "write").mockImplementation((chunk) => { + resolve(String(chunk)); + return true; + }); }); - const payload = JSON.parse(String(stdoutSpy.mock.calls.at(-1)?.[0] ?? "{}")) as { + await harness.importModuleStable("scripts/release/docs-skills-gate.mjs"); + const payload = JSON.parse(await output) as { ok: boolean; checks: { mode: string }; failures: string[]; @@ -1124,12 +1128,16 @@ describe("docs-skills-gate", () => { mockUtilsWithRepo(fixtureRoot, runCommand); const scriptPath = path.join(process.cwd(), "scripts/release/docs-skills-gate.mjs"); process.argv = ["node", scriptPath, "--links-only", "--json"]; - const stdoutSpy = vi.spyOn(process.stdout, "write").mockImplementation(() => true); - await harness.importModuleStable("scripts/release/docs-skills-gate.mjs"); - await harness.waitForCondition(() => { - expect(stdoutSpy).toHaveBeenCalled(); + // The real gate can outlive a short polling deadline under coverage. + // Await its terminal output before fixture cleanup restores process state. + const output = new Promise((resolve) => { + vi.spyOn(process.stdout, "write").mockImplementation((chunk) => { + resolve(String(chunk)); + return true; + }); }); - const payload = JSON.parse(String(stdoutSpy.mock.calls.at(-1)?.[0] ?? "{}")) as { + await harness.importModuleStable("scripts/release/docs-skills-gate.mjs"); + const payload = JSON.parse(await output) as { ok: boolean; checks: { mode: string }; failures: string[]; diff --git a/tests/unit/sdk/cli-contracts/grammar-contracts.spec.ts b/tests/unit/sdk/cli-contracts/grammar-contracts.spec.ts index a1bbe53e1..9ca4a058b 100644 --- a/tests/unit/sdk/cli-contracts/grammar-contracts.spec.ts +++ b/tests/unit/sdk/cli-contracts/grammar-contracts.spec.ts @@ -29,15 +29,15 @@ describe("CLI noun-verb grammar contracts", () => { ok: true, command_count: commands.length, destination_count: commands.length, - hidden_alias_count: 15, - visible_top_level_count: 53, + hidden_alias_count: 27, + visible_top_level_count: 44, visible_top_level_ceiling: PM_CLI_GRAMMAR_CONTRACT.visible_top_level_ceiling, }); expect( verifyPmCliGrammar([...commands, "list-open"], PM_COMMAND_ALIAS_CONTRACTS) .visible_top_level_count, - ).toBe(53); + ).toBe(44); expect(new Set(PM_CLI_GRAMMAR_NOUNS).size).toBe(12); }); @@ -84,6 +84,14 @@ describe("CLI noun-verb grammar contracts", () => { }), ]), ); + expect(verifyPmCliGrammar([], [{ + ...PM_COMMAND_ALIAS_CONTRACTS[0]!, + alias: "orphan-alias", + canonical: "missing destination", + canonical_argv: ["missing", "destination"], + }], []).findings).toContainEqual(expect.objectContaining({ + code: "alias_target_missing", spelling: "orphan-alias", + })); }); it("allows inactive package rows while rejecting undeclared active commands", () => { diff --git a/tests/unit/sdk/contracts-full-projection.spec.ts b/tests/unit/sdk/contracts-full-projection.spec.ts index ab48e618f..27c0bf48b 100644 --- a/tests/unit/sdk/contracts-full-projection.spec.ts +++ b/tests/unit/sdk/contracts-full-projection.spec.ts @@ -34,7 +34,7 @@ describe("full contracts projection monotonicity", () => { ); const compactCommands = new Set(summary.command_summaries?.map((entry) => entry.command)); expect(full.command_summaries?.filter((entry) => !compactCommands.has(entry.command)).map((entry) => entry.command)).toEqual([ - "activity", "history-compact", "history-redact", "history-repair", "restore", + "activity", "ctx", "eval", "events", "focus", "gc", "health", "history-compact", "history-redact", "history-repair", "next", "packages", "restore", "stats", "telemetry", "test-all", "validate", ]); expect(summary.command_summaries).toEqual( expect.arrayContaining([