From 3bf8ca590c6683fcc0c3da6e9191b2bec482db0a Mon Sep 17 00:00:00 2001 From: SteveBot <1153461+unbraind@users.noreply.github.com> Date: Sat, 25 Jul 2026 13:56:45 +0200 Subject: [PATCH 1/2] chore(governance): enable duplicate-detection advisory mode and adopt pm-cli 2026.7.25 --- .agents/pm/chores/pm-github-suxt.toon | 18 +++ .agents/pm/history/_workspace.jsonl | 1 + .agents/pm/history/pm-github-suxt.jsonl | 4 + .agents/pm/settings.json | 48 ++++++- CHANGELOG.md | 6 + package-lock.json | 182 ++++++++++++------------ package.json | 2 +- 7 files changed, 162 insertions(+), 99 deletions(-) create mode 100644 .agents/pm/chores/pm-github-suxt.toon create mode 100644 .agents/pm/history/_workspace.jsonl create mode 100644 .agents/pm/history/pm-github-suxt.jsonl diff --git a/.agents/pm/chores/pm-github-suxt.toon b/.agents/pm/chores/pm-github-suxt.toon new file mode 100644 index 00000000..0c6c65b4 --- /dev/null +++ b/.agents/pm/chores/pm-github-suxt.toon @@ -0,0 +1,18 @@ +id: pm-github-suxt +title: Enable governance duplicate-detection advisory mode and adopt pm-cli 2026.7.25 +description: "Enable governance.duplicate_detection_mode=advisory so agents filing items get a near-duplicate warning at create time. Bump @unbrained/pm-cli devDependency to ^2026.7.25 (peerDependencies left at >=2026.7.20 as intentionally wider). Advisory mode is non-blocking: appends likely_duplicates warning, never fails a create." +type: Chore +status: closed +priority: 2 +tags: [] +created_at: "2026-07-25T11:56:35.437Z" +updated_at: "2026-07-25T11:56:43.038Z" +closed_at: "2026-07-25T11:56:43.037Z" +author: pi-agent +resolution: Enabled advisory duplicate detection and bumped pm-cli dependency; advisory is non-blocking by design +expected_result: "Second identical create in a throwaway probe workspace returns warnings array containing likely_duplicates:; all repo gates pass" +actual_result: "Observed warning: likely_duplicates:pm-github-x9et. Gates: typecheck=pass, test=168/168 pass, changelog:full=ok, changelog:check=ok" +notes[1]{created_at,author,text}: + "2026-07-25T11:56:42.728Z",pi-agent,"likely_duplicates:pm-github-x9et" +close_reason: Enabled advisory duplicate detection and bumped pm-cli dependency; advisory is non-blocking by design +body: "" diff --git a/.agents/pm/history/_workspace.jsonl b/.agents/pm/history/_workspace.jsonl new file mode 100644 index 00000000..7b4508d9 --- /dev/null +++ b/.agents/pm/history/_workspace.jsonl @@ -0,0 +1 @@ +{"ts":"2026-07-25T11:54:53.304Z","author":"codex","author_source":"asserted","op":"config:set:governance.duplicate_detection_mode","patch":[{"op":"add","path":"/metadata/id","value":"_workspace"},{"op":"add","path":"/metadata/title","value":"Workspace state"},{"op":"add","path":"/metadata/description","value":"Audited singleton workspace document state."},{"op":"add","path":"/metadata/type","value":"Chore"},{"op":"add","path":"/metadata/status","value":"open"},{"op":"add","path":"/metadata/priority","value":2},{"op":"add","path":"/metadata/tags","value":["workspace-history"]},{"op":"add","path":"/metadata/created_at","value":"2026-07-25T11:54:53.304Z"},{"op":"add","path":"/metadata/updated_at","value":"2026-07-25T11:54:53.304Z"},{"op":"add","path":"/metadata/documents","value":{"settings.json":{"version":1,"id_prefix":"pm-github-","ids":{"token_length":4},"author_default":"codex","mutation_guard":{"require_attributed_author":false,"secret_guard":"advise","stale_in_progress_hours":72},"item_format":"toon","locks":{"ttl_seconds":1800,"wait_ms":3000},"checkpoints":{"retention_days":14},"output":{"default_format":"toon"},"history":{"missing_stream":"auto_create","compact_policy":{"enabled":false,"max_entries":500,"trigger":"health_warn"}},"validation":{"sprint_release_format":"warn","parent_reference":"strict_error","metadata_profile":"core","metadata_required_fields":[],"lifecycle_stale_blocker_reason_patterns":["no active blocker","ready for planned execution sequencing","work completed","work is closed"],"lifecycle_closure_like_blocked_reason_patterns":["no active blocker because work is closed","work is closed"],"lifecycle_closure_like_resolution_patterns":["closed with implementation evidence","closed with verification evidence","work completed and recorded","work is closed"],"lifecycle_closure_like_actual_result_patterns":["closed and recorded","work completed","work completed and recorded"],"estimate_defaults_by_type":{}},"governance":{"preset":"default","duplicate_detection_mode":"advisory","duplicate_detection_threshold":0.8,"duplicate_detection_limit":3},"workflow":{"definition_of_done":[]},"testing":{"record_results_to_items":false},"telemetry":{"enabled":true,"first_run_prompt_completed":false,"capture_level":"redacted","endpoint":"https://pm-cli.unbrained.dev/v1/events","installation_id":"","retention_days":365},"agent_guidance":{"prompt_completed":true,"declined":true,"declined_at":"2026-05-26T11:08:03.813Z","template_version":1,"last_checked_files":["AGENTS.md","CLAUDE.md"]},"item_types":{"definitions":[]},"schema":{"version":1,"files":{"types":"schema/types.json","statuses":"schema/statuses.json","fields":"schema/fields.json","workflows":"schema/workflows.json"},"statuses":[{"id":"draft","roles":["draft"],"order":0},{"id":"open","roles":["active","default_open"],"order":1},{"id":"in_progress","roles":["active"],"order":2},{"id":"blocked","roles":["blocked"],"order":3},{"id":"closed","roles":["default_close","terminal","terminal_done"],"order":4},{"id":"canceled","aliases":["cancelled"],"roles":["default_cancel","terminal","terminal_canceled"],"order":5}],"fields":[],"workflow":{"draft_status":"draft","open_status":"open","in_progress_status":"in_progress","blocked_status":"blocked","close_status":"closed","canceled_status":"canceled"},"unknown_field_policy":"allow"},"context":{"default_depth":"brief","activity_limit":10,"stale_threshold_days":7,"sections":{"hierarchy":true,"activity":true,"progress":true,"blockers":true,"files":true,"workload":true,"staleness":true,"tests":true,"recently_created":true,"unparented":true}},"extensions":{"enabled":[],"disabled":[],"policy":{"mode":"off","trust_mode":"off","require_provenance":false,"trusted_extensions":[],"default_sandbox_profile":"none","allowed_extensions":[],"blocked_extensions":[],"allowed_capabilities":[],"blocked_capabilities":[],"allowed_surfaces":[],"blocked_surfaces":[],"allowed_commands":[],"blocked_commands":[],"allowed_actions":[],"blocked_actions":[],"allowed_services":[],"blocked_services":[],"extension_overrides":[]}},"search":{"score_threshold":0,"hybrid_semantic_weight":0.7,"max_results":50,"embedding_model":"","embedding_batch_size":32,"embedding_timeout_ms":30000,"scanner_max_batch_retries":3,"provider":"","mutation_refresh_policy":"semantic_configured","query_expansion":{"enabled":false,"provider":""},"rerank":{"enabled":false,"model":"","top_k":20}},"providers":{"openai":{"base_url":"","api_key":"","model":""},"ollama":{"base_url":"","model":""}},"vector_store":{"adapter":"","collection_name":"pm_items","qdrant":{"url":"","api_key":""},"lancedb":{"path":""}}}}}],"before_hash":"3cc22dff72be7b14824654a7a64ea62b04799939b2fee54c1b5f52ca60bf6df0","after_hash":"752c88ceff1fab61945e3f52886422189d3b21f5c84fe68672d9bcee1cf7bba3"} diff --git a/.agents/pm/history/pm-github-suxt.jsonl b/.agents/pm/history/pm-github-suxt.jsonl new file mode 100644 index 00000000..985a926b --- /dev/null +++ b/.agents/pm/history/pm-github-suxt.jsonl @@ -0,0 +1,4 @@ +{"ts":"2026-07-25T11:56:35.437Z","author":"pi-agent","author_source":"asserted","op":"create","patch":[{"op":"add","path":"/metadata/id","value":"pm-github-suxt"},{"op":"add","path":"/metadata/title","value":"Enable governance duplicate-detection advisory mode and adopt pm-cli 2026.7.25"},{"op":"add","path":"/metadata/description","value":"Enable governance.duplicate_detection_mode=advisory so agents filing items get a near-duplicate warning at create time. Bump @unbrained/pm-cli devDependency to ^2026.7.25 (peerDependencies left at >=2026.7.20 as intentionally wider). Advisory mode is non-blocking: appends likely_duplicates warning, never fails a create."},{"op":"add","path":"/metadata/type","value":"Chore"},{"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-07-25T11:56:35.437Z"},{"op":"add","path":"/metadata/updated_at","value":"2026-07-25T11:56:35.437Z"},{"op":"add","path":"/metadata/author","value":"pi-agent"}],"before_hash":"3cc22dff72be7b14824654a7a64ea62b04799939b2fee54c1b5f52ca60bf6df0","after_hash":"e77234c0c954474b962c75fbe42b6a2c962a2891766cd1798ec5f7f88b8af052","message":""} +{"ts":"2026-07-25T11:56:42.408Z","author":"pi-agent","author_source":"asserted","op":"update","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-07-25T11:56:42.408Z"},{"op":"replace","path":"/metadata/status","value":"in_progress"}],"before_hash":"e77234c0c954474b962c75fbe42b6a2c962a2891766cd1798ec5f7f88b8af052","after_hash":"5f3d316bfcb45dc7be1a33fceb2e6cccf4936e48821e71f251564fd9d2f41f43"} +{"ts":"2026-07-25T11:56:42.728Z","author":"pi-agent","author_source":"asserted","op":"note_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-07-25T11:56:42.728Z"},{"op":"add","path":"/metadata/notes","value":[{"created_at":"2026-07-25T11:56:42.728Z","author":"pi-agent","text":"likely_duplicates:pm-github-x9et"}]}],"before_hash":"5f3d316bfcb45dc7be1a33fceb2e6cccf4936e48821e71f251564fd9d2f41f43","after_hash":"38898b3793d200ff4077a30ea82e04d255b0bf62a2e726d71dd860679d1711d2"} +{"ts":"2026-07-25T11:56:43.038Z","author":"pi-agent","author_source":"asserted","op":"close","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-07-25T11:56:43.038Z"},{"op":"replace","path":"/metadata/status","value":"closed"},{"op":"add","path":"/metadata/closed_at","value":"2026-07-25T11:56:43.037Z"},{"op":"add","path":"/metadata/resolution","value":"Enabled advisory duplicate detection and bumped pm-cli dependency; advisory is non-blocking by design"},{"op":"add","path":"/metadata/expected_result","value":"Second identical create in a throwaway probe workspace returns warnings array containing likely_duplicates:; all repo gates pass"},{"op":"add","path":"/metadata/actual_result","value":"Observed warning: likely_duplicates:pm-github-x9et. Gates: typecheck=pass, test=168/168 pass, changelog:full=ok, changelog:check=ok"},{"op":"add","path":"/metadata/close_reason","value":"Enabled advisory duplicate detection and bumped pm-cli dependency; advisory is non-blocking by design"}],"before_hash":"38898b3793d200ff4077a30ea82e04d255b0bf62a2e726d71dd860679d1711d2","after_hash":"5d90cf267951663c5b507190812a2b5fd9eaf547c1c7608df7fbfec4a2b27e72"} diff --git a/.agents/pm/settings.json b/.agents/pm/settings.json index 8f17f4a6..2a71fd4c 100644 --- a/.agents/pm/settings.json +++ b/.agents/pm/settings.json @@ -1,20 +1,37 @@ { "version": 1, "id_prefix": "pm-github-", + "ids": { + "token_length": 4 + }, "author_default": "codex", + "mutation_guard": { + "require_attributed_author": false, + "secret_guard": "advise", + "stale_in_progress_hours": 72 + }, "item_format": "toon", "locks": { - "ttl_seconds": 1800 + "ttl_seconds": 1800, + "wait_ms": 3000 + }, + "checkpoints": { + "retention_days": 14 }, "output": { "default_format": "toon" }, "history": { - "missing_stream": "auto_create" + "missing_stream": "auto_create", + "compact_policy": { + "enabled": false, + "max_entries": 500, + "trigger": "health_warn" + } }, "validation": { "sprint_release_format": "warn", - "parent_reference": "warn", + "parent_reference": "strict_error", "metadata_profile": "core", "metadata_required_fields": [], "lifecycle_stale_blocker_reason_patterns": [ @@ -37,10 +54,14 @@ "closed and recorded", "work completed", "work completed and recorded" - ] + ], + "estimate_defaults_by_type": {} }, "governance": { - "preset": "default" + "preset": "default", + "duplicate_detection_mode": "advisory", + "duplicate_detection_threshold": 0.8, + "duplicate_detection_limit": 3 }, "workflow": { "definition_of_done": [] @@ -152,7 +173,9 @@ "files": true, "workload": true, "staleness": true, - "tests": true + "tests": true, + "recently_created": true, + "unparented": true } }, "extensions": { @@ -187,7 +210,17 @@ "embedding_batch_size": 32, "embedding_timeout_ms": 30000, "scanner_max_batch_retries": 3, - "provider": "" + "provider": "", + "mutation_refresh_policy": "semantic_configured", + "query_expansion": { + "enabled": false, + "provider": "" + }, + "rerank": { + "enabled": false, + "model": "", + "top_k": 20 + } }, "providers": { "openai": { @@ -202,6 +235,7 @@ }, "vector_store": { "adapter": "", + "collection_name": "pm_items", "qdrant": { "url": "", "api_key": "" diff --git a/CHANGELOG.md b/CHANGELOG.md index 6da64626..5b65d02d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## Unreleased + +### Other + +- Enable governance duplicate-detection advisory mode and adopt pm-cli 2026.7.25 ([pm-github-suxt](https://github.com/unbraind/pm-github/blob/main/.agents/pm/chores/pm-github-suxt.toon)) + ## 2026.7.25 - 2026-07-25 ### Added diff --git a/package-lock.json b/package-lock.json index 39c509b6..443c48da 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "devDependencies": { "@types/node": "^26.1.1", - "@unbrained/pm-cli": "^2026.7.22", + "@unbrained/pm-cli": "^2026.7.25", "pm-changelog": "^2026.7.24", "typescript": "^7.0.2" }, @@ -22,9 +22,9 @@ } }, "node_modules/@apm-js-collab/code-transformer": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@apm-js-collab/code-transformer/-/code-transformer-0.15.0.tgz", - "integrity": "sha512-XmXYVs8CzJ1Aj79noVbn2weUO/XWtRyURpGqx7aU7DOXlUQhR0WKOQNF0okh7PCeY37vxf7kU3v57OAkEPm3ww==", + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/@apm-js-collab/code-transformer/-/code-transformer-0.18.1.tgz", + "integrity": "sha512-u1Hb6bHjWtkSpiprwVP6YaHC1DTN4RAU3zYkUDUe7WMnJwdyU1pwTL9dFKiSJB9IiLue/EQovmyx6xhU7FFtAQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -40,13 +40,13 @@ } }, "node_modules/@apm-js-collab/code-transformer-bundler-plugins": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@apm-js-collab/code-transformer-bundler-plugins/-/code-transformer-bundler-plugins-0.5.0.tgz", - "integrity": "sha512-YxLBY5nGlurL7QeJLq6e5g0ouBpAp0pwgyA/5rHXEXwhiPLn9ZHbT+Y2LlP90GT872cSocfjWRYu/fnpuBudNQ==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@apm-js-collab/code-transformer-bundler-plugins/-/code-transformer-bundler-plugins-0.7.2.tgz", + "integrity": "sha512-GvpKWDmzBFzbtVElU+tEDMDYyMY8SnMH4NNwwlUQioNHZvE6sSuHEqNkfU3iYhWL+/XO5Ej+MzhVJoqM10NYCQ==", "dev": true, "license": "MIT", "dependencies": { - "@apm-js-collab/code-transformer": "^0.15.0", + "@apm-js-collab/code-transformer": "^0.18.0", "es-module-lexer": "^2.1.0", "magic-string": "^0.30.21", "module-details-from-path": "^1.0.4" @@ -56,13 +56,13 @@ } }, "node_modules/@apm-js-collab/tracing-hooks": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@apm-js-collab/tracing-hooks/-/tracing-hooks-0.10.1.tgz", - "integrity": "sha512-w2OWXR7FWrKqSziuE9+QclaZrStxO/8+OwbXM635s/zs0Eez1Qo3ivSPdB2WsaPY/iznKTytONPx/PitD7IXcA==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@apm-js-collab/tracing-hooks/-/tracing-hooks-0.13.0.tgz", + "integrity": "sha512-mTvWz9rnQwx1U3h0XPTHaX7bgfkpipLLTQyjlC2cdhQpQEuoLT0AGzoydeoq2NxfEVv6fWOOETcSbb2nptleyw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@apm-js-collab/code-transformer": "^0.15.0", + "@apm-js-collab/code-transformer": "^0.18.0", "debug": "^4.4.1", "module-details-from-path": "^1.0.4" } @@ -123,9 +123,9 @@ } }, "node_modules/@opentelemetry/api-logs": { - "version": "0.214.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.214.0.tgz", - "integrity": "sha512-40lSJeqYO8Uz2Yj7u94/SJWE/wONa7rmMKjI1ZcIjgf3MHNHv1OZUCrCETGuaRF62d5pQD1wKIW+L4lmSMTzZA==", + "version": "0.220.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.220.0.tgz", + "integrity": "sha512-CmVa4ImJ+ynfrPMNaAXHET6Bhb44SwzmfyVJFq9ni2jgXJR/l7C6gfVFddNmHP+ZOkP9cf4f9DBe68qVLTHc9w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -136,9 +136,9 @@ } }, "node_modules/@opentelemetry/core": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.9.0.tgz", - "integrity": "sha512-m2nckMT80NnmjTYSPjJQObBJ+8dgkoajEOUbznL8AHZ3T3yHRk2P7gI1PhEBc1+lOnrYE9UWrWHqJDsmqjmNbw==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.10.0.tgz", + "integrity": "sha512-/wNZ8twnEQQA4HoHu22+vcsdru6pWPWxW+7w+FlxT6Id7PE/WIbZmVKkte+PF72e0F2dnImFeHD2syyE1Mw6MQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -152,13 +152,13 @@ } }, "node_modules/@opentelemetry/instrumentation": { - "version": "0.214.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.214.0.tgz", - "integrity": "sha512-MHqEX5Dk59cqVah5LiARMACku7jXSVk9iVDWOea4x3cr7VfdByeDCURK6o1lntT1JS/Tsovw01UJrBhN3/uC5w==", + "version": "0.220.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.220.0.tgz", + "integrity": "sha512-xQx3E2WxP1mDvKzxLxX+CTCtNLa560YJZ3087qYHerl2YmiKpv7AH+dAy7vmx+eVrZ5BwhfWUAVoKOoxCNHcpw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.214.0", + "@opentelemetry/api-logs": "0.220.0", "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, @@ -170,13 +170,13 @@ } }, "node_modules/@opentelemetry/resources": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.9.0.tgz", - "integrity": "sha512-jyA5MBLQ+Dkl3+JsZkUoUvL7yHvU64kLsvpXKarWm6347Sl1t1bXFTFykUePNpT5WH5pm9a2Qtt03iIYQhZ1Fg==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.10.0.tgz", + "integrity": "sha512-q6MMm2zhggzsHVNbabYwut+a6nbuQQe3URUoxaojM/8K1IBfwwPzvxIjNi2/lI1TFe+fMHMW9MWhrtDLEXEnkA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "2.9.0", + "@opentelemetry/core": "2.10.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "engines": { @@ -187,14 +187,14 @@ } }, "node_modules/@opentelemetry/sdk-trace": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace/-/sdk-trace-2.9.0.tgz", - "integrity": "sha512-sGA19HvtrrSKYsseHphluH6j3p6Xa3fqc7c7y8f/7mYWejc1lyDFcpSdD1kYa50HCLUeEo4zA5bW0pniaPszuw==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace/-/sdk-trace-2.10.0.tgz", + "integrity": "sha512-MfQGq3GRmTh5fM/y+OjaO0vj6+luCB1XO2gfXCalKCfgKw0eHL++sm75DNweC6ohlp+aFvACqeE0fYayqdRaoQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "2.9.0", - "@opentelemetry/resources": "2.9.0", + "@opentelemetry/core": "2.10.0", + "@opentelemetry/resources": "2.10.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "engines": { @@ -205,15 +205,15 @@ } }, "node_modules/@opentelemetry/sdk-trace-base": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.9.0.tgz", - "integrity": "sha512-cp9zmTl62R8PJrpvFcmc8N2JQU/xfa0S+61q511Nji+QxCfZ8Ifvg7H27G8cANe4crg4RTrWsVvanHiXjSp6ag==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.10.0.tgz", + "integrity": "sha512-GuYQQT7QD2EeO8lcZLRQzcbOyhqAzL+6WWTKTU9mSUBYBazkEDl+VrQcXQhbB08OWM9anD1aHleVadzulpOaUQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "2.9.0", - "@opentelemetry/resources": "2.9.0", - "@opentelemetry/sdk-trace": "2.9.0", + "@opentelemetry/core": "2.10.0", + "@opentelemetry/resources": "2.10.0", + "@opentelemetry/sdk-trace": "2.10.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "engines": { @@ -224,9 +224,9 @@ } }, "node_modules/@opentelemetry/semantic-conventions": { - "version": "1.41.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.41.1.tgz", - "integrity": "sha512-/UhIkaZgPutTFmQ7RnIJGgDXZmtEJ7Dvi86xNTFWcnRxVRNk/aotsqDJYeEvDP+FSMB2SdW+pQzNMcWP0rwuNA==", + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.43.0.tgz", + "integrity": "sha512-eSYWTm620tTk45EKSedaUL8MFYI8hW164hIXsgIHyxu3VobUB3fFCu5t0hQby6OoWRPsG1KkKUG2M5UadiLiVg==", "dev": true, "license": "Apache-2.0", "engines": { @@ -234,9 +234,9 @@ } }, "node_modules/@sentry/conventions": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@sentry/conventions/-/conventions-0.12.0.tgz", - "integrity": "sha512-z1JQrl/1SLY+8wpzvork6vl+fpsg/oCCxM7HWWhUnI/R+OGNyoIzieQuggX3uUMY7NBtp8UWCQx6FeFazzOF9g==", + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@sentry/conventions/-/conventions-0.16.0.tgz", + "integrity": "sha512-fO9PLmHdVURcSPUpWCItWAtgKiMwGdJHbovoSEyLplX5sxs2ugvI4CBPTrkkgqhObnZOD0CnWBKDzSVQYBKEyQ==", "dev": true, "license": "MIT", "engines": { @@ -244,31 +244,33 @@ } }, "node_modules/@sentry/core": { - "version": "10.63.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.63.0.tgz", - "integrity": "sha512-OtUbsrnbEHffOF2S2+M5zXa3HIM0U2b4CDVLKMY1dgS0J3ivRF8XvkjvyIcEG/y8JXnwXbnprLyjhG+AqMdUZQ==", + "version": "10.67.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.67.0.tgz", + "integrity": "sha512-b6U3pJ8AUvN9aouq0vl+VZI8KT8RslBsfGMFuNwRr313zOmdmFJBZqTiUw9VGgJ2jGKxLO9alm9rlxBfX4hf+w==", "dev": true, "license": "MIT", + "dependencies": { + "@sentry/conventions": "^0.16.0" + }, "engines": { "node": ">=18" } }, "node_modules/@sentry/node": { - "version": "10.63.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-10.63.0.tgz", - "integrity": "sha512-E+JfDTdUDGQPRsAfCTR2YgmQgxYdoxk4ks6niHN+ByW8alEZL+nXlcN9vI57qj1LsS4v2jjfLxJf1/cMMt84YA==", + "version": "10.67.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-10.67.0.tgz", + "integrity": "sha512-SFKpZGqOCEFSmP93NdDP6ikZp4NS7A/JR8+2ofK3jF6Y9Vyox7pX0pxdOnPLpFcPtMybMahfWqSAWJvsFs4RmA==", "dev": true, "license": "MIT", "dependencies": { "@opentelemetry/api": "^1.9.1", - "@opentelemetry/instrumentation": "^0.214.0", - "@opentelemetry/sdk-trace-base": "^2.6.1", - "@opentelemetry/semantic-conventions": "^1.40.0", - "@sentry/conventions": "^0.12.0", - "@sentry/core": "10.63.0", - "@sentry/node-core": "10.63.0", - "@sentry/opentelemetry": "10.63.0", - "@sentry/server-utils": "10.63.0", + "@opentelemetry/instrumentation": "^0.220.0", + "@opentelemetry/sdk-trace-base": "^2.9.0", + "@sentry/conventions": "^0.16.0", + "@sentry/core": "10.67.0", + "@sentry/node-core": "10.67.0", + "@sentry/opentelemetry": "10.67.0", + "@sentry/server-utils": "10.67.0", "import-in-the-middle": "^3.0.0" }, "engines": { @@ -276,15 +278,15 @@ } }, "node_modules/@sentry/node-core": { - "version": "10.63.0", - "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-10.63.0.tgz", - "integrity": "sha512-TaNtkGDRNxH3SjOea2PDtaebkNjMbAH8ZFsEcwlqmadpS7nqSR7z6slZy/iu7y1nLiUdbmcM5JmXwxksy52WRQ==", + "version": "10.67.0", + "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-10.67.0.tgz", + "integrity": "sha512-dBHHRwZyan1pOnFJ+sNBvR8TkXbZAfZU/jpxmALS3JZ2/8AGR7cQKL+b7SleKuJ7iUDZyklN3Nqi0i5JkcA+HA==", "dev": true, "license": "MIT", "dependencies": { - "@sentry/conventions": "^0.12.0", - "@sentry/core": "10.63.0", - "@sentry/opentelemetry": "10.63.0", + "@sentry/conventions": "^0.16.0", + "@sentry/core": "10.67.0", + "@sentry/opentelemetry": "10.67.0", "import-in-the-middle": "^3.0.0" }, "engines": { @@ -316,14 +318,14 @@ } }, "node_modules/@sentry/opentelemetry": { - "version": "10.63.0", - "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-10.63.0.tgz", - "integrity": "sha512-8yqi8+Ej/anmMn82blXA0BNMeAMs4av6nx0DzhxDrFya28ZaYOn19PChd3erMidfU0HnLLFNqWiFlYxBKq+/KA==", + "version": "10.67.0", + "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-10.67.0.tgz", + "integrity": "sha512-oLTOrAK1rOqmYRktOJZwz37B1seXPx1W2FTMVtzTVNjMFA/LZwGzePeZzhUOgzZgfLHixMd/ceWtGqoxAndcjQ==", "dev": true, "license": "MIT", "dependencies": { - "@sentry/conventions": "^0.12.0", - "@sentry/core": "10.63.0" + "@sentry/conventions": "^0.16.0", + "@sentry/core": "10.67.0" }, "engines": { "node": ">=18" @@ -335,27 +337,25 @@ } }, "node_modules/@sentry/server-utils": { - "version": "10.63.0", - "resolved": "https://registry.npmjs.org/@sentry/server-utils/-/server-utils-10.63.0.tgz", - "integrity": "sha512-7NN//DG9Yak8t2+6WiEcNmN269iHRVdtZtZIwucEd0OXyZ3FEBBDaBF+bT9V6H/kPtUvVMkHQ72Bn2Xs5JYGxg==", + "version": "10.67.0", + "resolved": "https://registry.npmjs.org/@sentry/server-utils/-/server-utils-10.67.0.tgz", + "integrity": "sha512-GQ9t+RSTx5s3b/aZrLFuL4nrwPLMah5NiZk5cjxJmgmOSgm3nMdO8gdqCedDch5B13F3YsxtaQYjSJnzLz8M5A==", "dev": true, "license": "MIT", "dependencies": { - "@apm-js-collab/code-transformer": "^0.15.0", - "@apm-js-collab/code-transformer-bundler-plugins": "^0.5.0", - "@apm-js-collab/tracing-hooks": "^0.10.0", - "@sentry/conventions": "^0.12.0", - "@sentry/core": "10.63.0", - "magic-string": "~0.30.0" + "@apm-js-collab/code-transformer-bundler-plugins": "^0.7.1", + "@apm-js-collab/tracing-hooks": "^0.13.0", + "@sentry/conventions": "^0.16.0", + "@sentry/core": "10.67.0" }, "engines": { "node": ">=18" } }, "node_modules/@toon-format/toon": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@toon-format/toon/-/toon-2.3.0.tgz", - "integrity": "sha512-/Ew9etdRQKVMnm9fDaCG0JjyAOK/O7T0M97oum1aW4W+UR8ZhVVPBanIV7oWgHBiGlnVxV9M55PWQCHofDV07w==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@toon-format/toon/-/toon-2.3.1.tgz", + "integrity": "sha512-sWqEMeAJGMda9qRrfPKrX3C4c33CO9SJuvJzzrcBEn5sbDB+k6pSLkDsfN0rVnLQwR97MV3sDgVbcxQNsq8xVw==", "dev": true, "license": "MIT" }, @@ -717,14 +717,14 @@ } }, "node_modules/@unbrained/pm-cli": { - "version": "2026.7.24", - "resolved": "https://registry.npmjs.org/@unbrained/pm-cli/-/pm-cli-2026.7.24.tgz", - "integrity": "sha512-EvEC47LOF9ska2YBc+8ei9taDk28nFyUlLGa/HIYObISw8Gk7gL1pAHmbn7+lgQkEnhhSY+wN3ESGCsBJRUilg==", + "version": "2026.7.25", + "resolved": "https://registry.npmjs.org/@unbrained/pm-cli/-/pm-cli-2026.7.25.tgz", + "integrity": "sha512-GtApg/4F/uMU28T+lT2bE+ELooxyEMHCkFbByRANa7HbMiq1Pz1oAoF4Gt0Rxppi//me8re5Pa8CxILDraIKcA==", "dev": true, "license": "MIT", "dependencies": { - "@sentry/node": "^10.63.0", - "@toon-format/toon": "^2.3.0", + "@sentry/node": "10.67.0", + "@toon-format/toon": "^2.3.1", "@types/node": ">=22", "commander": "^15.0.0", "fast-glob": "^3.3.3", @@ -807,9 +807,9 @@ } }, "node_modules/es-module-lexer": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.0.tgz", - "integrity": "sha512-KLdwQm2NvGLDkQDCGvmiQrhkd0JbMzXthwQAUgWjQuQdBLFa3eiBP5arXZyA+f8x+x7OXgud6bq2rxjGtHV2tw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.1.tgz", + "integrity": "sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==", "dev": true, "license": "MIT" }, @@ -910,9 +910,9 @@ } }, "node_modules/import-in-the-middle": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-3.3.0.tgz", - "integrity": "sha512-v4+k+PLt4z6g2ydEcXhfinTJxfgKJDWOW0v0GZNA5n2qToHFObpH4nGLhJdwnXnX4T14oREx/M62dS9GkpmSbQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-3.3.2.tgz", + "integrity": "sha512-jTd2FfOgOWOdgjkHuk/1Ms8VKFXkPs15ymYBETw1sAOrO/dY3XeGVRWir9qBbw7pXr0T2eTFwfCZ+N02HmiNGA==", "dev": true, "license": "Apache-2.0", "dependencies": { diff --git a/package.json b/package.json index d6094471..70465a13 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ }, "devDependencies": { "@types/node": "^26.1.1", - "@unbrained/pm-cli": "^2026.7.22", + "@unbrained/pm-cli": "^2026.7.25", "pm-changelog": "^2026.7.24", "typescript": "^7.0.2" }, From 548738966733eb4056af8b80b8dfbd67887f8740 Mon Sep 17 00:00:00 2001 From: SteveBot <1153461+unbraind@users.noreply.github.com> Date: Sat, 25 Jul 2026 14:24:46 +0200 Subject: [PATCH 2/2] fix(governance): restore parent_reference=warn that the settings rewrite silently tightened Enabling duplicate-detection advisory mode via `pm config set` had an unintended side effect: the settings rewrite re-derived `validation.parent_reference` from the governance preset and discarded the stored `warn`, flipping it to `strict_error` with no warning on stderr or in --json. Caught by Greptile on pm-presets#29 and then isolated: it happens under ANY named preset (minimal, default and strict all confirmed on 2026.7.25), not just one. Filed upstream as pm-cli#710. `warn` is the correct policy for this fleet. These repos are worked by multiple agents on parallel branches where an item legitimately references a parent that exists only on another branch until the merge lands; under `strict_error` that `pm create --parent` hard-fails. Since a stored value is not authoritative under a named preset, the value is set through `pm config set parent_reference_policy warn`, which pins governance explicitly as `custom`. That is the durable form and it also stops any future CLI default change from silently altering this policy. Verified that promotion materializes this repo\x27s own preset values, so `parent_reference` is the only behavioural key that differs from before. Co-Authored-By: Claude Opus 5 (1M context) --- .agents/pm/chores/pm-github-suxt.toon | 5 +++-- .agents/pm/history/_workspace.jsonl | 1 + .agents/pm/history/pm-github-suxt.jsonl | 1 + .agents/pm/settings.json | 10 ++++++++-- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/.agents/pm/chores/pm-github-suxt.toon b/.agents/pm/chores/pm-github-suxt.toon index 0c6c65b4..36992389 100644 --- a/.agents/pm/chores/pm-github-suxt.toon +++ b/.agents/pm/chores/pm-github-suxt.toon @@ -6,13 +6,14 @@ status: closed priority: 2 tags: [] created_at: "2026-07-25T11:56:35.437Z" -updated_at: "2026-07-25T11:56:43.038Z" +updated_at: "2026-07-25T12:24:45.503Z" closed_at: "2026-07-25T11:56:43.037Z" author: pi-agent resolution: Enabled advisory duplicate detection and bumped pm-cli dependency; advisory is non-blocking by design expected_result: "Second identical create in a throwaway probe workspace returns warnings array containing likely_duplicates:; all repo gates pass" actual_result: "Observed warning: likely_duplicates:pm-github-x9et. Gates: typecheck=pass, test=168/168 pass, changelog:full=ok, changelog:check=ok" -notes[1]{created_at,author,text}: +notes[2]{created_at,author,text}: "2026-07-25T11:56:42.728Z",pi-agent,"likely_duplicates:pm-github-x9et" + "2026-07-25T12:24:45.503Z",claude-code,"Follow-up fix by orchestrator: the pm config set that enabled advisory mode also silently re-derived validation.parent_reference from the governance preset, discarding the stored warn and tightening it to strict_error. Caught by Greptile on pm-presets#29; reproduced under minimal, default and strict presets; filed upstream pm-cli#710. Restored via pm config set parent_reference_policy warn, which pins governance as custom so the value is authoritative and no future CLI default change can flip it. Verified the promotion materializes this repo's own preset values, so parent_reference is the only behavioural key that changed." close_reason: Enabled advisory duplicate detection and bumped pm-cli dependency; advisory is non-blocking by design body: "" diff --git a/.agents/pm/history/_workspace.jsonl b/.agents/pm/history/_workspace.jsonl index 7b4508d9..36d4d768 100644 --- a/.agents/pm/history/_workspace.jsonl +++ b/.agents/pm/history/_workspace.jsonl @@ -1 +1,2 @@ {"ts":"2026-07-25T11:54:53.304Z","author":"codex","author_source":"asserted","op":"config:set:governance.duplicate_detection_mode","patch":[{"op":"add","path":"/metadata/id","value":"_workspace"},{"op":"add","path":"/metadata/title","value":"Workspace state"},{"op":"add","path":"/metadata/description","value":"Audited singleton workspace document state."},{"op":"add","path":"/metadata/type","value":"Chore"},{"op":"add","path":"/metadata/status","value":"open"},{"op":"add","path":"/metadata/priority","value":2},{"op":"add","path":"/metadata/tags","value":["workspace-history"]},{"op":"add","path":"/metadata/created_at","value":"2026-07-25T11:54:53.304Z"},{"op":"add","path":"/metadata/updated_at","value":"2026-07-25T11:54:53.304Z"},{"op":"add","path":"/metadata/documents","value":{"settings.json":{"version":1,"id_prefix":"pm-github-","ids":{"token_length":4},"author_default":"codex","mutation_guard":{"require_attributed_author":false,"secret_guard":"advise","stale_in_progress_hours":72},"item_format":"toon","locks":{"ttl_seconds":1800,"wait_ms":3000},"checkpoints":{"retention_days":14},"output":{"default_format":"toon"},"history":{"missing_stream":"auto_create","compact_policy":{"enabled":false,"max_entries":500,"trigger":"health_warn"}},"validation":{"sprint_release_format":"warn","parent_reference":"strict_error","metadata_profile":"core","metadata_required_fields":[],"lifecycle_stale_blocker_reason_patterns":["no active blocker","ready for planned execution sequencing","work completed","work is closed"],"lifecycle_closure_like_blocked_reason_patterns":["no active blocker because work is closed","work is closed"],"lifecycle_closure_like_resolution_patterns":["closed with implementation evidence","closed with verification evidence","work completed and recorded","work is closed"],"lifecycle_closure_like_actual_result_patterns":["closed and recorded","work completed","work completed and recorded"],"estimate_defaults_by_type":{}},"governance":{"preset":"default","duplicate_detection_mode":"advisory","duplicate_detection_threshold":0.8,"duplicate_detection_limit":3},"workflow":{"definition_of_done":[]},"testing":{"record_results_to_items":false},"telemetry":{"enabled":true,"first_run_prompt_completed":false,"capture_level":"redacted","endpoint":"https://pm-cli.unbrained.dev/v1/events","installation_id":"","retention_days":365},"agent_guidance":{"prompt_completed":true,"declined":true,"declined_at":"2026-05-26T11:08:03.813Z","template_version":1,"last_checked_files":["AGENTS.md","CLAUDE.md"]},"item_types":{"definitions":[]},"schema":{"version":1,"files":{"types":"schema/types.json","statuses":"schema/statuses.json","fields":"schema/fields.json","workflows":"schema/workflows.json"},"statuses":[{"id":"draft","roles":["draft"],"order":0},{"id":"open","roles":["active","default_open"],"order":1},{"id":"in_progress","roles":["active"],"order":2},{"id":"blocked","roles":["blocked"],"order":3},{"id":"closed","roles":["default_close","terminal","terminal_done"],"order":4},{"id":"canceled","aliases":["cancelled"],"roles":["default_cancel","terminal","terminal_canceled"],"order":5}],"fields":[],"workflow":{"draft_status":"draft","open_status":"open","in_progress_status":"in_progress","blocked_status":"blocked","close_status":"closed","canceled_status":"canceled"},"unknown_field_policy":"allow"},"context":{"default_depth":"brief","activity_limit":10,"stale_threshold_days":7,"sections":{"hierarchy":true,"activity":true,"progress":true,"blockers":true,"files":true,"workload":true,"staleness":true,"tests":true,"recently_created":true,"unparented":true}},"extensions":{"enabled":[],"disabled":[],"policy":{"mode":"off","trust_mode":"off","require_provenance":false,"trusted_extensions":[],"default_sandbox_profile":"none","allowed_extensions":[],"blocked_extensions":[],"allowed_capabilities":[],"blocked_capabilities":[],"allowed_surfaces":[],"blocked_surfaces":[],"allowed_commands":[],"blocked_commands":[],"allowed_actions":[],"blocked_actions":[],"allowed_services":[],"blocked_services":[],"extension_overrides":[]}},"search":{"score_threshold":0,"hybrid_semantic_weight":0.7,"max_results":50,"embedding_model":"","embedding_batch_size":32,"embedding_timeout_ms":30000,"scanner_max_batch_retries":3,"provider":"","mutation_refresh_policy":"semantic_configured","query_expansion":{"enabled":false,"provider":""},"rerank":{"enabled":false,"model":"","top_k":20}},"providers":{"openai":{"base_url":"","api_key":"","model":""},"ollama":{"base_url":"","model":""}},"vector_store":{"adapter":"","collection_name":"pm_items","qdrant":{"url":"","api_key":""},"lancedb":{"path":""}}}}}],"before_hash":"3cc22dff72be7b14824654a7a64ea62b04799939b2fee54c1b5f52ca60bf6df0","after_hash":"752c88ceff1fab61945e3f52886422189d3b21f5c84fe68672d9bcee1cf7bba3"} +{"ts":"2026-07-25T12:23:35.978Z","author":"codex","author_source":"asserted","op":"config:set:parent_reference_policy","patch":[{"op":"replace","path":"/metadata/documents/settings.json/governance/preset","value":"custom"},{"op":"add","path":"/metadata/documents/settings.json/governance/ownership_enforcement","value":"warn"},{"op":"add","path":"/metadata/documents/settings.json/governance/create_mode_default","value":"progressive"},{"op":"add","path":"/metadata/documents/settings.json/governance/close_validation_default","value":"warn"},{"op":"add","path":"/metadata/documents/settings.json/governance/parent_reference","value":"warn"},{"op":"add","path":"/metadata/documents/settings.json/governance/metadata_profile","value":"core"},{"op":"add","path":"/metadata/documents/settings.json/governance/force_required_for_stale_lock","value":true},{"op":"replace","path":"/metadata/documents/settings.json/validation/parent_reference","value":"warn"}],"before_hash":"752c88ceff1fab61945e3f52886422189d3b21f5c84fe68672d9bcee1cf7bba3","after_hash":"a7cc6ab34801aa50ac5bad2a580ad6f4f728f490ba6eab8dd55052c9cbe7dd86"} diff --git a/.agents/pm/history/pm-github-suxt.jsonl b/.agents/pm/history/pm-github-suxt.jsonl index 985a926b..06fa9511 100644 --- a/.agents/pm/history/pm-github-suxt.jsonl +++ b/.agents/pm/history/pm-github-suxt.jsonl @@ -2,3 +2,4 @@ {"ts":"2026-07-25T11:56:42.408Z","author":"pi-agent","author_source":"asserted","op":"update","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-07-25T11:56:42.408Z"},{"op":"replace","path":"/metadata/status","value":"in_progress"}],"before_hash":"e77234c0c954474b962c75fbe42b6a2c962a2891766cd1798ec5f7f88b8af052","after_hash":"5f3d316bfcb45dc7be1a33fceb2e6cccf4936e48821e71f251564fd9d2f41f43"} {"ts":"2026-07-25T11:56:42.728Z","author":"pi-agent","author_source":"asserted","op":"note_add","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-07-25T11:56:42.728Z"},{"op":"add","path":"/metadata/notes","value":[{"created_at":"2026-07-25T11:56:42.728Z","author":"pi-agent","text":"likely_duplicates:pm-github-x9et"}]}],"before_hash":"5f3d316bfcb45dc7be1a33fceb2e6cccf4936e48821e71f251564fd9d2f41f43","after_hash":"38898b3793d200ff4077a30ea82e04d255b0bf62a2e726d71dd860679d1711d2"} {"ts":"2026-07-25T11:56:43.038Z","author":"pi-agent","author_source":"asserted","op":"close","patch":[{"op":"replace","path":"/metadata/updated_at","value":"2026-07-25T11:56:43.038Z"},{"op":"replace","path":"/metadata/status","value":"closed"},{"op":"add","path":"/metadata/closed_at","value":"2026-07-25T11:56:43.037Z"},{"op":"add","path":"/metadata/resolution","value":"Enabled advisory duplicate detection and bumped pm-cli dependency; advisory is non-blocking by design"},{"op":"add","path":"/metadata/expected_result","value":"Second identical create in a throwaway probe workspace returns warnings array containing likely_duplicates:; all repo gates pass"},{"op":"add","path":"/metadata/actual_result","value":"Observed warning: likely_duplicates:pm-github-x9et. Gates: typecheck=pass, test=168/168 pass, changelog:full=ok, changelog:check=ok"},{"op":"add","path":"/metadata/close_reason","value":"Enabled advisory duplicate detection and bumped pm-cli dependency; advisory is non-blocking by design"}],"before_hash":"38898b3793d200ff4077a30ea82e04d255b0bf62a2e726d71dd860679d1711d2","after_hash":"5d90cf267951663c5b507190812a2b5fd9eaf547c1c7608df7fbfec4a2b27e72"} +{"ts":"2026-07-25T12:24:45.503Z","author":"claude-code","author_source":"asserted","op":"note_add","patch":[{"op":"add","path":"/metadata/notes/1","value":{"created_at":"2026-07-25T12:24:45.503Z","author":"claude-code","text":"Follow-up fix by orchestrator: the pm config set that enabled advisory mode also silently re-derived validation.parent_reference from the governance preset, discarding the stored warn and tightening it to strict_error. Caught by Greptile on pm-presets#29; reproduced under minimal, default and strict presets; filed upstream pm-cli#710. Restored via pm config set parent_reference_policy warn, which pins governance as custom so the value is authoritative and no future CLI default change can flip it. Verified the promotion materializes this repo's own preset values, so parent_reference is the only behavioural key that changed."}},{"op":"replace","path":"/metadata/updated_at","value":"2026-07-25T12:24:45.503Z"}],"before_hash":"5d90cf267951663c5b507190812a2b5fd9eaf547c1c7608df7fbfec4a2b27e72","after_hash":"53f29cbd54a6dac65aa440abb9645efb4cf86fc27c8a9fb5015ca4ed146c0972"} diff --git a/.agents/pm/settings.json b/.agents/pm/settings.json index 2a71fd4c..319ffc5a 100644 --- a/.agents/pm/settings.json +++ b/.agents/pm/settings.json @@ -31,7 +31,7 @@ }, "validation": { "sprint_release_format": "warn", - "parent_reference": "strict_error", + "parent_reference": "warn", "metadata_profile": "core", "metadata_required_fields": [], "lifecycle_stale_blocker_reason_patterns": [ @@ -58,7 +58,13 @@ "estimate_defaults_by_type": {} }, "governance": { - "preset": "default", + "preset": "custom", + "ownership_enforcement": "warn", + "create_mode_default": "progressive", + "close_validation_default": "warn", + "parent_reference": "warn", + "metadata_profile": "core", + "force_required_for_stale_lock": true, "duplicate_detection_mode": "advisory", "duplicate_detection_threshold": 0.8, "duplicate_detection_limit": 3