{
  "schema_version": "0.1",
  "releases": [
    {
      "version": "0.16.30",
      "date": "2026-07-19",
      "summary": "Replies are delivered and verified in one operation, or they fail visibly.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "request_reply.py --deliver appends the reply, regenerates the sanitized package, writes the destination inbox record, and READS IT BACK — comparing message id and a sha256 body digest — before reporting success. A reply that exists only in local state has not been sent.",
        "Export sanitization rejecting a body (local runtime paths: .prd_plugin/local, absolute drive paths, /Users/, /home/) now fails visibly with the rejecting rule named and nothing reported delivered; previously the message was dropped whole and silently.",
        "Delivery UPDATES an already-submitted package instead of being skipped, so later replies on a submitted request actually travel (reported by ai-collab-v3 REQ-140)."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes; use request_reply.py --deliver for upstream replies."
      ]
    },
    {
      "version": "0.16.29",
      "date": "2026-07-19",
      "summary": "A question delivered without its body is flagged, and our own reply no longer clears our own blocked state.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Silent-delivery detection covers needs_info as well as terminal statuses: publishing a mailbox where a body-dependent status carries no deliverable message now warns and names the request. Previously only terminal statuses were checked, so a question delivered without its body — the worst case, since the recipient cannot answer — went unflagged (reported by ai-collab-v3 REQ-139).",
        "append_reply clears needs_info only on an INBOUND reply (visibility 'upstream', travelling to the hub). An outbound reply no longer downgrades our own blocked request to in_review."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes."
      ]
    },
    {
      "version": "0.16.28",
      "date": "2026-07-19",
      "summary": "Resolution replies deliver their reasoning, not just a status change.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Message visibility is directional: repo/public travel to the origin repo, upstream is hub-only. The intake rule now prescribes --visibility repo for resolution replies and explains the direction; marking a reply 'upstream' delivered the status with its body silently stripped.",
        "unanswered_resolutions clears only on a DELIVERABLE reply and names the undeliverable reason, so an unreachable reply can no longer report a closed loop.",
        "request_mailbox reports withheld message counts and silent_resolutions, warning at publish when a terminal request carries no deliverable reasoning."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes. If earlier replies arrived as status-only, re-send them with --visibility repo and republish the mailbox; message_check will list them until a deliverable reply exists."
      ]
    },
    {
      "version": "0.16.27",
      "date": "2026-07-18",
      "summary": "The decision-quality bar becomes CRAFTES: Secure is now a named dimension.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Secure joins Correct/Robust/Aligned/Faithful-to-method/Tested/Efficient, with four concrete demands: secrets stay out of code, logs, state and transport; boundaries fail closed (unknown or malformed input refused, never guessed); least privilege by transport (read surfaces stay read-only); and blast radius bounded to what was asked for.",
        "The wiki defines Secure and says WHERE IT MATTERS — load-bearing at six boundary classes (cross-repo writes, service bindings, tool surfaces, credentials, content read from disk/network, destructive or exposing actions) and an explicit no-op for purely internal work. It is a per-change quality dimension, not a second consent floor.",
        "Applied across all skill copies and both always-in-force docs (hub and downstream skeleton). Append-only history and immutable raw sources still read CRAFTE by design."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes; agents pick up the seventh dimension from the refreshed skills and docs."
      ]
    },
    {
      "version": "0.16.26",
      "date": "2026-07-18",
      "summary": "Repositories get a real identity and a workspace boundary — the prerequisite for addressing anything.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "prd-install resolves the service manifest's identity placeholder ('auto') to the repo name on install and update. services.json stays state-protected; only this narrow placeholder repair runs, and a repository that already names itself is never rewritten.",
        "An installed repo still carrying the placeholder is a named audit finding (placeholder_repository_id); templates legitimately carry it, so the audit now takes install context.",
        "New workspace_peers() boundary predicate: two repos are peers only when both declare the same non-empty repository.workspace. Empty means standalone, never 'assume peer'. Declare membership with prd_services.py identity --workspace <name>.",
        "Fixed: substrate drift detection was gated behind 'no findings at all', so any benign advisory silently disabled it; it now gates on structural integrity. Hub/template manifest parity compares modulo repository identity."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes; identity resolves automatically. Repos in a shared workspace should declare it: python .prd_plugin/scripts/prd_services.py identity --workspace <name>."
      ]
    },
    {
      "version": "0.16.25",
      "date": "2026-07-18",
      "summary": "Transport residue is cleared, so a repo with nothing outstanding actually reports clear.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "request_pull --all (and session.start) prunes outbox packages whose request reached a terminal status — a sent submission that has been answered is residue, and leaving it held the origin repo's message check at 'attention' permanently.",
        "A mailbox fully applied into canonical records is consumed; a mailbox still carrying unmatched rows is kept, since that information has not landed anywhere."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes; run python .prd_plugin/scripts/request_pull.py --all to clear existing residue immediately."
      ]
    },
    {
      "version": "0.16.24",
      "date": "2026-07-18",
      "summary": "Upstream resolutions actually reach downstream records: source-id row resolution and automatic mailbox pull.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "request_pull resolves mailbox rows by source_request_id (the downstream id the hub recorded) and stamps upstream_request_id on the local record. Previously rows matched on the HUB's request id, so a real hub mailbox never resolved the local record and appended a FOREIGN canonical record into downstream state.",
        "Unknown rows are reported as unmatched, never planted; pulls are idempotent.",
        "New requests.pull workflow action runs in session.start (fail-open), so a delivered resolution applies without a human relay; python .prd_plugin/scripts/request_pull.py --all does it on demand."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes. Repos with pending hub resolutions apply them on the next session start (or run request_pull.py --all now) — stale 'submitted upstream, no answer' warnings clear then."
      ]
    },
    {
      "version": "0.16.23",
      "date": "2026-07-18",
      "summary": "Resolution loop closure: unanswered upstream resolutions are a named transport finding.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "message_check reports unanswered_resolutions — imported requests at terminal status with no upstream-visibility reply — and holds the transport at attention until the origin repo has been answered (reply + scoped mailbox + thread close).",
        "project-request-intake's definition of done for imported requests includes closing the loop; skipping it left origin repos warning 'submitted upstream, no answer' in every session."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes."
      ]
    },
    {
      "version": "0.16.22",
      "date": "2026-07-18",
      "summary": "Repo-owned extensions.* config namespace ends unknown-key nagging for custom settings.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Top-level extensions object is repo-owned: settings there (e.g. extensions.goal_budget_mode) never audit as unknown plugin keys; plugin namespaces stay strict, and a non-object extensions value is a named invalid finding.",
        "Upstream resolution replies now ship via the scoped mailbox (delivered to ai-collab-v3 for its REQ-134/REQ-135 submissions)."
      ],
      "migration_notes": [
        "Move repo-custom settings from plugin namespaces into extensions.* to clear per-session unknown-key warnings."
      ]
    },
    {
      "version": "0.16.21",
      "date": "2026-07-18",
      "summary": "Durable service runtime bindings and the public-service consent floor.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Provided services declare runtime {bind_host, port, public, restart_requires_consent} in services.json, readable by every agent via the services tool — launches use the declared bind_host (e.g. 0.0.0.0) instead of loopback defaults. Fail-closed validation: public services with loopback/missing bind_host are named audit errors; restart consent cannot be waived for public services.",
        "The hard consent floor gains a fourth never-unlock in every tier including autonomous: stopping, restarting, or rebinding a live public service requires explicit user consent (decision-policy Part 3, AGENTS.md, CLAUDE.md, hub and skeleton)."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes; declare your serving processes in services.json provides[].runtime so agents stop guessing bindings."
      ]
    },
    {
      "version": "0.16.20",
      "date": "2026-07-18",
      "summary": "The actually-published backfill: first version reaching npm since 0.16.15, fixing both cross-platform hash defects that silently blocked publication.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Skill tree hashes sort files by POSIX path string (byte order) instead of Path objects — Windows sorts case-insensitively and Linux case-sensitively, so the same tree hashed differently on the publish runner and the manifest test failed there (the second cause after CRLF, both REQ-121).",
        "Carries all features recorded in 0.16.16-0.16.19: code anchors, skill-bundle versioning, request.import workflow, /prd-off, the fabric.* binding policy, and the publish_verify registry read-back gate.",
        "v0.16.16-v0.16.19 tags exist in git but were never published; this version supersedes them on npm."
      ],
      "migration_notes": [
        "npm update prd-plugin delivers the full 0.16.16-0.16.20 feature set; run npx prd-install . --force without --yes."
      ]
    },
    {
      "version": "0.16.19",
      "date": "2026-07-18",
      "summary": "Backfill publication + release false-green fix: this is the first version actually reaching npm since 0.16.15, carrying the unpublished 0.16.16-0.16.18 features.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Carries everything recorded in 0.16.16 (code anchors, skill-bundle versioning, request.import workflow), 0.16.17 (/prd-off off switch), and 0.16.18 (fabric.* binding policy) — those versions never reached npm because the publish workflow's test step failed on CRLF-derived manifest hashes and nothing verified the registry before recording success.",
        "Skill-manifest hashes are now line-ending independent (CRLF folded to LF) so Windows-generated manifests verify on the Linux publish runner.",
        "New publish_verify.py: fail-closed npm registry read-back (version + dist-tags.latest, retry/backoff) that the release ceremony now requires before publication evidence may be recorded.",
        "Publish workflow installs the same test dependencies as CI."
      ],
      "migration_notes": [
        "npm update prd-plugin now genuinely delivers the 0.16.16-0.16.19 feature set; run npx prd-install . --force without --yes."
      ]
    },
    {
      "version": "0.16.18",
      "date": "2026-07-16",
      "summary": "Evidence-bound fabric model-profile binding policy (fabric.* namespace).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "New fabric.model_profiles managed structured key: a declarative model -> fabric-prediction-profile map where every binding carries an evidence reference (rejected otherwise while fabric.binding_requires_evidence holds); unmapped models resolve to the fail-safe raw default (fabric.default_when_unmapped) — a profile is never guessed (ai-collab EV-477 lesson).",
        "set-fabric-binding CLI verb mints bindings fail-closed (intended caller: a calibration harness); the read-only UTCP 'fabric' tool (capability fabric.resolve) resolves model+task_type to the calibrated treatment for any runtime."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes; the fabric block seeds empty and inert until bindings are minted."
      ]
    },
    {
      "version": "0.16.17",
      "date": "2026-07-16",
      "summary": "/prd-off switches PRD Plugin completely off in one reversible command; /prd-on restores.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "New built-in 'off' configuration profile: hooks master switch, stop guard, commit gate, deterministic workflows, drift, reflections, wiki, substrate, reporting, and version checks all off in one validated write; the hook dispatcher becomes a silent no-op while skills and tools stay installed.",
        "/prd-off and /prd-on [lean|balanced|full] ship as native Claude commands and generated source-command skills for Codex/opencode (44 skills)."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes."
      ]
    },
    {
      "version": "0.16.16",
      "date": "2026-07-16",
      "summary": "Code anchors trace features into source; the skill bundle is versioned; hub imports get a deterministic workflow.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "prd_graph.py indexes canonical-ID stamps in source files as code:<path> nodes with anchored_in edges; --anchors <ID> lists the exact files and lines, and impact/provenance traversals reach code sites. project-test-driven-implementation now says to stamp the driving id at the primary implementation site.",
        "skills-manifest.json versions the 42-skill bundle (per-skill sha256, bundle hash, plugin version; test-enforced current and shipped in the package) so installed skills are comparable across plugin versions.",
        "New request.import deterministic workflow wraps prd_import_request with a confirm step (13 workflows; registered in catalog, configs, coverage map, and skills)."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes."
      ]
    },
    {
      "version": "0.16.15",
      "date": "2026-07-16",
      "summary": "Tool/reachability parity: an agent-facing feature is not complete until a tool exposes it.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "The feature coverage map declares tool parity per feature (tool_capabilities XOR tool_exemption) and feature_skill_audit.py fails undeclared features, unknown capability ids, and tool capabilities no feature claims — both directions of feature-vs-tool drift.",
        "Method rule codified: the completion gate refuses done for agent-facing features without a reachable tool; planning intake asks 'what tool exposes this?'; implementation plans carry a tool deliverable task; verification checks parity.",
        "Audit backfill: 25 features mapped (5 post-0.16.0 entries added), all 15 tool-surface capabilities claimed, four stale skill guidances fixed (wiki page contract, hub import tool, run-until-done)."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes."
      ]
    },
    {
      "version": "0.16.14",
      "date": "2026-07-16",
      "summary": "Run-until-done no longer adopts stale goals: freshness window on stop-guard candidates.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "The stop guard only continues a session toward goals it already owns or goals updated within automation.stop_guard_goal_max_age_days (new key, default 2); sessions whose own work is finished stop freely instead of being bound to abandoned open goals, with a reason pointing at the staleness audit.",
        "Undated legacy records keep the old behavior; a session's owned long-running goal stays a candidate regardless of age."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes; tune the window with /prd-config set automation.stop_guard_goal_max_age_days <days>."
      ]
    },
    {
      "version": "0.16.13",
      "date": "2026-07-16",
      "summary": "Combined cross-wiki changelog tab in the all-wikis super index.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "all-wikis.html gains Wikis/Changelog tabs: every discovered wiki's log.md is parsed by the shared '## [date] mode | text' convention and combined newest-day first with repo badges that deep-link to each wiki's own log page; lint runs are hidden behind a toggle."
      ],
      "migration_notes": [
        "Update the package and regenerate with: python .prd_plugin/scripts/wiki_html_export.py --all"
      ]
    },
    {
      "version": "0.16.12",
      "date": "2026-07-16",
      "summary": "Super index includes convention wikis from repos without PRD Plugin (e.g. Fork).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Workspace discovery keys on the LLM-wiki convention marker wiki/index.md instead of requiring .prd_plugin, so core plugin-less repos appear in all-wikis.html; their viewers are hosted beside the super index and their repo trees stay untouched."
      ],
      "migration_notes": [
        "Update the package and regenerate with: python .prd_plugin/scripts/wiki_html_export.py --all"
      ]
    },
    {
      "version": "0.16.11",
      "date": "2026-07-16",
      "summary": "Workspace all-wikis super index across every PRD-enabled repo.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "wiki_html_export.py --all [--workspace-root PATH] discovers every repo in the workspace with PRD Plugin installed and a wiki, generates each repo's self-contained offline viewer, and writes all-wikis.html — one card per repo (name, page count) that opens that repo's wiki index; each viewer links back to the super index."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes; generate the workspace index with: python .prd_plugin/scripts/wiki_html_export.py --all"
      ]
    },
    {
      "version": "0.16.10",
      "date": "2026-07-16",
      "summary": "Wiki page read/export contract and an offline HTML viewer with copy/download buttons on every page.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "The UTCP wiki tool gains list and read actions (page contract v1): exact UTF-8 Markdown with title, safe export filename, sha256, and Commit/Updated provenance; paths outside wiki/, traversal, non-Markdown, and non-UTF-8 content are rejected. Consuming hubs (AI-Collab Knowledge Hub) can render copy/download controls once for every conforming repo.",
        "New wiki_html_export.py (downstream_runtime): emits one self-contained offline HTML viewer at .prd_plugin/local/wiki-html/index.html — page list, rendered view, and Copy Markdown / Download .md buttons top-right; works from a double-click with no remote, server, or CDN."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes; generate your repo's viewer with: python .prd_plugin/scripts/wiki_html_export.py"
      ]
    },
    {
      "version": "0.16.9",
      "date": "2026-07-16",
      "summary": "Host-native administration command parity: every /prd-* operation is discoverable on Codex and opencode.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "All 13 administration commands ship generated source-command-* skills for hosts that load skills instead of Claude command files; commands/*.md stays the single source of truth (scripts/generate_command_skills.py) and a parity test fails on any missing skill, content drift, mirror divergence, or host-registration gap.",
        "The stale .gitignore rule hiding locally improvised source-command-* adapters is removed from the hub and the installer-managed downstream block; hub-shipped command skills are tracked like every other installed skill.",
        "prd_import_request normalizes transport request-type aliases (compat<->compatibility, change<->feature) so downstream vocabulary differences no longer reject imports."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes; Codex and opencode sessions gain all 13 admin surfaces as skills. Delete any locally improvised source-command-* adapters — the shipped versions replace them."
      ]
    },
    {
      "version": "0.16.8",
      "date": "2026-07-16",
      "summary": "Validated hub inbox intake: prd_import_request lands staged packages with full transport provenance.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "New prd_import_request MCP tool (46 total): one duplicate-safe call imports a staged .prd_plugin/inbox/ package into canonical requests with origin_repo/source_request_id/upstream provenance, landing as proposed; re-imports and paths outside the inbox are rejected, and worker sessions cannot call it.",
        "The tool projected into the UTCP manual automatically through the generated metadata pipeline (58 manual entries) — no hand-authored MCP metadata."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes; hub-side intake sessions should use prd_import_request instead of scripted state edits."
      ]
    },
    {
      "version": "0.16.7",
      "date": "2026-07-16",
      "summary": "Official @utcp/mcp-bridge round-trip parity proven and gated in CI.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "The official @utcp/mcp-bridge (devDependency only; runtime stays zero-dependency) mounts the pure manual and round-trips both template types in an installed repo: native cli reads and mcp-bridged validated state-server calls, all 57 tools visible.",
        "build_manual()/--utcp-manual now emits the strict-spec mountable UtcpManual; the committed utcp.json is the hub-feed static manifest (--static-manifest: hub descriptor + manual), matching the workspace convention.",
        "Bridged mcp call templates are keyed by the contract mount name prd_plugin (how @utcp/mcp resolves mount.tool); consumers granting allowed_communication_protocols [cli, mcp] get the full surface."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes. UTCP consumers should mount the manual under the name prd_plugin and allow cli+mcp communication protocols."
      ]
    },
    {
      "version": "0.16.6",
      "date": "2026-07-16",
      "summary": "UTCP-first stage 1: one complete UTCP manual is the source of truth for every tool.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "utcp.json (manual 2.0.0) covers all 57 tools: 12 native cli observe/recall tools plus all 45 state-server tools bridged with official mcp call templates, so guarded mutation semantics stay in the validated handlers (PRD-REQ-076, ARCH-DEC-049, REQ-107).",
        "node mcp/server.cjs --describe emits the tool-metadata projection; the pinned mcp/tool-metadata.json is consumed by the manual builder, installed beside the server, and parity-tested so MCP metadata is never hand-authored twice.",
        "Tool-surface catalog policy superseded: manual_coverage complete / mutation_path validated_handlers replaces utcp_access read_only."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes; UTCP clients can now mount the full manual, and MCP clients are unaffected."
      ]
    },
    {
      "version": "0.16.5",
      "date": "2026-07-16",
      "summary": "Guard registry counters against planning-artifact ID collisions.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "state_consistency_check gains CONS-ERR-004: a planning-prefix registry counter (PRD-REQ, ARCH-*, IMP-*, BR-*) at or behind IDs already used in state/artifacts is an error, because the next planning allocation would collide.",
        "Hub registry counters repaired: every planning prefix advanced past the maxima consumed by the PRD-010/ARCH-010/IMP-011 planning chain."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes; if the new check flags counters in your repo, advance them past the reported max_used values."
      ]
    },
    {
      "version": "0.16.4",
      "date": "2026-07-16",
      "summary": "Stop guard never conscripts a session toward another host runtime's goals.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "The hook dispatcher exports its --host as PRD_HOOK_HOST to every handler and restores it afterwards.",
        "prd_stop_guard.py excludes open goals whose owner_agent names a different known host runtime (claude/codex/opencode); hostless owners such as AGENT-001 remain candidates so single-agent repos keep run-until-done.",
        "Added owner-agent filtering and dispatcher host-forwarding regressions; guard and dispatcher copies stay byte-identical across hub and skeleton."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes; sessions whose own goals are closed stop freely without the autonomy-pause escape hatch."
      ]
    },
    {
      "version": "0.16.3",
      "date": "2026-07-16",
      "summary": "Ship the staleness auditor with every install and pin UTCP/MCP registrations to one canonical tool-surface contract.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Promoted staleness_audit.py to downstream_runtime/installed-by-default so the session.stop workflow's staleness.audit action always has its module without PYTHONPATH workarounds.",
        "Added the canonical tool-surface contract (templates/tool-surface.json, installed at .prd_plugin/tool-surface.json) accounting for every UTCP and MCP registration, with transport_rationale required on asymmetric capabilities.",
        "Regenerated the checked-in utcp.json, which had drifted behind the registered tools (missing the services tool and newer substrate actions), and pinned it to build_manual() by test on both transports."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes; the safe update installs staleness_audit.py and .prd_plugin/tool-surface.json while preserving state and configuration."
      ]
    },
    {
      "version": "0.16.2",
      "date": "2026-07-15",
      "summary": "Pre-route downstream plugin request submission to the fixed workspace hub.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Shipped requests.upstream_hub_path as D:\\Projects\\prd-plugin in canonical and downstream config templates.",
        "Made safe installer updates replace older null or missing hub routes while preserving explicit non-null overrides.",
        "Added fresh-install, safe-migration, custom-route, and MCP test-isolation regressions and updated request-routing guidance."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes; the safe update populates the fixed hub path and preserves state and explicit configuration overrides.",
        "Future plugin-owned prd_file_request submissions deliver into the hub automatically; PRD_UPSTREAM_HUB remains the runtime override."
      ]
    },
    {
      "version": "0.16.1",
      "date": "2026-07-15",
      "summary": "Prevent transported request snapshots from falsely blocking duplicate-safe request allocation.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Aligned record-backed allocation with canonical duplicate validation: only each record type's canonical collection owns its ID.",
        "Kept duplicate rejection inside canonical collections and recursive ownership checks for embedded planning identities.",
        "Added a Windows-reported regression covering an upstream submission snapshot beside a valid canonical request."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes; existing state and configuration are preserved.",
        "No state repair or registry edit is required when validation already reports no canonical duplicates."
      ]
    },
    {
      "version": "0.16.0",
      "date": "2026-07-15",
      "summary": "Complete the executable PRD-to-AI-Collab Substrate integration and add repository-owned service consume/provide manifests.",
      "risk": "medium",
      "recommendation": "safe_to_update",
      "changes": [
        "Added a guarded contract-v2 runtime bridge, complete 103-tool capability/intent catalog, identity and health preflight, federated knowledge/memory/context enrichment, delegated judgment/reporting dispatch, goal links, telemetry, notices, and stable runtime receipts.",
        "Added .prd_plugin/services.json with duplicate-safe CLI and MCP CRUD, config reconciliation, installer preservation, and deterministic audits so every downstream repository declares the services it consumes and provides.",
        "Completed impact-scoped verification execution with exact change fingerprints, AI-Collab neighbours, deterministic local test mapping, argv-only execution, bounded receipts, and mandatory full-suite widening on uncertainty.",
        "Synchronized unified config, workflows, installer scope, host skills, UTCP/MCP tools, documentation, wiki guidance, feature parity contracts, and release audits across every downstream delivery surface."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes; the installer preserves existing state/config and creates or preserves .prd_plugin/services.json.",
        "Substrate execution remains disabled by default. Configure integrations.substrate and its independent automation switches through prd_config.py, then manage repository service declarations through prd_services.py or the prd_service_* MCP tools."
      ]
    },
    {
      "version": "0.12.0",
      "date": "2026-07-14",
      "summary": "Removed a deprecated optional evidence integration from every shipped and repository-owned surface.",
      "risk": "medium",
      "recommendation": "review_first",
      "changes": [
        "Deleted the dedicated runtime bridge, regression suite, and host-agent skill from the hub and every downstream template.",
        "Removed its configuration block, installer flags, install-scope entries, command toggle, documentation, wiki guidance, and historical named references.",
        "Kept installer behavior, remaining host options, state JSON, and active Codex skills valid after the removal."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force.",
        "The removed option is no longer accepted or installed; no replacement configuration is required."
      ]
    },
    {
      "version": "0.11.3",
      "date": "2026-07-14",
      "summary": "Request filing now preserves explicit local routing and no longer classifies canonical .prd_plugin state paths as PRD Plugin product references (REQ-093).",
      "risk": "low",
      "recommendation": "adopt",
      "changes": [
        "Made an explicitly supplied scope: local authoritative in prd_file_request, recording upstream_submission: false without invoking autosubmit.",
        "Kept omitted-scope classification unchanged so genuine requests about plugin-owned scripts, skills, hooks, and product surfaces still submit automatically.",
        "Narrowed product-name classification to PRD Plugin and prd-plugin, preventing canonical .prd_plugin planning-artifact paths from triggering upstream transport.",
        "Added classifier, gate, and fresh-downstream MCP regressions for the reported local feature request and the existing plugin-bug autosubmit path."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force.",
        "Call prd_file_request with scope: local only for an intentional local-routing decision; omit scope to retain automatic plugin-surface classification."
      ]
    },
    {
      "version": "0.11.2",
      "date": "2026-07-14",
      "summary": "State consistency validation now skips binary evidence while continuing to scan intentional text claim sources (REQ-092).",
      "risk": "low",
      "recommendation": "adopt",
      "changes": [
        "Restricted claim-source decoding under evidence, traceability, and session directories to Markdown, JSON, JSONL, and plain-text files.",
        "Prevented valid images, PDFs, videos, and other binary evidence artifacts from crashing the standalone checker or prd_validate.",
        "Preserved missing canonical-ID detection and informational reference analysis for every supported textual claim-source format.",
        "Added direct and fresh-downstream regression coverage, including a guard proving malformed files with textual extensions remain visible errors."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force.",
        "No configuration change is required; binary evidence under docs/evidence is ignored automatically by state consistency claim scanning."
      ]
    },
    {
      "version": "0.11.1",
      "date": "2026-07-14",
      "summary": "Upgrade installs now expose the Substrate adapter configuration contract in preserved downstream configs and installed config templates (REQ-091).",
      "risk": "low",
      "recommendation": "adopt",
      "changes": [
        "Added an additive installer migration that inserts the disabled-by-default integrations.substrate contract into preserved downstream configs without clobbering project-owned integration settings.",
        "Aligned the downstream config template with the hub and fresh-install skeleton so config-driven tools and agents see the same adapter controls after upgrades.",
        "Added upgrade, custom-config preservation, and four-way shipped-config parity regression tests after a real downstream install audit exposed the gap.",
        "Hardened the nested npm package boundary so local runtime, request transport, mailbox, and Python cache artifacts cannot be included when .prd_plugin is explicitly packaged."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force.",
        "Existing integrations.substrate values are preserved; repos without the section receive the safe disabled/off defaults."
      ]
    },
    {
      "version": "0.11.0",
      "date": "2026-07-14",
      "summary": "A config-driven PRD Plugin adapter lets AI-Collab Substrate mirror canonical coordination state, execute delegated reporting, and prepare parallel workers without moving project truth out of PRD MCP (REQ-091).",
      "risk": "medium",
      "recommendation": "review_first",
      "changes": [
        "Added an off-by-default integrations.substrate contract with off, observe, and coordinate modes, an explicit capability allowlist, contract versioning, and source-reference policy through JSON and prd_config.py.",
        "Added a deterministic read-only handshake, complete canonical-record snapshot, and repo-qualified graph export through prd_substrate.py and the ninth UTCP observe/recall tool.",
        "Implemented exact generation-aware record and graph reconciliation in AI-Collab, plus configured delegated-report execution, PRD-MCP-only allowlisted mutations, and duplicate-safe tracking-branch worker preparation.",
        "Updated downstream workflow skills, configuration documentation, wiki knowledge, installer delivery, protocol metadata, tests, and cross-repository verification for the new adapter boundary."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force.",
        "The adapter remains disabled after install. Enable it with prd_config.py set integrations.substrate.enabled true and set integrations.substrate.mode to observe or coordinate; coordinate operations also require their capability names."
      ]
    },
    {
      "version": "0.10.0",
      "date": "2026-07-14",
      "summary": "Configurable Stop-hook reflections add categorized, individually toggleable question banks with duplicate-safe CLI and MCP CRUD across supported hosts (REQ-090).",
      "risk": "medium",
      "recommendation": "review_first",
      "changes": [
        "Added an off-by-default reflection config with category and per-question activation, a bounded question cap, and five editable starter questions covering behaviour quality and harness friction.",
        "Added fail-open Stop-hook runtimes for Claude Code and Codex plus an OpenCode idle re-prompt adapter; a session marker permits exactly one reflection pass and prevents recursive Stop loops.",
        "Added full category/question CRUD through prd_reflections.py and four MCP tools, with shared locking, atomic writes, duplicate-text/category rejection, safe cascading deletion, and collision-free RFQ ID allocation.",
        "Added upgrade-safe installer migration, direct-config gate validation, downstream hook/command/script delivery, cross-host parity coverage, and concurrent CRUD tests."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force.",
        "Reflections remain disabled after install; enable them with python .prd_plugin/scripts/prd_config.py set reflection.enabled true, then manage the bank with prd_reflections.py or the prd_reflection_* MCP tools."
      ]
    },
    {
      "version": "0.9.5",
      "date": "2026-07-13",
      "summary": "Downstream installs now create and maintain a bounded root .gitignore block for PRD Plugin runtime, transport, report, secret, cache, and OS-generated files without overwriting project-owned rules (REQ-089).",
      "risk": "medium",
      "recommendation": "review_first",
      "changes": [
        "prd-install creates a downstream root .gitignore when absent and idempotently refreshes only the marked PRD Plugin block on upgrades.",
        "Existing project rules, UTF-8 BOMs, and LF/CRLF style are preserved; malformed or non-UTF-8 files are reported and left untouched.",
        "The managed rules exclude .prd_plugin local/request-transport state, generated request reports, local command adapters, secrets, Python caches, logs, temporary files, and OS metadata.",
        "Regression tests use git check-ignore to prove committed configuration, tracking branches, drift exports, Codex environment configuration, MCP wiring, and evidence remain trackable."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force.",
        "Review the new # BEGIN/END PRD Plugin managed ignores block; keep project-specific rules outside it."
      ]
    },
    {
      "version": "0.9.4",
      "date": "2026-07-13",
      "summary": "Parallel tracking now enforces the configured worker boundary, exposes DBR branches through existing discovery tools, and validates branch state in every default downstream install (REQ-088/HLT-009).",
      "risk": "medium",
      "recommendation": "review_first",
      "changes": [
        "When tracking.branching.require_for_parallel_agents is enabled, worker sessions can update only the lead-assigned DBR and cannot allocate IDs or mutate canonical state.",
        "prd_status, prd_find(kind: DBR), and prd_get(DBR-*) expose tracking branch ownership, progress, and promotion state without manual file scanning.",
        "state_consistency_check.py is now a required downstream runtime, and prd_gate.py fails loudly instead of silently skipping validation when it is unavailable.",
        "Aligned direct state-writing skills, host instructions, downstream templates, method documentation, tests, and wiki guidance with the enforced lead/worker contract."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force.",
        "Leads should launch parallel workers with PRD_WORKER_SESSION=1, PRD_TRACKING_BRANCH_ID=<DBR-*>, and PRD_TRACKING_BRANCH_OWNER=<owner>; workers record non-TRK closeout requests as branch notes for serial lead application."
      ]
    },
    {
      "version": "0.9.3",
      "date": "2026-07-13",
      "summary": "Release closeout for agent-scoped tracking branches promotes DBR-001, closes REQ-087 and its tracking chain, and carries verified 0.9.2 publication evidence into the shipped hub state.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Promoted the narrative DBR-001 branch after repository-wide verification and successful tag-triggered npm publication.",
        "Recorded GitHub Actions run 29242622943 and npm registry proof as EV-061, then closed the request, health, and tracking chain.",
        "Kept runtime branch behavior unchanged; this patch advances package and installed-version metadata so shipped closeout state remains release-hygiene compliant.",
        "Fixed release_check.py to compare against the prior version tag (falling back to HEAD~1), so required provenance-only follow-up commits do not produce a false unversioned-release finding."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force.",
        "No runtime migration is required from 0.9.2."
      ]
    },
    {
      "version": "0.9.2",
      "date": "2026-07-13",
      "summary": "Agent-scoped tracking branches let parallel worktrees record progress in separate DBR files and promote them serially into duplicate-safe canonical TRK state (REQ-087/DBR-001).",
      "risk": "medium",
      "recommendation": "review_first",
      "changes": [
        "Added prd_open_tracking_branch, prd_update_tracking_branch, and prd_promote_tracking_branch with owner checks, base-snapshot conflict detection, additive merge behavior, crash recovery, and idempotent promotion.",
        "Added tracking.branching config defaults and prd_config.py toggles; parallel workers use assigned branch files while direct tracking tools remain compatible for the lead/single-writer path.",
        "Extended state consistency and the traceability graph to validate and expose DBR/DBR-DELTA/DBR-MERGE promotion provenance, and bumped tracking state schema to 0.2 for optional branch fields.",
        "Replaced blanket single-writer guidance with a branch-before-fan-out workflow across agent instructions, skills, docs, templates, and the installed MCP conversation."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force.",
        "Before parallel fan-out, the lead pre-creates and commits one tracking branch per worker; workers update only assigned files, then the lead promotes after merging."
      ]
    },
    {
      "version": "0.9.1",
      "date": "2026-07-12",
      "summary": "Release publication policy now matches the executable hub workflow: pushing a remote v* tag triggers GitHub Actions to test, pack, and publish to npm; local npm credentials are not part of the release path (REQ-086).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Made the tag-triggered npm workflow manually rerunnable with workflow_dispatch and added regression coverage for its trigger and publish contract.",
        "Taught hub and downstream agent workflows that the tag push is the publication action and that agents must inspect or rerun GitHub Actions instead of attempting local npm publication.",
        "Replaced stale manual-publish wiki guidance and promoted the correct release model into durable project memory and the ingest manual.",
        "Extended prd_find, prd_get, and prd_link to promoted MEM records so durable memory can be traced without becoming generically mutable."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force.",
        "For hub releases, push main and then the annotated version tag; verify the Publish to npm Actions run and registry version."
      ]
    },
    {
      "version": "0.9.0",
      "date": "2026-07-12",
      "summary": "Minimal CRAFTE state tools let agents find, get, create, update, and link records without scanning or hand-editing JSON, with duplicate-safe allocation under the existing lock (REQ-085).",
      "risk": "medium",
      "recommendation": "review_first",
      "changes": [
        "Added compact bounded prd_find and exact prd_get reads across record-backed state.",
        "Added schema-limited prd_create, prd_update, and symmetric prd_link operations for ordinary TRK/REQ/HLT management while guarded evidence, decision, and changelog workflows remain specialised.",
        "Allocation now refuses pre-existing duplicate identities and advances stale registry counters beyond the highest canonical ID before concurrent locked creation."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force.",
        "Use prd_next_id only for embedded planning IDs; record-backed creation now allocates internally."
      ]
    },
    {
      "version": "0.8.0",
      "date": "2026-07-12",
      "summary": "Provider-neutral delegated reporting lets AI-Collab run bounded non-deterministic summaries on a configured fast-capable model while PRD Plugin retains deterministic facts, policy, validation, and fallback control (REQ-084).",
      "risk": "medium",
      "recommendation": "review_first",
      "changes": [
        "Added an off-by-default reporting.delegation config contract and matching prd_config.py toggles for executor, profile, eligible tasks, fallbacks, source-reference enforcement, token bounds, and timeout.",
        "Added stdlib-only prd_reporting.py to build sanitized deterministic bundles, decide fallbacks, and validate versioned AI-Collab results without calling provider APIs or writing project state.",
        "Exposed bundle construction through the eighth read-only UTCP tool and wired report, session-close, wiki-synthesis, and triage-draft instructions across all host and downstream mirrors."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force.",
        "Delegation remains disabled until reporting.delegation.enabled is explicitly set true and the AI-Collab runtime provides the matching executor contract."
      ]
    },
    {
      "version": "0.7.1",
      "date": "2026-07-11",
      "summary": "Self-audit correctness and repository drift cleanup: historical ID gaps and explicitly guarded hub-helper references no longer produce false positives; state and wiki drift are reconciled (REQ-083).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Self-audit now treats registry counters as monotonic allocation cursors rather than proof that every historical number must have a canonical record.",
        "Hub-only helper detection now honors paragraph-level ownership and explicit document-wide run-from-hub guards while retaining real unguarded-reference detection.",
        "Resolved obsolete health drift, linked active requests to health findings, revalidated stale wiki knowledge, indexed drift detection, and documented the read-only UTCP surface."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force."
      ]
    },
    {
      "version": "0.5.99",
      "date": "2026-07-11",
      "summary": "Wiki drift detection joins the on-Stop drift check: it flags wiki articles that have gone stale versus HEAD, are unstamped, or missing from the index (REQ-076).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "New wiki_drift validator (scripts/prd_wiki_backfill.py --drift): reads each wiki article's Commit stamp (added in 0.5.87) and reports articles that are >= 25 commits behind HEAD (re-ingest candidates), articles with no Commit stamp, and articles missing from wiki/index.md. Read-only, fail-open; a repo with no wiki reports 'ok' (nothing to drift).",
        "Wired into the drift monitor: wiki_drift is in DEFAULT_VALIDATORS and the cheap ON_STOP_VALIDATORS set (state_consistency + staleness + self_audit + prd_graph + wiki_drift), with a matching archetype pattern and config entries. So when drift.monitoring.on_stop is enabled, wiki staleness is surfaced alongside tracking/docs/traceability drift.",
        "Scope note: this is WIKI drift. Ingest-manual drift (a repo card the hub cold-indexes) is a separate Fork concept (ingest-manual-kit) that prd-plugin does not have yet; adopting it is tracked separately."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force.",
        "Enable the on-Stop drift check with /prd-drift on to have wiki staleness (and tracking/docs/traceability drift) surfaced at the end of a turn."
      ]
    },
    {
      "version": "0.5.98",
      "date": "2026-07-11",
      "summary": "The documented update path finally works: `npx prd-install . --force` now refreshes the plugin's own files while preserving your state AND config; no abort (REQ-075).",
      "risk": "medium",
      "recommendation": "safe_to_update",
      "changes": [
        "Bug: `npm update prd-plugin && npx prd-install . --force` could not update an established repo. --force triggered the state-overwrite check which ABORTED before the skeleton copy when state existed and --yes was absent; plain install skipped every existing file. So changed hooks/skills/scripts/manifests stayed frozen at the old version (a 0.5.82->0.5.97 update left 15 files stale). And --force --yes additionally overwrote .prd_plugin/config.json, resetting the user's toggles.",
        "Fix: the two concerns are split. --force now refreshes plugin-owned skeleton files (hooks, skills, scripts, manifests, templates, method docs) that differ, while .prd_plugin/state, .prd_plugin/ids, .prd_plugin/local, and .prd_plugin/config.json are PRESERVED. No abort. Only --yes additionally resets state/config to skeleton defaults (the destructive reset). The install report now lists copied vs skipped vs preserved so the update is auditable.",
        "Reported by a downstream repo; thank you. The workaround (content-diff copy excluding a protected set) is exactly what --force now does natively."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force — it now brings your plugin files current and keeps your data.",
        "To reset state/config to defaults (rare), add --yes. Onboarding docs updated to say so."
      ]
    },
    {
      "version": "0.5.97",
      "date": "2026-07-11",
      "summary": "Version-available notice is now prompt and in-session: the nudge refreshes npm itself (TTL-gated, fail-open) and the default check interval dropped from 24h to 1h, so agents notice a new plugin version quickly (REQ-074).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Root cause of 'agents don't mention a new version': the nudge only read the version cache, the refresh ran on Stop, and the cache TTL was 24h — so a freshly published version stayed invisible for up to a day and surfaced a session late.",
        "The session-start nudge now performs the version check in-session (TTL-gated, 4-second timeout, fail-open) instead of a cache-only read, so the notice appears in the same session it is detected. fetch_latest accepts a timeout so the in-session refresh never stalls a prompt.",
        "Default automation.version_check.ttl_hours lowered 24 -> 1 (still tunable, fractional hours allowed). A new version now surfaces within about an hour. The Stop-side refresh remains as a backstop.",
        "Note: version-check is independent of the drift monitor — it has its own automation.version_check.enabled (on by default)."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force.",
        "Repos already on >=0.5.91 will now notice newer versions within ~1h, in-session. For near-instant detection set automation.version_check.ttl_hours lower (fractional allowed), e.g. /prd-config set automation.version_check.ttl_hours 0."
      ]
    },
    {
      "version": "0.5.96",
      "date": "2026-07-11",
      "summary": "AGENTS.md and CLAUDE.md now promote the LLM wiki like they already promote skills and workflows — query before re-deriving, ingest as work closes (REQ-073).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "The always-in-force docs promoted skills ('use the skills, don't work from memory') and the project-decision-policy workflow router, but never mentioned the wiki — even though it is on by default and wired into the nudge, session-close, verification, and self-service. Added a 'Query and grow the wiki' bullet to the always-in-force list and a project-llm-wiki row/line to the skill table/list in AGENTS.md and CLAUDE.md (hub + skeleton). This matters most for Codex/opencode, which lean on re-reading AGENTS.md."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force."
      ]
    },
    {
      "version": "0.5.95",
      "date": "2026-07-11",
      "summary": "Cross-host hook parity complete: Codex now wires all five events, and opencode gets a JS plugin — every behavioral hook runs on all three hosts (one documented opencode limitation) (REQ-071).",
      "risk": "medium",
      "recommendation": "safe_to_update",
      "changes": [
        "Phase 1b — Codex: .codex/hooks.json now also wires PreToolUse -> prd_precommit_gate and PostToolUse -> prd_log_skill, completing all five events (SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, Stop). Confirmed Codex uses the same PreToolUse payload shape (tool_name / tool_input.command / cwd) and the same exit-2 block as Claude, so the shared scripts run unchanged — no adapter needed.",
        "Phase 2 — opencode: new .opencode/plugins/prd-hooks.js (auto-discovered) wires session.idle -> prd_session_report (version-check refresh) + prd_drift_check + archive, and tool.execute.before -> prd_precommit_gate (throws to block a red git commit). It shells out to the same shared .prd_plugin/hooks/ scripts, fail-open.",
        "Host limitation, documented: opencode's session.idle is a notification, not a vetoable Stop, so run-until-done cannot be ENFORCED on opencode — the guard degrades to a printed reminder. Every other behavior reaches full parity across Claude, Codex, and opencode. Config was already host-agnostic."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force.",
        "Codex repos get the full hook set from .codex/hooks.json; opencode repos get .opencode/plugins/prd-hooks.js. No action needed. Only opencode run-until-done is unavailable (host limitation) — every other monitor/mode works on all three hosts."
      ]
    },
    {
      "version": "0.5.94",
      "date": "2026-07-11",
      "summary": "Cross-host hook parity, Phase 1: Codex now gets the routing nudge, run-until-done stop guard, session report + version check, and drift check — the same behaviors Claude has, via shared host-neutral hook scripts (REQ-071).",
      "risk": "medium",
      "recommendation": "safe_to_update",
      "changes": [
        "Previously Claude got 6 behavioral hooks, Codex got 1 (archive), opencode got 0 — while config was already host-agnostic, so a Codex/opencode repo honored none of the run-until-done/drift/version behaviors its config enabled. Grounded that both hosts can reach parity: Codex supports SessionStart/UserPromptSubmit/PreToolUse/PostToolUse/Stop; opencode exposes session.idle and tool.execute.before.",
        "New shared host-neutral hook scripts under .prd_plugin/hooks/ (byte-identical to .claude/hooks/), installed for all hosts. .codex/hooks.json now wires SessionStart+UserPromptSubmit -> prd_nudge, and Stop -> prd_stop_guard + prd_session_report (version-check refresh) + prd_drift_check + archive. Claude wiring is unchanged.",
        "This is Phase 1: the four portable, no-payload behaviors. Phase 1b (precommit_gate PreToolUse deny + log_skill PostToolUse parse — they need a per-host event-payload adapter) and Phase 2 (an opencode JS plugin wired to session.idle + tool.execute.before) follow."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force.",
        "Codex repos now get the nudge, run-until-done guard, drift check, and version-check refresh from .codex/hooks.json — no action needed. opencode hook parity and the Codex precommit/log hooks are still pending (Phase 1b/2)."
      ]
    },
    {
      "version": "0.5.93",
      "date": "2026-07-11",
      "summary": "One documented, validated contract for toggling every PRD Plugin monitor/mode from JSON — prd_config.py with a canonical registry + get/set/list, so external apps have a stable surface (REQ-070).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Every toggle was already a .prd_plugin/config.json key; new scripts/prd_config.py turns them into one contract. A canonical TOGGLES registry declares each toggle's dotted key, type, default, allowed values, and what it controls. get/set/list read and write config.json, validating types and enum values on set and preserving the file's indentation/newlines/BOM.",
        "prd_config.py list --json is the machine-consumable surface: an external app (AI-Collab, a dashboard) reads it to discover every toggle and its current value, then set to change one — no need to know each dotted path or risk a bad value. New /prd-config command (list | get <key> | set <key> <value>).",
        "Covered toggles: automation.autonomy_level, automation.autonomous_run_until_done, automation.autonomous_continue_cap, automation.precommit_gate, automation.graph_auto_refresh, automation.version_check.enabled/ttl_hours, drift.monitoring.enabled/on_stop/export.enabled/export.path, and knowledge.llm_wiki.enabled."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force.",
        "External apps: read python .prd_plugin/scripts/prd_config.py list --json for the toggle registry + current values, and set <key> <value> to change one. The Claude hooks' own enable/disable still lives in .claude/settings.json (via prd_hooks), but every behavior they drive is in this registry."
      ]
    },
    {
      "version": "0.5.92",
      "date": "2026-07-11",
      "summary": "The drift-event feed can now be exported to a committed, shared path so drift history travels with the repo — toggleable, default off (REQ-069).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "New drift.monitoring.export {enabled (default false), path (default .prd_plugin/drift/events.jsonl)}. When enabled, every drift event is ALSO appended to that committed, tracked path in addition to the local gitignored feed — so drift history travels with the repo and shared tools (AI-Collab, dashboards) can read it across machines/clones. .prd_plugin/drift/ is not gitignored (only .prd_plugin/local/ is).",
        "Toggle with /prd-drift export on|off (prd_hooks.py drift export on|off). The export append is best-effort and never breaks a drift run."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force.",
        "Enable with /prd-drift export on to start writing .prd_plugin/drift/events.jsonl (commit it if you want the history shared). Custom path via drift.monitoring.export.path."
      ]
    },
    {
      "version": "0.5.91",
      "date": "2026-07-11",
      "summary": "Agents now automatically know when a newer PRD Plugin is published: a cached, fail-open npm version check surfaced in the session-start nudge and /prd-status (REQ-068).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "New downstream-installable scripts/prd_version_check.py queries npm for the latest prd-plugin version, compares it to the installed version, and reports update_available. The result is cached in .prd_plugin/local/version-check.json with a TTL (default 24h) so npm is queried at most once per TTL; the whole thing is fail-open and network-optional (no npm / no network / bad response -> no-update, never an error).",
        "Surfacing: the session-start nudge prints 'update available: X (you're on Y). Run: npm update prd-plugin && npx prd-install . --force' when the cache says so (cache-only, no network at session start), and /prd-status shows a Plugin version section. The cache is refreshed on Stop by prd_session_report.py (TTL-gated, fail-open), so the nudge always reads a warm cache.",
        "Toggle with the new /prd-version command (status | check | on | off) or automation.version_check.enabled (default on) / ttl_hours / package. npm is resolved cross-platform (npm.cmd on Windows).",
        "Note: the hub-only version_advice.py compares against the hub checkout and can't see npm from downstream — this is the downstream-installable, npm-aware counterpart."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force.",
        "After a stop or two the version cache warms and the nudge/status will tell you when a newer plugin is available. Force a check with /prd-version check; disable with /prd-version off (or automation.version_check.enabled=false)."
      ]
    },
    {
      "version": "0.5.90",
      "date": "2026-07-11",
      "summary": "Drift monitor now writes a compact, versioned, append-only drift-event feed (events.jsonl) that AI-Collab or any tool can consume, with a reader (REQ-067).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Every drift run (session start/end, delta, stop_check, manual snapshot) appends one compact line to .prd_plugin/local/drift/events.jsonl — a stable schema_version 1.0 event: event_id, timestamp, type, plugin_version, drift_score, total_findings, by_validator {name: count}, archetypes[]. No inline findings; the verbose per-validator detail stays in snapshots.jsonl. This is the supported surface for external consumers (AI-Collab, dashboards, other agents) to use drift as they see fit.",
        "Reader: drift_monitor.py --log [--limit N] [--format json|markdown] prints the feed (independent of whether monitoring is currently enabled), and read_drift_events(repo_root, limit) is the programmatic entry point.",
        "load_plugin_version now falls back to .prd_plugin/config.json's plugin.installed_version, so drift events are version-stamped in downstream repos that have no host plugin manifest.",
        "Schema documented in the wiki (Optional Integrations). The feed is gitignored per-clone runtime telemetry, consumed in-place on the same checkout."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force.",
        "Consumers read .prd_plugin/local/drift/events.jsonl (JSONL, one event per line, schema_version 1.0) or run python .prd_plugin/scripts/drift_monitor.py --log. If you want drift history committed/exported so it travels with the repo, that is a deliberate follow-on — the feed is local-only today."
      ]
    },
    {
      "version": "0.5.89",
      "date": "2026-07-11",
      "summary": "Fix: the /prd-drift command (0.5.88) only shipped to root commands/ and never reached downstream. Now in all command locations, with a parity test (REQ-066).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Slash commands ship via templates/repo-skeleton/.claude/commands/; the /prd-drift command added in 0.5.88 was only placed in root commands/, so downstream installs never got it (the config flag and prd_hooks drift subcommand still worked). prd-drift.md is now in all three command locations.",
        "Strengthened test_slash_commands to enforce full parity — every command present in any location must be present in all three — so a command that would miss the downstream path fails the suite. The old test only checked two named commands, which is why the gap slipped."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force. If you installed 0.5.88 and /prd-drift was missing, this restores it."
      ]
    },
    {
      "version": "0.5.88",
      "date": "2026-07-11",
      "summary": "Drift monitor coverage refreshed + an opt-in on-Stop drift check: end-of-turn detection of tracking/docs/traceability drift, surfaced into context, toggled by /prd-drift (REQ-065).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "The drift monitor's validator set had drifted — frozen at 5 while prd-plugin grew new detectors. It now also runs prd_gate (the composed gate + its newer checks incl. unsubmitted_plugin_request/duplicate_id/graduated_to/stranded_outbox/version-drift), prd_self_audit (docs-vs-reality drift), prd_graph --gaps (traceability drift), and staleness_audit (stale REQ/TRK/HLT). The finding categorizer gained matching archetype patterns. Command construction is factored into a testable validator_command().",
        "New opt-in on-Stop drift check: when drift.monitoring.on_stop is enabled (default OFF), the prd_drift_check.py Stop hook runs a cheap subset — state_consistency_check + staleness_audit + prd_self_audit + prd_graph — and surfaces a one-line drift summary into context instead of leaving it in silent JSONL. Observation-only: it never blocks a stop and fails open. The heavy gap_audit/release_check scans stay in the full run / session-close / CI.",
        "Toggle with the new /prd-drift command (on|off|status|run) or drift.monitoring.on_stop in config. prd_hooks.py gains a `drift on|off|status` subcommand; turning it on also enables monitoring.",
        "config.drift.monitoring gains on_stop (default false) and on_stop_validators; the full validators list is refreshed to the new set."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force.",
        "The on-Stop drift check is OFF by default — no cost unless you turn it on. Enable with /prd-drift on (or set drift.monitoring.on_stop true). It runs a cheap subset every turn and prints a one-line summary when drift is found.",
        "Run the full monitor any time with /prd-drift run (python .prd_plugin/scripts/drift_monitor.py --snapshot)."
      ]
    },
    {
      "version": "0.5.87",
      "date": "2026-07-11",
      "summary": "LLM wiki schema now records git commit provenance: each article stamps the short SHA its knowledge was compiled against, so readers can see how current an article is relative to HEAD (REQ-064).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "The wiki article and archive templates gain a `Commit:` metadata field — the repo's short SHA the article's knowledge was compiled/verified against (or `unknown` when not a git repo). This is a schema-level change, so every downstream wiki carries it.",
        "project-llm-wiki records it: Ingest/Backfill stamp each touched article's Commit with `git rev-parse --short HEAD`, the log entries carry the commit (`ingest | <title> @ <sha>`), and Lint gains a heuristic that flags articles whose Commit is many commits behind HEAD as re-ingest candidates. Conventions document the field.",
        "prd_wiki_backfill.py --plan now emits `head_commit` so the backfill stamps articles with the right SHA.",
        "Dogfood: the hub's own 15+ wiki articles were stamped with their compile commit."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force.",
        "Existing wiki articles without a Commit field are not rewritten automatically; they gain one the next time they are ingested/updated, or run a Lint pass and stamp them with the current HEAD."
      ]
    },
    {
      "version": "0.5.86",
      "date": "2026-07-11",
      "summary": "The wiki backfill surveyor no longer counts generated report artifacts as repo knowledge: request-report/ (incl. its calibration report trees) and docs/evidence/ are excluded from the backfill plan (REQ-063).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "scripts/prd_wiki_backfill.py: added request-report to SKIP_DIRS (covering its nested long-run-drift-calibration report trees) and a ('docs','evidence') anchored path-prefix skip, so build_plan no longer surveys generated request reports (107 files in the hub repo) or captured evidence records as code/docs knowledge.",
        "scripts/prd_install.py: mirrored the same exclusions in flag_wiki_backfill_if_needed so a repo holding only generated report output is not misclassified as an 'established' repo to flag for backfill.",
        "tests/test_wiki_backfill.py: added a test asserting build_plan excludes request-report/ (and its calibration tree) and docs/evidence/ while still surveying real authored docs."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force (leave --yes off to keep your state; REQ-054).",
        "Only affects the wiki backfill plan; no downstream state or wiki content changes. If you already generated a backfill plan, re-run python .prd_plugin/scripts/prd_wiki_backfill.py --plan for the cleaner inventory."
      ]
    },
    {
      "version": "0.5.85",
      "date": "2026-07-11",
      "summary": "Fix: /prd-status and the MCP prd_status tool crashed on Windows on any repo with a pending wiki backfill — a non-cp1252 glyph raised UnicodeEncodeError. Output is now console-safe (REQ-062).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "prd_status.py's wiki-backfill-pending line printed U+26A0 (warning triangle), which the Windows console codepage (cp1252) cannot encode, so print() raised UnicodeEncodeError and took down both /prd-status and the MCP prd_status tool (which shells out to the script). The line is now ASCII, and prd_status.main reconfigures stdout to UTF-8 with backslashreplace so a stray glyph can never crash the status tool again. Introduced in 0.5.84; reported by a downstream repo that filed it upstream with an exact diagnosis rather than patching locally.",
        "Fixed the same class in prd_precommit_gate.py, which printed U+2192 (right arrow) in its block message (hub + skeleton copies).",
        "New tests/test_windows_console_safe.py scans scripts/*.py and the Claude hooks for cp1252-unencodable characters and asserts prd_status's rendered output is cp1252-safe, so this class of Windows crash cannot recur."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force (leave --yes off to keep your state).",
        "If you were on 0.5.84 and saw /prd-status or the status tool crash after an update, this is the fix — the crash only occurred when a wiki backfill was pending."
      ]
    },
    {
      "version": "0.5.84",
      "date": "2026-07-11",
      "summary": "Established repos that update into the LLM wiki now get a deep backfill path: prd-install flags it, a read-only surveyor plans it, and project-llm-wiki gains a Backfill mode (REQ-061).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "prd-install now flags an established repo that just gained the LLM wiki (wiki enabled, no wiki/ yet, real source or docs present) by writing .prd_plugin/local/wiki-backfill-needed. Fresh scaffolds, repos that disabled the wiki, and repos that already built one get no marker. Lazy init still covers new repos.",
        "New read-only scripts/prd_wiki_backfill.py (downstream_runtime): --plan inventories the repo — code modules, docs, README, .prd_plugin state (requests/decisions/changelog/evidence), recent git-history themes, and memory — and proposes one-level wiki topics so the backfill is grounded and complete rather than guesswork; --status reports whether a backfill is pending. It writes nothing to the repo.",
        "The session-start nudge surfaces a pending backfill (with the exact command), and /prd-status shows a 'backfill pending' line, so the work is not silently skipped. In autonomous mode the agent runs it.",
        "project-llm-wiki gains a Backfill mode: survey via the script, initialize, compile broad grounded coverage across the proposed topics (cite the REQ-*/DEC-*/EV- that produced knowledge), build the index, log a backfill entry, lint, then delete the marker."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force (leave --yes off to keep your state; REQ-054).",
        "On the first install that adds the wiki to an existing repo, you'll see a backfill prompt in the nudge and /prd-status. Run: python .prd_plugin/scripts/prd_wiki_backfill.py --plan, then have the agent compile the wiki via the project-llm-wiki Backfill mode.",
        "The marker lives in .prd_plugin/local/ (per-clone, gitignored). Delete it (or let the Backfill mode delete it) once the wiki is built."
      ]
    },
    {
      "version": "0.5.83",
      "date": "2026-07-11",
      "summary": "New project-llm-wiki skill (MIT, Yuhan Lei's karpathy-llm-wiki): each downstream repo builds and maintains its own compounding knowledge base — queried before re-deriving, ingested as work closes (REQ-060).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added the project-llm-wiki skill — an ingest/query/lint knowledge base of durable domain and codebase knowledge, living at each downstream repo's own root as raw/ (immutable sources) + wiki/ (compiled articles with an index and append-only log). Adapted from the MIT-licensed Astro-Han/karpathy-llm-wiki by Yuhan Lei; LICENSE ships with the skill and attribution is recorded in THIRD_PARTY_NOTICES.md. The wiki is deliberately distinct from .prd_plugin/state (ID-tracked work), project-memory (session lessons), and the traceability graph: it is the human- and agent-readable knowledge you query before re-deriving and ingest into when work closes.",
        "Wired to run automatically, not only on 'add to wiki': the session-start nudge tells agents to query the wiki before re-deriving and ingest as work closes; project-session-close gains an ingest+lint step; project-verification-before-completion prompts an as-built ingest when significant work closes; the self-service (resolve-before-you-ask) doc lists the wiki as a first-class source; and project-decision-policy's router points knowledge capture/query at it.",
        "New config block knowledge.llm_wiki { enabled (default true), wiki_dir: 'wiki', raw_dir: 'raw' }. The wiki initializes lazily — nothing is created until the first ingest, so empty repos stay empty. Set enabled=false to opt out of the automatic behavior (explicit 'add to wiki' requests still work).",
        "Registered as downstream_runtime, installed by default, in all 7 skill mirrors + skill-install-scope + required_skills + docs/INSTALL-MATRIX (hub + skeleton). Verified by a live install that the skill lands downstream complete with its reference templates and LICENSE."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force (leave --yes off to keep your state; REQ-054).",
        "After updating, the wiki is created the first time an agent ingests knowledge into it — at your repo root as wiki/ + raw/. To keep it elsewhere, set knowledge.llm_wiki.wiki_dir / raw_dir. To disable, set knowledge.llm_wiki.enabled=false.",
        "The wiki is per-repo: each repo that uses PRD Plugin maintains its own; nothing is centralized in the hub."
      ]
    },
    {
      "version": "0.5.82",
      "date": "2026-07-10",
      "summary": "Autonomy tier is now standing consent to ship. In `autonomous`, agents commit/push/merge/tag/publish the work end-to-end (gate must be green); the hard floor — secrets, force-push, other repos, irreversible spend — still stops in every tier (REQ-059, DEC-001).",
      "risk": "medium",
      "recommendation": "safe_to_update",
      "changes": [
        "The consent floor was splitting nothing: it marked push/merge/publish 'never unlock, in any tier', so `autonomous` mode stopped at the exact step that ships the work. It is now two distinct things. (1) Shipping the sanctioned work — commit, push, merge to the work's own main, tag, and publish the package it produces to its configured remote/registry — is governed by automation.autonomy_level. In `autonomous` the tier IS the user's standing consent: ship and report, the one precondition being a green gate (never ship red). In `key_decision`/`guided`, explicit consent is still required before push/merge/publish. (2) A hard floor never unlocks in any tier including `autonomous`: committing or exposing secrets, force-push or history destruction, editing another repo/service you were not pointed at, and spending money or irreversible outward actions unrelated to the work.",
        "project-decision-policy (the autonomy authority) rewritten: Part 3 split into 'shipping the work' vs 'the hard floor', the tier table's `autonomous` row now grants end-to-end shipping, the Stage-1 gate routes shipping through the tier, and the red-flags call out stopping-to-ask-to-ship in autonomous and shipping-without-consent in the gated tiers. All 7 skill mirrors byte-identical.",
        "CLAUDE.md and AGENTS.md (hub + skeleton), project-git-workflow, and the self-service method doc restate the tiered floor consistently. Local commits on a work branch still never need consent in any tier.",
        "Recorded as DEC-001 (decided_by: user_requested) in a new .prd_plugin/state/decisions.json."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force (leave --yes off to keep your state; REQ-054).",
        "Default tier stays `key_decision` — nothing ships without asking unless you opt in. Set autonomous with: python scripts/prd_gate.py set-autonomy autonomous (downstream: python .prd_plugin/scripts/prd_gate.py ...). In that tier agents will push/merge/publish once the gate is green.",
        "Even in `autonomous`, force-push, editing another repo, committing secrets, and irreversible outward spend still stop for explicit consent."
      ]
    },
    {
      "version": "0.5.81",
      "date": "2026-07-10",
      "summary": "Requests about PRD Plugin itself now submit themselves. Filing a plugin bug through the MCP tool exports and delivers it upstream — no agent has to remember (REQ-058).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "prd_file_request now runs the submission pipeline on every filing. If the record names a plugin-owned surface (a prd_* script, a hook, a project-* skill, a method doc, the MCP server, the installer) it is flagged upstream_submission: true, exported as a sanitized package to .prd_plugin/outbox/, and delivered into the hub inbox when one is configured. Ordinary project requests are untouched. Before this, filing wrote a local record and stopped: request_export.py and request_import.py were manual scripts nothing ever called, and --upstream-hub defaulted to the string 'prd-plugin' rather than a location. 0.5.80's skill rule and gate warning were both 'please remember' layers over a transport with no engine.",
        "New scripts/request_autosubmit.py (downstream_runtime, installed by default) is that engine, usable standalone for records written outside the MCP tool: python scripts/request_autosubmit.py --request-id REQ-xxx. It imports prd_gate.PLUGIN_SURFACE_RE rather than copying it, so the classifier that files can never disagree with the classifier that warns. It preserves the target file's indent, line endings, and BOM, matching the MCP server's minimal-diff invariant. It never raises and never exits non-zero — a broken submission degrades to a package in the outbox (where the stranded_outbox check finds it), never to a lost filing.",
        "New optional config key requests.upstream_hub_path, and the PRD_UPSTREAM_HUB environment variable which overrides it. Delivery happens only when one of them names a directory that really is a prd-plugin hub checkout; configuring it is the consent to write there. An unset, missing, or mistyped path leaves the package in the outbox and says so. Nothing is ever written into a directory that is not a verified hub.",
        "prd_gate's unsubmitted_plugin_request warning now names request_autosubmit.py and the specific request id in its remediation, and notes that requests filed through the MCP tool submit themselves."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force. CAUTION: adding --yes on top of --force resets .prd_plugin/state to skeleton defaults — leave --yes off to keep your data (tracked as REQ-054).",
        "To have plugin bugs delivered rather than parked in your outbox, set PRD_UPSTREAM_HUB to your prd-plugin checkout, or requests.upstream_hub_path in .prd_plugin/config.json. Without it, submission still exports the package and the gate keeps warning until it is carried across.",
        "Requests already sitting unsubmitted in requests.json are not migrated automatically. Run scripts/request_autosubmit.py --request-id REQ-xxx once per warning the gate reports."
      ]
    },
    {
      "version": "0.5.80",
      "date": "2026-07-10",
      "summary": "Intake sweep: graph link-field coverage (REQ-055), positive commit discipline (REQ-056), and a gate warning that stops downstream PRD Plugin bug reports from dying in local state (REQ-057).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "prd_graph.py now maps the link fields the shipped implementation-plan template actually uses: validation_ids (validated_by), phase_id (in_phase), and applies_to (validates). Before this, every task built from templates/implementation-plan.json looked like an incomplete chain, and validations looked orphaned. Reported by GRAPH_LANG; their repro now yields zero incomplete chains. The regression test loads the shipped template as its fixture and asserts every task field is mapped, so a template field can never again go unmapped.",
        "Commit discipline is now a positive rule, not only a prohibition. project-git-workflow gains a 'Commit Discipline' section and AGENTS.md/CLAUDE.md (hub + skeleton) state it in the always-in-force list: the consent floor covers push, merge, publish, force-push, and other-repo edits — not local commits on a work branch. Reported by AI-Collab-v3, where 'never commit to main' plus 'do not ask the owner' collapsed into 'never commit', leaving verified work untracked.",
        "New prd_gate check unsubmitted_plugin_request (warning severity, hub-exempt): a REQ-* whose text names a plugin-owned surface (prd_*.py script, hook, project-* skill, method doc, the MCP server, the installer) but that has never been exported upstream is flagged on every gate run. project-request-intake and project-local-integration now make the rule unconditional — any request about PRD Plugin itself goes upstream whether or not the user asked. Previously the skills only mandated export 'when the user asks to report', so real plugin bugs sat in downstream requests.json forever."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force. CAUTION: adding --yes on top of --force resets .prd_plugin/state to skeleton defaults — leave --yes off to keep your data (tracked as REQ-054).",
        "After updating, run the gate once: it may warn about PRD Plugin bug reports already sitting unsubmitted in your requests.json. Export each with request_export.py, then import into the hub inbox."
      ]
    },
    {
      "version": "0.5.79",
      "date": "2026-07-02",
      "summary": "Stop guard multi-session fix (REQ-053, AI-Collab-v3 HLT-016): only the goal-owning session is ever blocked; spawned worker sessions opt out with PRD_STOP_GUARD=off.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "prd_stop_guard.py no longer conscripts unrelated sessions. Observed downstream: headless claude -p children inherited the Stop hook and were blocked toward a TRK goal they never owned — one recursively executed a test file for ~30 minutes, another committed the orchestrator's in-progress tree with false attribution. Two layers now: (1) hard opt-out — PRD_STOP_GUARD=off (or 0/false) or PRD_WORKER_SESSION=1 in the child env allows the stop unconditionally; (2) session ownership by default — the first session the guard blocks toward a goal owns it (persisted in .prd_plugin/local/stop-guard-state.json keyed by goal id); only that session_id is ever blocked, and the binding is pruned when the goal closes (incl. deferred/parked) or a new goal becomes active.",
        "Spawner contract documented in the guard docstring, project-decision-policy (all 7 copies), and AGENTS.md's Parallel Work section (hub + skeleton): set PRD_STOP_GUARD=off when launching child sessions.",
        "Correction to the downstream 0.5.78 tarball finding: the published tarball DOES contain the full hardening commit — the diff downstream saw was LF (npm/git-normalized) vs CRLF (local checkout), byte-identical after newline normalization. The manual overlay can be dropped as soon as this version is installed."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force. CAUTION: adding --yes on top of --force resets .prd_plugin/state to skeleton defaults — leave --yes off to keep your data (filed as REQ-054 to improve).",
        "Multi-agent spawners: set PRD_STOP_GUARD=off in every headless child session's environment."
      ]
    },
    {
      "version": "0.5.78",
      "date": "2026-07-02",
      "summary": "MCP state server: agents read/write .prd_plugin state through validated tools instead of hand-editing JSON (REQ-052). Bundled: stop-guard deferred/parked fix + status-vocabulary normalization.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added mcp/server.cjs (bin: prd-plugin-mcp): a zero-dependency CommonJS stdio MCP server with ten tools (prd_status, prd_next_id, prd_open_goal, prd_update_goal, prd_close_goal, prd_file_request, prd_record_evidence, prd_record_decision, prd_log_change, prd_validate). Hard invariants: server-side UTC timestamps (caller timestamps rejected), lock-guarded atomic registry ID allocation, schema validation with actionable errors, atomic indentation-preserving minimal-diff writes. Playbook-style tool descriptions drive adoption without reading the skills.",
        "prd-install copies the server to .prd_plugin/mcp/server.cjs and merges a prd-plugin entry into the repo's .mcp.json (idempotent, preserves existing servers). This is also the missing write path for headless sub-agents.",
        "prd_status and prd_validate shell out to the canonical prd_status.py/prd_gate.py so output matches /prd-status and the commit gate exactly; the gate stays as backstop and its duplicate-id error now points offenders at prd_next_id.",
        "Stop-guard fix: CLOSED_STATUSES now includes deferred/parked (a parked goal no longer keeps the run-until-done loop demanding work the owner deferred).",
        "Status vocabulary normalized (open/active/complete/resolved/deferred/parked/superseded) with legacy mapping on read in prd_status, so older in_progress/wip/done records are never silently hidden.",
        "Skills reference the tools where relevant (project-memory, project-verification-before-completion, project-decision-policy); README documents the tools and .mcp.json wiring.",
        "Hardening audit loop (2 rounds, ~35 findings fixed): owner-token lock with atomic rename takeover now serializes ALL state writes (concurrent open_goal loses no records; crashed holders never fail a single call); close_goal verifies the EV actually exists; malformed state burns no IDs; registry-behind collisions rejected with a repair hint; nested timestamp/ID smuggling blocked (commands items, linked_ids elements incl. BR slug IDs); CRLF/BOM preserved; rename retried under antivirus holds; installer never clobbers unparseable or wrong-typed .mcp.json/settings.json, skips rewrites when already configured, and dry-run discloses all root-level writes; consistency check honors ids.zero_pad; hook mirror tests assert byte equality; server VERSION drift-guarded."
      ],
      "upgrade_notes": [
        "Adopt with: npm update prd-plugin && npx prd-install . --force (writes .prd_plugin/mcp/server.cjs and merges .mcp.json).",
        "Claude Desktop .mcpb packaging is deliberately deferred (Phase 3 of REQ-052); the design notes carry the packaging rules."
      ]
    },
    {
      "version": "0.5.77",
      "date": "2026-06-24",
      "summary": "Claude is now plugin-primary: a --claude install delivers skills via the enabled plugin, not by copying project .claude/skills (REQ-051). --claude-skills is the escape hatch.",
      "risk": "medium",
      "recommendation": "review_before_update",
      "changes": [
        "prd_install.py: --claude no longer copies project .claude/skills. Skills are delivered by the per-repo enabled plugin (0.5.76 config). The skeleton no longer plants .claude/skills at all — install_skills is the canonical writer — which also removes that cruft from non-Claude installs.",
        "New --claude-skills escape hatch installs the project-level .claude/skills copy for repos that want a repo-pinned set instead of the plugin.",
        ".claude/commands and .claude/settings.json (hooks) still install on --claude. Fixed: main() dropped --claude-skills when building options (the CLI escape hatch silently no-op'd); added a CLI-path regression test."
      ],
      "upgrade_notes": [
        "Behavior change: re-running npx prd-install . --claude --force will stop maintaining a project .claude/skills copy; skills come from the enabled plugin (trust the repo + /reload-plugins). Pass --claude-skills to keep the old project-copy behavior.",
        "Part of the per-provider delivery redesign (docs/design/per-provider-delivery.md, Phase 2). Phases 1/3/4 follow."
      ]
    },
    {
      "version": "0.5.76",
      "date": "2026-06-24",
      "summary": "Claude installs now enable the plugin per-repo (committed extraKnownMarketplaces + enabledPlugins) so it's scoped to the repo, not global (REQ-050).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "prd_install.py merges the documented repo-scoped plugin config into the target .claude/settings.json on a Claude install: extraKnownMarketplaces['prd-plugin'] (github markusuk1/prd-plugin) + enabledPlugins['prd-plugin@prd-plugin']=true. Additive merge preserves existing keys; only on --claude.",
        "This makes the plugin enabled per-repo (project scope, committed) with namespaced skills (prd-plugin:project-*) and no global noise. Toggle on/off with the native /plugin enable|disable prd-plugin@prd-plugin."
      ],
      "upgrade_notes": [
        "Re-run npx prd-install . --claude --force to write the plugin config into an existing repo's .claude/settings.json. Trust the repo folder so Claude Code offers/installs the marketplace; reload with /reload-plugins."
      ]
    },
    {
      "version": "0.5.75",
      "date": "2026-06-24",
      "summary": "Reinforce skill use in AGENTS.md + CLAUDE.md: instructions not FYI; invoke the matching skill, don't work from memory (which drifts after compaction) (REQ-049).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "AGENTS.md gains a 'Use the skills — don't work from memory' directive (it had none; this is the file Codex/opencode read). When a task matches a skill, open and follow the SKILL.md rather than reconstructing the method from memory.",
        "CLAUDE.md's existing skill-use line is reinforced with the same point: these files and the nudge are instructions not FYI, and after a compaction or two your recollection drifts — the SKILL.md is the source of truth.",
        "Targeted, not blanket: a trivial one-line answer needs no ritual skill invocation. Hub + skeleton."
      ],
      "upgrade_notes": [
        "Docs only. Re-run npx prd-install . --force to refresh AGENTS.md/CLAUDE.md."
      ]
    },
    {
      "version": "0.5.74",
      "date": "2026-06-24",
      "summary": "Hard enforcement lever: a PreToolUse pre-commit gate that blocks `git commit` when prd_gate finds errors (REQ-048, opt-in).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added .claude/hooks/prd_precommit_gate.py (PreToolUse[Bash]): when a `git commit` is about to run, it runs prd_gate and blocks the commit (exit 2 + findings) if any error-severity finding exists (duplicate IDs, version drift, implemented-without-graduated_to, stranded outbox, state inconsistency). The hard lever — it walls off the commit until the workflow's outputs are clean rather than forcing a skill call.",
        "Opt-in and fail-open: only active when automation.precommit_gate is true (default false in templates/skeleton; true in the hub's own config to dogfood). Only inspects `git commit`; warnings don't block; a missing gate or any error resolves to ALLOW so a hook bug can never trap commits.",
        "Wired into PreToolUse in settings.json (hub + skeleton); /prd-hooks description updated."
      ],
      "upgrade_notes": [
        "Off by default. To enable hard commit enforcement in a repo, set automation.precommit_gate: true in .prd_plugin/config.json and reload the Claude Code session (hooks load at session start)."
      ]
    },
    {
      "version": "0.5.73",
      "date": "2026-06-24",
      "summary": "Stop the installer planting/overwriting a downstream repo's README with the plugin's own 'PRD Plugin' README (REQ-047).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Removed templates/repo-skeleton/README.md — the skeleton was shipping a copy of the hub's own '# PRD Plugin' README, planted at the downstream repo root.",
        "prd_install.py never overwrites a downstream README.md, even with --force (NEVER_OVERWRITE_DOWNSTREAM guard). --force is the recommended upgrade command, so it was silently clobbering project READMEs and making agents think the repo was the plugin."
      ],
      "upgrade_notes": [
        "Re-run npx prd-install . --force; it will no longer touch your README. If a prior --force already overwrote your README with the plugin's, restore it from git history (the installer will now leave it alone)."
      ]
    },
    {
      "version": "0.5.72",
      "date": "2026-06-24",
      "summary": "Surface the decision-quality bar (Correct/Proper/Robust + Verifiable/Aligned/Proportionate/Consistent) in AGENTS.md and CLAUDE.md (REQ-046).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added a one-line 'Decision-quality bar' rule to the always-in-force blocks of AGENTS.md and CLAUDE.md (hub + skeleton), naming the seven criteria and pointing to project-decision-policy Stage 2.",
        "No change to the bar itself — it's hoisted into the files that are read every turn (vs only when the skill is consulted) so it's seen by default."
      ],
      "upgrade_notes": [
        "Docs only. Re-run npx prd-install . --force to refresh AGENTS.md/CLAUDE.md."
      ]
    },
    {
      "version": "0.5.71",
      "date": "2026-06-24",
      "summary": "Stop agents nagging the user to wrap up / close the session — session length and context pressure are not reasons to stop (REQ-045).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "prd_nudge.py no longer fires 'run project-session-close ... at the end' on every prompt (context-pressure bait to wrap up early); it now instructs to update tracking silently and never tell the user to wrap up/hand off/close — keep working until the task is done or the user stops you.",
        "Added a 'Never nag the user to stop' section to reporting.md and matching rules to AGENTS.md + CLAUDE.md (hub + skeleton): session length / context pressure are never reasons to stop; the harness compacts context automatically. project-session-close is user-invoked, never agent-pushed.",
        "project-decision-policy gains a red flag for wrap-up/close nagging; CLAUDE.md skill table reframes session-close as user-invoked. Mirrored to all 7 skill copies."
      ],
      "upgrade_notes": [
        "Docs/hook only. Re-run npx prd-install . --force to refresh the nudge hook, AGENTS.md/CLAUDE.md, reporting.md, and the decision-policy skill."
      ]
    },
    {
      "version": "0.5.70",
      "date": "2026-06-24",
      "summary": "'Resolve before you ask' rule: agents must self-serve findable facts (repo/history/tracking/.env/web) before stopping to ask the user (REQ-044).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added .prd_plugin/method/self-service.md: before asking a factual question, exhaust repo precedent + git history, the tracking/decision/plan records, local files (.env/config/README), and web tools; only then ask, stating what you checked.",
        "Added a 'Resolve Before You Ask' section to AGENTS.md and a matching bullet to CLAUDE.md (hub + skeleton).",
        "project-decision-policy gains a Stage 0 self-service gate (before any escalation) and a red flag for asking findable facts; mirrored to all 7 skill copies."
      ],
      "upgrade_notes": [
        "Docs/method only. Re-run npx prd-install . --force to refresh AGENTS.md/CLAUDE.md, the decision-policy skill, and the new self-service.md."
      ]
    },
    {
      "version": "0.5.69",
      "date": "2026-06-24",
      "summary": "Hardening pass on the audit findings: fix the graph gap bug, fix the Stop-guard no-op + defeated cap, and close doc/robustness gaps (REQ-043).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "prd_graph.py: map the REAL artifact link fields (source, sources, source_prd_id, satisfies, validation, tasks, acceptance_criteria, ...) plus structural document->record 'contains' edges. Fixes the bug where every IMP-TASK was falsely flagged 'task_without_validation' and requirements/validations showed as orphans. Gap rule is now 'requirement_without_coverage' (no ARCH/IMP downstream) and skips orphans; malformed state files are surfaced in findings.unreadable instead of silently dropped. Test fixture rewritten to the real schema.",
        "prd_stop_guard.py: the per-session continue counter is now cumulative (it reset every natural stop before, so the cap never bit) and written atomically; active_goal() prefers the most-recently-updated open goal to avoid latching onto a stale one. Added main() tests (stdin, counter, cap, pause-clear).",
        "Wired the active-goal workflow so the guard has something to key on: /prd-track and project-memory now set TRK type: goal; project-decision-policy tells agents to open a goal at task start and documents the autonomy-pause escape, which project-blocker-resolution now also describes.",
        "Robustness: atomic+guarded config write in prd_graph --set-auto; gap_audit guards a missing/malformed/non-dict config; prd_status reads the skill log as utf-8-sig; prd_gate --reversible/--irreversible is now a real mutually-exclusive flag; router lists the admin slash commands."
      ],
      "upgrade_notes": [
        "Re-run npx prd-install . --force. Known deferred item: the hooks invoke `python` (fine on Windows); making the interpreter portable to `python3`-only hosts needs an installer change, tracked separately."
      ]
    },
    {
      "version": "0.5.68",
      "date": "2026-06-24",
      "summary": "Autonomous run-until-done Stop guard: in autonomous tier, keep working toward the active goal instead of stopping for pointless checkpoints (REQ-042).",
      "risk": "medium",
      "recommendation": "review_before_update",
      "changes": [
        "Added .claude/hooks/prd_stop_guard.py: a deterministic Stop hook that, in autonomous tier, blocks the stop and forces continuation while an active TRK-* goal is open, no pause is requested, and the per-session continue cap is not hit. Reads real state (not the transcript), so it can't be fooled by a premature 'done'.",
        "Respects the consent floor: writing .prd_plugin/local/autonomy-pause (and filing a blocker) lets the session stop; the injected continue message teaches this escape. Any error allows the stop — it never traps the session.",
        "Config: automation.autonomous_run_until_done (default true) and automation.autonomous_continue_cap (default 25). Disable via the flag, by leaving autonomous tier, or /prd-hooks disable.",
        "Wired into the Stop hooks (hub + skeleton) alongside the auto-report; documented in project-decision-policy (all 7 skill copies)."
      ],
      "upgrade_notes": [
        "Only active in autonomous tier with hooks enabled. Default tier is key_decision, so existing repos are unaffected until they opt into autonomous.",
        "Forcing continuation runs unattended turns and spends tokens; the continue cap, autonomous-only gate, and pause escape bound it. Re-run npx prd-install . --force to install the guard."
      ]
    },
    {
      "version": "0.5.67",
      "date": "2026-06-24",
      "summary": "Machine-first traceability graph with AI-Collab-v3 compatibility (REQ-041): /prd-graph + prd_graph.py.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added scripts/prd_graph.py: read-only graph over .prd_plugin state — one node per ID, directed {cause,effect,rel} edges, both-direction adjacency, provenance/impact traversal, and gap detection (requirements with no task, tasks with no validation/evidence).",
        "Edges are keyed by the shared PRD Plugin IDs and labeled, so --format cause-effect emits AI-Collab-v3's {cause,effect,label} causal-edge shape for direct ingestion.",
        "Added /prd-graph (build/query/gaps/impact/why/export/auto) in .claude/commands, top-level commands/, and the skeleton; prd_graph.py registered downstream_runtime and added to both INSTALL-MATRIX script tables.",
        "Optional auto-refresh: automation.graph_auto_refresh (default false) regenerates the graph in the existing Stop hook; toggle with /prd-graph auto on|off (prd_graph.py --set-auto). No new always-on behavior unless opted in."
      ],
      "upgrade_notes": [
        "Re-run npx prd-install . --force to add prd_graph.py and the /prd-graph command. Graph generation is on-demand; auto-refresh stays off until you enable it."
      ]
    },
    {
      "version": "0.5.66",
      "date": "2026-06-24",
      "summary": "Make agent reports plain-language-first and stop autonomous agents asking permission to continue planned work (REQ-040).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added .prd_plugin/method/reporting.md: lead with a plain-English summary, never open with ID codes, and in autonomous tier don't end a completed step with 'shall I proceed?' / 'which would you prefer?'.",
        "Added a 'Reporting To The User' section to AGENTS.md and a 'Plain-language reporting' bullet to CLAUDE.md (hub + skeleton).",
        "project-decision-policy now states 'continuing the planned work is not a decision' and red-flags both leading with IDs and asking permission to continue in autonomous; mirrored to all 7 skill copies."
      ],
      "upgrade_notes": [
        "Re-run npx prd-install . --force to refresh AGENTS.md/CLAUDE.md, the decision-policy skill, and the new reporting.md method doc."
      ]
    },
    {
      "version": "0.5.65",
      "date": "2026-06-23",
      "summary": "Document that agents may self-manage subagents / parallel agents / agent teams (REQ-039); the plugin does not orchestrate.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added a 'Parallel Work And Subagents' section to AGENTS.md (hub + skeleton): read-only fan-out is unrestricted; single writer to .prd_plugin/state and the ID registry; isolate parallel edits in worktrees; every subagent inherits the consent floor and the method.",
        "Added a matching 'Parallel work' bullet to CLAUDE.md (hub + skeleton).",
        "PRD Plugin ships no orchestration engine — host agents decide when to fan out and manage it themselves."
      ],
      "upgrade_notes": [
        "Docs-only; re-run npx prd-install . --force to refresh the downstream AGENTS.md/CLAUDE.md rules."
      ]
    },
    {
      "version": "0.5.64",
      "date": "2026-06-23",
      "summary": "Tracking/admin slash commands and a read-only one-screen status helper (REQ-038).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added scripts/prd_status.py: read-only one-screen status (requests by status, active tracking, open health, stale items, skill-usage summary, autonomy level).",
        "Added /prd-status and /prd-report (script-backed) and /prd-new, /prd-track, /prd-close (workflow-guided) slash commands.",
        "Commands ship in .claude/commands/ (repo-local) and top-level commands/ (marketplace plugin); prd_status.py registered as downstream_runtime."
      ],
      "upgrade_notes": [
        "Re-run npx prd-install . --force to add the commands and prd_status.py."
      ]
    },
    {
      "version": "0.5.63",
      "date": "2026-06-21",
      "summary": "Sync the stale downstream INSTALL-MATRIX doc to the hub (doc-drift fix).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Synced templates/repo-skeleton/docs/INSTALL-MATRIX.md to the current hub doc (claude column, new skills/scripts, 5 install options)."
      ],
      "upgrade_notes": [
        "Docs-only; re-run npx prd-install . --force to refresh the downstream INSTALL-MATRIX copy."
      ]
    },
    {
      "version": "0.5.62",
      "date": "2026-06-21",
      "summary": "Slash commands to switch autonomy modes and toggle the Claude hooks (REQ-037).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added /prd-autonomy [level] (prd_gate.py set-autonomy) and /prd-hooks [status|enable|disable] (new prd_hooks.py, which stashes/restores the .claude/settings.json hooks block).",
        "Commands ship in .claude/commands/ (repo-local) and top-level commands/ (marketplace plugin)."
      ],
      "upgrade_notes": [
        "Re-run npx prd-install . --force to add the commands and prd_hooks.py.",
        "Hook enable/disable takes effect in the next Claude Code session."
      ]
    },
    {
      "version": "0.5.61",
      "date": "2026-06-21",
      "summary": "Auto-generate the skill-usage report via a Stop hook — no manual script run (REQ-036).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added a Claude Code Stop hook (.claude/hooks/prd_session_report.py) that regenerates .prd_plugin/local/skill-usage-report.md every turn.",
        "Kept to the fast skill-usage report; heavier validators stay in CI / on demand."
      ],
      "upgrade_notes": [
        "Re-run npx prd-install . --force to add the Stop auto-report hook.",
        "Read .prd_plugin/local/skill-usage-report.md after a session."
      ]
    },
    {
      "version": "0.5.60",
      "date": "2026-06-21",
      "summary": "Skill-usage observability: capture which skills an agent uses and report it (REQ-035).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added a Claude Code PostToolUse hook (.claude/hooks/prd_log_skill.py) logging each skill invocation to .prd_plugin/local/skill-usage.jsonl.",
        "Added scripts/skill_usage_report.py (downstream_optional): a timeline + per-session summary joining skill usage with the ID records, flagging work shipped without logged verification/TDD skill use."
      ],
      "upgrade_notes": [
        "Re-run npx prd-install . --force to add the logger hook.",
        "Capture is Claude Code-specific; the report is host-agnostic; the log is gitignored under .prd_plugin/local/."
      ]
    },
    {
      "version": "0.5.59",
      "date": "2026-06-21",
      "summary": "Close the Claude-vs-Codex skill-usage gap: hub .claude/skills mirror + CLAUDE.md routing + a nudge hook (REQ-034).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added the hub root .claude/skills mirror (Codex and opencode had root mirrors; Claude did not).",
        "Added a per-task skill routing map to CLAUDE.md (hub + skeleton) plus 'consult project-decision-policy first'.",
        "Added a Claude Code nudge hook (.claude/settings.json + .claude/hooks/prd_nudge.py) on SessionStart and UserPromptSubmit. Nudge only; hard enforcement stays in prd_gate."
      ],
      "upgrade_notes": [
        "Re-run npx prd-install . --force to add the Claude nudge hook, CLAUDE.md routing, and .claude/skills.",
        "The nudge takes effect in a fresh Claude Code session."
      ]
    },
    {
      "version": "0.5.58",
      "date": "2026-06-21",
      "summary": "Added project-change-request: a mid-development change orchestrator (REQ-033).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added project-change-request: classifies a mid-development add/change/remove/defer ask, captures it (REQ/DBR/DEC), confirms scope per the autonomy tier, and cascades it through brainstorm -> PRD -> architecture -> implementation plan with a traceability sync.",
        "Routed mid-development changes to the new skill in project-decision-policy."
      ],
      "upgrade_notes": [
        "Re-run npx prd-install . --force to add project-change-request."
      ]
    },
    {
      "version": "0.5.57",
      "date": "2026-06-21",
      "summary": "Grounding (anti-hallucination) rules, a CLAUDE.md per host, and a no-timescales estimation rule (REQ-032).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added .prd_plugin/method/grounding.md and .prd_plugin/method/estimation.md.",
        "Added CLAUDE.md (hub + skeleton) reconciled with AGENTS.md; AGENTS.md now names Claude Code skill discovery.",
        "Applied the no-timescales rule (complexity + confidence ratings) across AGENTS/CLAUDE and the planning/intake skills; referenced grounding from verification and evidence.",
        "Added a prd_gate.py timescale warning."
      ],
      "upgrade_notes": [
        "Re-run npx prd-install . --force to add CLAUDE.md and the new method docs.",
        "Replace time estimates with complexity + confidence ratings."
      ]
    },
    {
      "version": "0.5.56",
      "date": "2026-06-20",
      "summary": "Workflow correctness, tiered autonomy, and enforcement (REQ-031).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added project-decision-policy: a 'which skill when' router plus the autonomy authority (three tiers autonomous/key_decision/guided on reversibility x confidence, a non-negotiable floor reusing project-blocker-resolution, and a two-stage decision-quality heuristic).",
        "Added automation.autonomy_level (default key_decision) and decision provenance (decided_by/autonomy_tier).",
        "Resolved the 5 cross-skill autonomy conflicts and clarified ownership boundaries and workflow dead-ends.",
        "Added prd_gate.py enforcement validator + CI workflow + host-neutral pre-commit hook, making the previously-dormant config policy flags actually enforced; prd_gate.py set-autonomy <level> changes the tier in one command.",
        "Added staleness_audit.py and traceability_sync_auto.py helpers.",
        "Centralized shared rules in .prd_plugin/method/."
      ],
      "upgrade_notes": [
        "Re-run npx prd-install . --force to add the new skill, method docs, autonomy_level config, and prd_gate.py.",
        "Activate the local gate with: git config core.hooksPath .githooks.",
        "Set automation.autonomy_level to autonomous or guided to change check-in frequency."
      ]
    },
    {
      "version": "0.5.55",
      "date": "2026-06-20",
      "summary": "Hardened request transport and the Codex Stop hook; resolved a duplicate request id.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "project-request-intake and project-local-integration now require sending requests through to the hub immediately; the outbox is a transit buffer no one reads, never a destination, and an exported-but-unimported package is a dropped request.",
        "Guarded the Codex Stop hook (.codex/hooks.json and the repo-skeleton copy) to no-op when archive_automation_session.py is absent and pointed the downstream hook at .prd_plugin/scripts/; previously it errored on every Codex session stop in downstream installs (REQ-029).",
        "Documented the downstream script layout (installed helpers under .prd_plugin/scripts/; most validators are hub-only) in README and INSTALL-MATRIX.",
        "Resolved a duplicate REQ-002 id: renumbered the deferred SpacetimeDB request to REQ-030 and reattached the opencode-adapter graduated_to lineage to REQ-002."
      ],
      "upgrade_notes": [
        "Re-run npx prd-install . --force to refresh the guarded Codex Stop hook and the updated request skills in an existing downstream repo.",
        "Downstream Codex users on 0.5.54 or earlier should update to stop the per-session-stop hook error."
      ]
    },
    {
      "version": "0.5.54",
      "date": "2026-06-19",
      "summary": "Added Claude Code host integration: repo-local .claude/skills install plus an installable .claude-plugin marketplace.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added --claude/--no-claude install option (on by default) that installs skills into .claude/skills/.",
        "Added .claude-plugin/plugin.json and .claude-plugin/marketplace.json so the hub is installable as a Claude Code plugin.",
        "Added the claude host to skill- and script-install-scope manifests and config.json (claude_target, install_claude_by_default).",
        "Mirrored the downstream skill set and plugin manifest into templates/repo-skeleton/.claude/.",
        "Wired the .claude-plugin manifest into release_check, prd_doctor, version_advice, local_workflow_check, and drift_monitor."
      ],
      "upgrade_notes": [
        "Re-run npx prd-install . to add .claude/skills discovery to an existing repo.",
        "Or add the plugin in Claude Code via /plugin marketplace add markusuk1/prd-plugin."
      ]
    },
    {
      "version": "0.5.50",
      "date": "2026-06-17",
      "summary": "Added longitudinal drift monitor and observation-only Phase 1 planning chain.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added scripts/drift_monitor.py for observation-only longitudinal drift monitoring.",
        "Added PRD-002, ARCH-002, IMP-002 planning artifacts for drift monitoring.",
        "Classified drift_monitor.py as downstream_optional in script-install-scope.json.",
        "Deferred REQ-030 (SpacetimeDB-backed state storage).",
        "Updated AGENTS.md with simple-commit autonomy rule."
      ],
      "upgrade_notes": [
        "No downstream action required; drift monitor is hub-only tooling.",
        "Run python scripts/local_workflow_check.py --include-system-tests to verify."
      ]
    },
    {
      "version": "0.5.49",
      "date": "2026-06-17",
      "summary": "Added opencode CLI-driven downstream system/integration test harness (REQ-028).",
      "risk": "medium",
      "recommendation": "review_first",
      "changes": [
        "Added system_tests/ with pytest-based harness, mock-driven smoke tests, and optional opencode-driven scenario tests.",
        "Added DownstreamFixture, AgentDriver, MockAgentDriver, OpencodeAgentDriver, ScenarioOrchestrator, and StateAssertionLibrary.",
        "Added boundary monitors for secrets handling, hub/downstream separation, and git push/merge consent.",
        "Added .github/workflows/ci.yml with unit-test and mock system-test jobs.",
        "Updated scripts/local_workflow_check.py with --include-system-tests flag and fixed plugin-version resolution.",
        "Updated package.json with test:system script.",
        "Added PRD-001, ARCH-001, IMP-001, TRC-001, and DEC-001 artifacts for REQ-028.",
        "Documented system tests in README.md."
      ],
      "upgrade_notes": [
        "No downstream action required; system tests are hub-only development tooling.",
        "To run mock system tests locally: python -m pytest system_tests/test_harness_smoke.py -v",
        "To run opencode scenarios locally: ensure opencode is installed and run python -m pytest system_tests/scenarios/ -v"
      ]
    },
    {
      "version": "0.5.48",
      "date": "2026-06-17",
      "summary": "Fixed prd_self_audit.py hub-only script list to use authoritative install-scope manifests, eliminating false-positive hub/downstream mismatch findings.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "scripts/prd_self_audit.py now derives hub-only scripts and skills from templates/script-install-scope.json and templates/skill-install-scope.json instead of a stale hardcoded list.",
        "Removed false-positive flagging of downstream_optional helpers (state_consistency_check.py, message_check.py, prd_self_audit.py) and downstream_runtime helpers (request_export.py, automation_guard.py).",
        "Removed false-positive flagging of project-self-audit skill, which is downstream_optional.",
        "Updated tests/test_prd_self_audit.py to match the new dataclass-based API and run_audit/persist_findings signatures.",
        "Cleaned 18 false-positive REQ-* and 18 false-positive HLT-* records created by the previous audit run."
      ],
      "upgrade_notes": [
        "Run python scripts/prd_self_audit.py --repo-root . --persist in any repo to get accurate hub/downstream mismatch findings.",
        "No downstream skill or template changes are required."
      ]
    },
    {
      "version": "0.5.47",
      "date": "2026-06-17",
      "summary": "Fixed skill contradictions and autonomy boundaries from the workflow audit, plus state overwrite protection and install fixes.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Fixed _configure_opencode_json so re-installing updates an existing prd-plugin version pin instead of leaving it unchanged.",
        "Added STALE_ROOT_SCRIPTS cleanup: downstream repos that still have hub scripts in a root scripts/ directory from pre-0.5.39 installs will have those stale files removed automatically while preserving any user scripts.",
        "Added --yes flag and interactive confirmation for --force installs that would overwrite existing .prd_plugin/state/ files. Prevents accidental loss of tracking data, requests, decisions, health findings, and session memory.",
        "Updated downstream AGENTS.md and skill files to reference npx prd-install . --codex --opencode instead of the deprecated --target-agent both.",
        "Removed the erroneous remote-push instruction from project-fold-it-in; it is a local hub integration skill only.",
        "Merged project-implementation-planning into project-implementation-plan to eliminate the duplicate skill and updated all references.",
        "Updated project-request-intake so low/medium-risk bug fixes prepare a commit but route commit/push/merge through project-git-workflow unless the user has explicitly said to continue autonomously and no blocker exists.",
        "Added an Autonomy Exception section to project-git-workflow: when the user clearly says to continue autonomously and there is no blocker, the agent may finish the full git workflow without per-step confirmation.",
        "Fixed stale superpowers:systematic-debugging references to project-systematic-debugging.",
        "Fixed numbered list formatting in downstream project-health skill.",
        "Removed hub-only project-self-audit from templates/repo-skeleton/.opencode/skill and .agents/skills so downstream installs receive only downstream-scoped skills."
      ],
      "upgrade_notes": [
        "Run npx prd-install . --codex --opencode --force in downstream repos to refresh skills, opencode.json, and clean stale root scripts/.",
        "If you intentionally want to reset .prd_plugin/state/ files, add --yes. Otherwise the installer will preserve them and only overwrite skeleton/config files."
      ]
    },
    {
      "version": "0.5.45",
      "date": "2026-06-16",
      "summary": "Documented the install option matrix in README and mirrored the install docs to downstream repos.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added Quick Install section at the top of README.md with the four install options and a link to the matrix doc.",
        "Added Install Options section to README.md with a per-flag table, common combination examples, and the --target-agent deprecation note.",
        "Mirrored README.md into templates/repo-skeleton/ so downstream repos get the install instructions.",
        "Mirrored docs/INSTALL-MATRIX.md into templates/repo-skeleton/docs/ so downstream repos get the full matrix reference."
      ],
      "upgrade_notes": [
        "No code changes; documentation only.",
        "Re-run prd-install --force in downstream repos to receive the new README.md and docs/INSTALL-MATRIX.md."
      ]
    },
    {
      "version": "0.5.44",
      "date": "2026-06-16",
      "summary": "Added a configurable install option matrix with explicit host-agent and skill-injection flags.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added docs/INSTALL-MATRIX.md documenting the four install options and the skill, script, and config section matrix.",
        "templates/skill-install-scope.json: bumped schema_version to 0.2; added requires_options field per skill and option_defaults to policy.",
        "templates/script-install-scope.json: bumped schema_version to 0.2; added requires_options field per script and option_defaults to policy.",
        "scripts/prd_install.py: replaced --target-agent with explicit host-agent and skill-injection flags. Kept --target-agent for backward compatibility with a deprecation note.",
        "scripts/prd_install.py: installer now filters skills and scripts by the active host-agent option set.",
        "scripts/prd_install_skills.py: install_skills accepts an active_options set and skips skills whose requires_options are not active.",
        "scripts/prd_install.py: opencode.json is only written when the opencode option is enabled; the opencode-agent-skills plugin and prd-plugin skill permission are only added when the opencode-skill-inject option is enabled.",
        "Added tests for the new options, the skill matrix, the script matrix, the opencode-skill-inject gate, and the no-opencode path.",
        "Mirrored all skill and script manifest changes to templates/repo-skeleton/.",
        "Mirrored the docs/INSTALL-MATRIX.md reference into the skill and script install-scope policies."
      ],
      "upgrade_notes": [
        "Existing --target-agent codex|opencode|both usage continues to work but is deprecated. Switch to --codex, --opencode, and --opencode-skill-inject flags.",
        "Re-run prd-install --force to receive the updated manifests and option-aware behavior."
      ]
    },
    {
      "version": "0.5.43",
      "date": "2026-06-16",
      "summary": "Removed hub-specific instructions and references from downstream skills and METHOD.md so downstream repos do not get polluted with plugin-development context.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "templates/repo-skeleton/.prd_plugin/METHOD.md: removed references to project-fold-it-in, version_advice.py, gap_audit.py, release_check.py, local_workflow_check.py, and the hub repo. Replaced the 'Fold It In Workflow' section with 'Local Integration Workflow' that uses project-local-integration.",
        "templates/repo-skeleton/.agents/skills/project-request-intake/SKILL.md: rewrote as a downstream-only skill that creates local REQ-* and exports sanitized packages. Removed all instructions to run hub-only scripts such as request_import.py or to import another repo's inbox.",
        "templates/repo-skeleton/.agents/skills/project-local-integration/SKILL.md: removed all hub-directing text. Now only describes local repo integration.",
        "templates/repo-skeleton/.agents/skills/project-prd-plugin-setup/SKILL.md: replaced hub-directing version-advice instructions with npm view commands and a clear do-not-edit-the-hub rule.",
        "templates/repo-skeleton/.agents/skills/project-session-close/SKILL.md: replaced hub-only script references with the installed-only script paths under .prd_plugin/scripts/.",
        "templates/repo-skeleton/.agents/skills/project-verification-before-completion/SKILL.md: removed hub-only verification commands; only lists commands that are safe to run in a downstream repo.",
        "templates/repo-skeleton/.agents/skills/project-health/SKILL.md: replaced version_advice.py instructions with npm view and version_change request creation.",
        "Updated tests to assert that downstream skill files exist and are not 'do not run' guarded against hub-only scripts, rather than asserting exact equality with the hub canonical skill.",
        "Mirrored all downstream skill changes to templates/repo-skeleton/.opencode/skill/."
      ],
      "upgrade_notes": [
        "Re-run prd-install --force in downstream repos to receive the cleaned skills and METHOD.md.",
        "Downstream agents will no longer see instructions to run hub-only scripts or edit the hub repo."
      ]
    },
    {
      "version": "0.5.42",
      "date": "2026-06-16",
      "summary": "Removed dangerous instruction from downstream AGENTS.md that told agents to edit the PRD Plugin hub repo.",
      "risk": "medium",
      "recommendation": "review_first",
      "changes": [
        "templates/repo-skeleton/AGENTS.md no longer tells downstream agents to work in the PRD Plugin hub repo to change the plugin itself.",
        "Replaced that text with an explicit prohibition: downstream agents must not edit the hub repo, and updates come only from npm.",
        "Removed the duplicate 'Updating PRD Plugin' section that contained the same dangerous instruction."
      ],
      "upgrade_notes": [
        "Re-run prd-install --force in downstream repos to receive the corrected AGENTS.md.",
        "Operators who saw the previous AGENTS.md should know: PRD Plugin updates flow only from npm, never by editing the hub."
      ]
    },
    {
      "version": "0.5.41",
      "date": "2026-06-16",
      "summary": "Split AGENTS.md into a hub version and a downstream version so the right skills and rules apply in each.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "AGENTS.md at the repo root now states this is the PRD Plugin hub and includes project-fold-it-in in the skill list.",
        "templates/repo-skeleton/AGENTS.md now states this is a downstream repo, lists only the downstream runtime skills, and forbids project-fold-it-in.",
        "Downstream AGENTS.md includes the npm update + npx prd-install --force procedure and a check for the opencode.json permission entry.",
        "Added tests asserting the hub file mentions the hub role and project-fold-it-in, and the downstream file mentions the downstream role and forbids project-fold-it-in."
      ],
      "upgrade_notes": [
        "Re-run prd-install --force in downstream repos to receive the new AGENTS.md.",
        "The hub AGENTS.md replaces the previous one in-place; no manual edit needed."
      ]
    },
    {
      "version": "0.5.40",
      "date": "2026-06-16",
      "summary": "Always write opencode.json on install with opencode-agent-skills plugin and prd-plugin skill permission.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Installer now always writes opencode.json at the target repo root regardless of --target-agent.",
        "opencode.json includes the opencode-agent-skills@0.7.0 plugin entry so opencode auto-injects discovered skills.",
        "opencode.json sets permission.skill.prd-plugin=allow so the prd-plugin skill is auto-allowed.",
        "Existing opencode.json in the target repo is merged rather than overwritten; only missing entries are added.",
        "Updated tests to assert the opencode.json shape and the always-create behavior."
      ],
      "upgrade_notes": [
        "Re-run prd-install with --force to refresh the opencode.json in existing downstream repos.",
        "The merged result is idempotent: re-running install will not duplicate plugin entries or permissions."
      ]
    },
    {
      "version": "0.5.39",
      "date": "2026-06-16",
      "summary": "Install PRD Plugin scripts under .prd_plugin/scripts/ instead of repo root scripts/.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Updated scripts/prd_install.py to install downstream runtime scripts into .prd_plugin/scripts/ rather than the repo root scripts/ directory, so plugin scripts do not collide with the target repo's own scripts.",
        "Added tests asserting that runtime scripts land under .prd_plugin/scripts/ and that no scripts/ directory is created at the repo root.",
        "Existing downstream repos can move their scripts/ contents into .prd_plugin/scripts/ and remove the top-level scripts/ directory."
      ],
      "upgrade_notes": [
        "No data loss: scripts are file copies, not generated state.",
        "Operators should run `python .prd_plugin/scripts/prd_install_skills.py --repo-root .` or `npx prd-install .` to refresh, then move any existing scripts/ contents to .prd_plugin/scripts/."
      ]
    },
    {
      "version": "0.5.38",
      "date": "2026-06-16",
      "summary": "Added AGENTS.md secrets handling, opencode.json LSP config, and .gitignore for .env/.npmrc.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added AGENTS.md with explicit rules that agents must never read, display, or echo contents of .env, .env.*, or any file containing TOKEN, SECRET, KEY, PASSWORD, PASS, or CREDENTIAL.",
        "Documented dotenv-cli as the correct way to load .env into a child process without leaking values to stdout.",
        "Mirrored AGENTS.md to templates/repo-skeleton/AGENTS.md so downstream repos inherit the same rules.",
        "Added opencode.json at the repo root with repo-scoped LSP servers for Python (pyright), TypeScript, JSON, YAML, and Markdown (marksman), plus the prd-plugin npm plugin spec.",
        "Added .env, .env.*, .npmrc, and npm-debug.log* to .gitignore so future secret writes are never accidentally committed."
      ],
      "upgrade_notes": [
        "Downstream repos that have not yet adopted the secrets handling rule should re-run prd-install to receive the new AGENTS.md and .gitignore entries.",
        "Operators should revoke any npm or GitHub tokens that were exposed in chat, console, or logs and add fresh tokens to GitHub secrets at https://github.com/markusuk1/prd-plugin/settings/secrets/actions.",
        "opencode users should restart their opencode client after pulling v0.5.38 to load the new LSP servers declared in opencode.json."
      ]
    },
    {
      "version": "0.5.37",
      "date": "2026-06-16",
      "summary": "Published PRD Plugin as an npm package with automatic opencode discovery and robust downstream installation.",
      "risk": "medium",
      "recommendation": "review_first",
      "changes": [
        "Added package.json, index.js, and npm bin wrappers (bin/prd-install.js, bin/prd-install-skills.js) so PRD Plugin can be installed via npm and invoked with npx.",
        "Added .github/workflows/npm-publish.yml to publish to npm on every v* tag push.",
        "Updated scripts/prd_install.py to detect npm package context from package.json and write an npm-based opencode.json plugin spec (`prd-plugin@^<version>`) when installed from npm.",
        "Added .npmignore as a second line of defense alongside the package.json files whitelist.",
        "Updated README.md with npm install instructions and npx usage.",
        "Added tests verifying npm package spec detection and opencode.json creation."
      ],
      "upgrade_notes": [
        "Downstream repos can now run `npm install --save-dev prd-plugin` followed by `npx prd-install . --target-agent both` to install or refresh PRD Plugin.",
        "The git-based install path (`python scripts/prd_install.py <repo>` from a local clone) continues to work and is still required for private repos where npm cannot reach the registry.",
        "If you previously added a git-based spec to opencode.json, switching to the npm spec is optional; opencode will load the plugin from either source."
      ]
    },
    {
      "version": "0.5.36",
      "date": "2026-06-16",
      "summary": "Fixed downstream opencode skill discovery and ensured fresh downstream repos start with empty state files.",
      "risk": "medium",
      "recommendation": "review_first",
      "changes": [
        "Updated scripts/prd_install.py to create opencode.json in downstream repos when target_agent is opencode or both, pointing to the version-pinned PRD Plugin git package so opencode auto-loads the plugin and its skills.",
        "Emptied templates/repo-skeleton/.prd_plugin/state/releases.json so new downstream repos do not inherit PRD Plugin hub release history.",
        "Verified that templates/repo-skeleton/.prd_plugin/state/tracking.json and requests.json are already empty for fresh downstream installs.",
        "Added tests for opencode.json creation, version pinning, and clean downstream skeleton state."
      ],
      "upgrade_notes": [
        "Existing downstream repos using opencode should re-run `python scripts/prd_install.py --target-agent opencode <repo>` or manually add `prd-plugin@git+https://github.com/markusuk1/prd-plugin.git#v0.5.36` to their opencode.json plugin array.",
        "Downstream repos that already have PRD Plugin hub release history in .prd_plugin/state/releases.json may delete or empty that file; it should only contain the repo's own releases."
      ]
    },
    {
      "version": "0.5.35",
      "date": "2026-06-16",
      "summary": "Added project-blocker-resolution, project-git-workflow, and project-code-review skills adapted from Superpowers with PRD Plugin ID hooks.",
      "risk": "low",
      "recommendation": "review_first",
      "changes": [
        "Added skills/project-blocker-resolution/SKILL.md with the iron law that local resolution paths must be exhausted before a blocker is declared.",
        "Added skills/project-git-workflow/SKILL.md combining Superpowers using-git-worktrees and finishing-a-development-branch into a PRD Plugin ID-aware branch/review/merge workflow.",
        "Added skills/project-code-review/SKILL.md combining Superpowers requesting-code-review and receiving-code-review into a self-review and external-feedback skill with optional subagent dispatch.",
        "Defined BLK-* ID prefix in docs/ID-SCHEME.md and .prd_plugin/config.json required_prefixes.",
        "Registered all three skills as downstream_runtime in templates/skill-install-scope.json and added them to required_skills in live and skeleton configs.",
        "Mirrored the new skills to .agents/skills, .opencode/skill, and both repo-skeleton discovery paths.",
        "Added tests verifying the new skills are installed downstream, required, and not plugin_development, and that project-git-workflow forbids main commits and project-code-review forbids performative agreement."
      ],
      "upgrade_notes": [
        "No migration required; the new skills are included in default repo-local skill installs."
      ]
    },
    {
      "version": "0.5.32",
      "date": "2026-06-16",
      "summary": "Acted on the eight audit-driven recommendations from the D:\\Projects\\Improve corpus.",
      "risk": "medium",
      "recommendation": "review_first",
      "changes": [
        "Added a retrospective bullet to skills/project-session-close/SKILL.md (closeout step 8) so sessions over five turns or with tool errors leave docs/retrospectives/<date>-<topic>.md.",
        "Added memory.promotion_policy to templates/config.json (default: all) plus scripts/prd_selective_promote.py and a selective-promote guardrail in project-memory and project-session-close. Selective mode requires confidence>=high and >=2 source_refs; weekly GC flags stale MEM-* records older than weekly_gc_stale_after_days (default 90).",
        "Added skills/project-self-audit/SKILL.md and scripts/prd_self_audit.py. The skill walks a repo, mines AGENTS.md / CLAUDE.md rules against source-code debt markers (case-insensitive, excluding generated dirs), produces a rule-vs-reality gap report, and optionally persists REQ-* and HLT-* records for high-leverage rules (>=3 violations).",
        "Documented read-with-offset and read-before-edit as recommended host-agent tool wrappers in docs/METHOD.md, with the 48/87 and 9/87 error-stem numbers from the improve corpus as the evidence base.",
        "Added five pre-flight guardrails to skills/project-fold-it-in/SKILL.md: file-count cap at 20, cross-cutting-concern detection, evidence-before-finalization, fail-loud on guardrail trips, and CHG-*-before-MEM-* promotion. Addresses the 4-5x error rate for SKILL-named sessions.",
        "Added _extra_work_findings to scripts/state_consistency_check.py. When a claim-source file references 2+ canonical IDs, the check emits a CONS-INFO-001 info finding (positive signal) instead of treating extra work as drift. Treats the improve-aligned=0 finding as a bar problem, not a behavior problem."
      ],
      "upgrade_notes": [
        "Existing repos do not need to do anything; the new memory.promotion_policy defaults to all and the new state consistency info findings are additive.",
        "To opt in to selective promotion, switch memory.promotion_policy to selective in .prd_plugin/config.json; the default thresholds (high confidence, 2 source_refs, 90-day GC) are tuned for steady-state use.",
        "Run python scripts/prd_self_audit.py --repo-root . --persist to generate a fresh REQ-* and HLT-* queue for the most-violated rules in any repo.",
        "Renamed six pre-existing skill directories whose names had been corrupted by a previous Spanish-locale environment (project-arquitecture, project-implementacion-plan, project-implementacion-planning, project-memoria, project-sistematic-debugging, project-test-driven-implementacion) to the correct English names. Affects all four discovery paths."
      ]
    },
    {
      "version": "0.5.30",
      "date": "2026-06-16",
      "summary": "Added an opencode-compatible delivery layer alongside the existing Codex layer.",
      "risk": "medium",
      "recommendation": "review_first",
      "changes": [
        "Added .opencode/plugin.json and .opencode/skill/ as a sibling delivery layer to the existing .codex-plugin/ and .agents/skills/ paths.",
        "Generalized scripts/prd_install_skills.py with --target-agent codex|opencode|both and per-agent default target directories.",
        "Generalized scripts/version_advice.py to detect .opencode/plugin.json as a fallback installed-version source.",
        "Generalized scripts/release_check.py to discover .opencode/plugin.json as a version marker and to flag drift between the two plugin manifests.",
        "Updated scripts/local_workflow_check.py to load the plugin version from either manifest.",
        "Generalized templates/skill-install-scope.json and templates/config.json to expose opencode_target and version_file_candidates.",
        "Updated skills/project-fold-it-in, skills/project-request-intake, and skills/project-session-close to use neutral host-agent language instead of Codex-only assumptions.",
        "Synced the .agents/skills, .opencode/skill, and templates/repo-skeleton copies of the updated skills.",
        "Added a test_opencode_adapter.py policy test suite for the opencode delivery layer and neutral skill language.",
        "Updated templates/repo-skeleton to ship .opencode/skill/ copies by default so new downstream repos expose the opencode discovery path."
      ],
      "upgrade_notes": [
        "Existing downstream repos should run python scripts/prd_install_skills.py --repo-root . --target-agent both to refresh both Codex and opencode skill discovery.",
        "Repos that consume the plugin version from .codex-plugin/plugin.json should switch to version_advice.py or check release.version_file_candidates in their config to read either manifest.",
        "Release hygiene now requires the two plugin manifests to carry matching versions; bump .opencode/plugin.json whenever .codex-plugin/plugin.json changes.",
        "opencode users should not install archive_automation_session.py unless they wire it through a Codex-compatible Stop hook; opencode has its own session cleanup mechanism."
      ]
    },
    {
      "version": "0.5.29",
      "date": "2026-06-15",
      "summary": "Adopted selected Superpowers methods as PRD-native execution skills.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added project-implementation-planning, project-test-driven-implementation, project-systematic-debugging, and project-verification-before-completion as downstream runtime skills.",
        "Adapted selected Superpowers planning, TDD, debugging, and verification methods with PRD Plugin ID, evidence, request, health, changelog, and traceability requirements.",
        "Added THIRD_PARTY_NOTICES.md with Superpowers attribution and MIT license provenance.",
        "Updated skill install-scope manifests, required skill config, live repo-local skills, and skeleton repo-local skills.",
        "Documented the Superpowers method alignment in README.md and docs/METHOD.md.",
        "Cleaned duplicated ID scheme table entries."
      ],
      "upgrade_notes": [
        "Downstream repos should refresh repo-local skills with `python scripts/prd_install_skills.py --repo-root <repo>` to receive the adapted execution-discipline skills.",
        "Use the adapted PRD Plugin skills for planning, TDD, root-cause debugging, and verification when durable PRD Plugin IDs or evidence are involved.",
        "Superpowers-style checklists remain execution aids; PRD Plugin durable IDs remain authoritative."
      ]
    },
    {
      "version": "0.5.28",
      "date": "2026-06-15",
      "summary": "Added a unified read-only message check helper.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added scripts/message_check.py to summarize PRD Plugin inbox packages, already imported packages, outbox packages, mailbox files, and unresolved request-thread messages.",
        "Classified message_check.py as a downstream_optional helper in the script install-scope policy.",
        "Added message-check output to the PRD Plugin local workflow report set.",
        "Documented the message check command in README.md, docs/METHOD.md, and project-request-intake skill copies."
      ],
      "upgrade_notes": [
        "When asked to check PRD Plugin messages, run message_check.py when available before reporting that there is nothing to do.",
        "Downstream repos may explicitly install message_check.py as an optional read-only helper; it is not copied by default.",
        "The helper does not mutate canonical request state."
      ]
    },
    {
      "version": "0.5.27",
      "date": "2026-06-14",
      "summary": "Required autonomous investigation for clear low/medium-risk bug reports.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Updated project-request-intake so clear low- or medium-risk bug submissions with bounded fixes must continue past in_review into systematic debugging, a failing test, implementation, verification, request-state updates, and commit.",
        "Clarified that medium-risk non-bug submissions still import as in_review with rationale rather than remaining transport-only.",
        "Documented the bug-investigation requirement in README.md and docs/METHOD.md.",
        "Synced installed and skeleton repo-local skill copies with the autonomous bug workflow rule."
      ],
      "upgrade_notes": [
        "Agents handling clear low/medium-risk PRD Plugin bug reports should not stop after importing the request as in_review.",
        "Run superpowers:systematic-debugging, reproduce or validate the bug, add a failing test, fix the root cause, verify, update request state, and commit unless detail, scope, boundedness, or explicit user direction blocks implementation.",
        "Medium-risk non-bug submissions still require review rationale before acceptance."
      ]
    },
    {
      "version": "0.5.26",
      "date": "2026-06-14",
      "summary": "Clarified upstream bug reporting and added state consistency validation.",
      "changes": [
        "Updated project-request-intake so reporting a PRD Plugin bug from a downstream repo is not complete after local request filing.",
        "Updated project-local-integration to require upstream export/import for PRD Plugin bug reports when the hub is available.",
        "Synced live and skeleton repo-local skill copies with the clarified upstream-reporting rule.",
        "Added state_consistency_check.py to flag evidence/session claims for missing canonical state IDs, registry counters that skip missing records, and future timestamps.",
        "Wired the state consistency validator into prd_doctor.py and local_workflow_check.py.",
        "Updated evidence, evidence-ledger, session-close, traceability-review, health, and request-intake skills to require consistency checks when available.",
        "Added live .prd_plugin/state/project.json so the hub repo has canonical project/session state for registry validation."
      ],
      "upgrade_notes": [
        "When a downstream user asks to report, submit, upstream, or file a PRD Plugin bug, create the local REQ-* source record, add upstream-visible content, run request_export.py, and import/stage it into the PRD Plugin hub inbox when available.",
        "Do not describe a PRD Plugin bug as reported upstream if it only exists in local request state.",
        "Run `python scripts/state_consistency_check.py --repo-root .` when evidence or session summaries claim memory, tracking, changelog, session, registry, or timestamped fixture updates.",
        "Downstream repos that explicitly install optional helpers should include state_consistency_check.py alongside prd_doctor.py for stronger local diagnostics."
      ]
    },
    {
      "version": "0.5.25",
      "date": "2026-06-14",
      "summary": "Added a downstream-safe local integration skill for current-repo project truth.",
      "changes": [
        "Added project-local-integration as a downstream_runtime skill for folding local changes into the current repo without plugin-development release mechanics.",
        "Installed project-local-integration into repo-local and skeleton .agents/skills copies by default.",
        "Kept project-fold-it-in classified as plugin_development for PRD Plugin hub/package work only.",
        "Updated required skill and install-scope templates so downstream refreshes receive the local integration workflow automatically."
      ],
      "upgrade_notes": [
        "Refresh repo-local skills with `python scripts/prd_install_skills.py --repo-root <repo>` to install project-local-integration.",
        "Use project-local-integration in downstream repos for local fold-in requests; use project-fold-it-in only from the PRD Plugin hub/plugin bundle for plugin package changes."
      ]
    },
    {
      "version": "0.5.24",
      "date": "2026-06-14",
      "summary": "Separated downstream runtime skills from PRD Plugin development workflows.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added templates/skill-install-scope.json to classify repo-local skills by downstream_runtime or plugin_development scope.",
        "Changed prd_install_skills.py to install only downstream_runtime skills into `.agents/skills` by default.",
        "Removed the plugin-development project-fold-it-in workflow from live and skeleton `.agents/skills` installs.",
        "Updated downstream runtime skills to avoid PRD Plugin hub-specific release workflow instructions.",
        "Added config policy pointing to `.prd_plugin/templates/skill-install-scope.json`.",
        "Aligned live and template installed_version markers to 0.5.24."
      ],
      "migration_notes": [
        "Existing downstream repos should refresh repo-local skills with `python scripts/prd_install_skills.py --repo-root <repo>` so plugin-development skills are pruned from `.agents/skills`.",
        "Use the PRD Plugin hub/plugin bundle for project-fold-it-in and other plugin-development workflows.",
        "Ordinary downstream repos should keep only downstream_runtime skills in `.agents/skills`."
      ]
    },
    {
      "version": "0.5.23",
      "date": "2026-06-14",
      "summary": "Installed PRD Plugin skills into repo-local Codex discovery structure for downstream repos.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added scripts/prd_install_skills.py to install PRD Plugin skills into `.agents/skills/<skill-name>/SKILL.md`.",
        "Added `.agents/skills` copies of all PRD Plugin skills to the repo skeleton so new downstream installs expose tracking, memory, changelog, request, and traceability workflows to Codex agents.",
        "Added config policy for repo-local skill installation and required PRD Plugin skills.",
        "Updated prd_doctor.py to warn when configured repo-local PRD Plugin skills are missing or incomplete.",
        "Updated docs and workflow skills to distinguish `.agents/skills` agent capability from `.prd_plugin` project state.",
        "Aligned live and template installed_version markers to 0.5.23."
      ],
      "migration_notes": [
        "Existing downstream repos should run `python scripts/prd_install_skills.py --repo-root <repo>` from the PRD Plugin hub/plugin bundle or copy the skeleton `.agents/skills` directory.",
        "After installing skills, restart Codex if the repo-local skills do not appear immediately.",
        "Keep `.prd_plugin` for project state and `.agents/skills` for Codex skill discovery."
      ]
    },
    {
      "version": "0.5.22",
      "date": "2026-06-13",
      "summary": "Added read-only downstream PRD Plugin doctor diagnostics.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added scripts/prd_doctor.py to report PRD Plugin config, request-state parseability, stale request attention points, request privacy warnings, and copied hub/development scripts.",
        "Classified prd_doctor.py as a downstream_optional helper in the script install-scope policy and repo skeleton template copy.",
        "Updated local workflow checks to produce request-report/prd-doctor.json.",
        "Documented the doctor command in README.md, docs/METHOD.md, and relevant skills.",
        "Aligned live and template installed_version markers to 0.5.22."
      ],
      "migration_notes": [
        "Downstream repos may explicitly install prd_doctor.py as an optional read-only preflight helper.",
        "Run `python scripts/prd_doctor.py --repo-root .` before mutating project truth or exporting upstream request packages when the helper is installed.",
        "Do not install hub_runtime or plugin_development scripts just to run the doctor."
      ]
    },
    {
      "version": "0.5.21",
      "date": "2026-06-13",
      "summary": "Added explicit script install-scope policy and release hygiene enforcement.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added templates/script-install-scope.json to classify every PRD Plugin helper script by downstream, hub, optional, or development scope.",
        "Copied the script install-scope policy into the repo skeleton under .prd_plugin/templates without installing scripts by default.",
        "Updated release hygiene to fail when scripts are unclassified or when the repo skeleton contains scripts not explicitly allowed for default downstream install.",
        "Updated README, METHOD, and workflow skills so agents do not copy the full PRD Plugin scripts directory into downstream repos.",
        "Aligned live and template installed_version markers to 0.5.21."
      ],
      "migration_notes": [
        "Downstream repos should not receive a blanket copied PRD Plugin scripts directory.",
        "If local helper scripts are explicitly needed, install only scripts marked downstream_runtime or downstream_optional in .prd_plugin/templates/script-install-scope.json.",
        "Remove or report hub_runtime and plugin_development scripts found in ordinary downstream repo scripts directories."
      ]
    },
    {
      "version": "0.5.20",
      "date": "2026-06-13",
      "summary": "Corrected planning artifacts to use canonical JSON with Markdown exports only on human request.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Changed PRD, architecture, and implementation-plan artifacts from dual-source Markdown/JSON guidance to canonical JSON artifacts.",
        "Moved PRD, architecture, and implementation-plan Markdown templates into explicit human-export template paths.",
        "Updated config policy to forbid Markdown as source of truth and disable dual-writing Markdown.",
        "Updated planning lifecycle and artifact skills to generate Markdown only on explicit human request.",
        "Added policy tests that reject Markdown source fields and default Markdown planning templates.",
        "Aligned live and template installed_version markers to 0.5.20."
      ],
      "migration_notes": [
        "Treat `.prd_plugin/state/artifacts/{artifact_type}/{artifact_id}.json` as canonical project truth for PRD, architecture, and implementation-plan artifacts.",
        "Do not keep Markdown planning docs in sync as a second source of truth.",
        "Generate Markdown exports under `docs/exports/` only when a human explicitly requests a readable snapshot."
      ]
    },
    {
      "version": "0.5.18",
      "date": "2026-06-13",
      "summary": "Added an end-to-end planning lifecycle workflow for brainstorm-to-plan artifact creation.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added the project-planning-lifecycle skill to orchestrate brainstorm -> PRD -> architecture -> implementation plan.",
        "Documented planning lifecycle gates in README.md and docs/METHOD.md.",
        "Added policy tests requiring forward traceability from brainstorm/request sources through PRD, architecture, implementation plans, and traceability review.",
        "Aligned live and template installed_version markers to 0.5.18."
      ],
      "migration_notes": [
        "Use project-planning-lifecycle when brainstorms, early notes, or accepted requests need to become a full planning chain.",
        "Do not jump from brainstorm directly to implementation planning unless PRD and architecture already exist and are coherent.",
        "Carry open questions, risks, stale tracking records, stale requests, stale request threads, stale request transport, and health findings forward or record explicit follow-up."
      ]
    },
    {
      "version": "0.5.17",
      "date": "2026-06-13",
      "summary": "Fixed downstream helper-script release metadata defaults and single-request report handling.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Changed version_advice.py and gap_audit.py so omitted --releases resolves to the PRD Plugin hub releases.json beside the script instead of the downstream working directory.",
        "Changed request_report.py to intentionally report a single exported request object as one request instead of a false empty report.",
        "Marked the ZeusGrid helper-script compatibility bug implemented with regression tests for the 0.5.16 repro.",
        "Aligned config and project template installed_version markers to the package manifest and synced nested repo-skeleton template copies from the live templates.",
        "Expanded release hygiene to check every installed_version marker, including project templates and nested repo-skeleton templates."
      ],
      "migration_notes": [
        "Downstream repos running the hub helper scripts no longer need --releases for the normal hub release ledger.",
        "Pass --releases only when intentionally using an alternate release ledger.",
        "request_report.py now reports sanitized single-request packages with total 1 rather than total 0.",
        "Repos seeded from templates should record plugin.installed_version as 0.5.17 in both config and project state."
      ]
    },
    {
      "version": "0.5.16",
      "date": "2026-06-13",
      "summary": "Made request and release workflow checks local-first instead of GitHub-dependent.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added scripts/local_workflow_check.py as the primary PRD Plugin development workflow runner.",
        "Updated docs and lifecycle skills to prefer the local workflow command for PRD Plugin development checks.",
        "Changed the GitHub Actions workflow to act as an optional wrapper around the local workflow runner."
      ],
      "migration_notes": [
        "Use python scripts/local_workflow_check.py from the PRD Plugin development repo; downstream repos should follow script install-scope policy instead of assuming this helper is installed locally.",
        "Do not treat .github/workflows as the primary validation surface unless the repo actually has GitHub configured."
      ]
    },
    {
      "version": "0.5.15",
      "date": "2026-06-13",
      "summary": "Audited and strengthened staleness coverage across workflows and skills.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added explicit staleness responsibility sections to all PRD Plugin skills.",
        "Changed request_report.py to flag stale outstanding requests and stale accepted requests using configured thresholds.",
        "Updated the request-intake workflow to run full unittest discovery and trigger on docs, skills, templates, and staleness policy tests."
      ],
      "migration_notes": [
        "Request reports now include a stale_requests total and list.",
        "Agents should resolve, refresh with evidence, supersede, or explicitly carry stale records as follow-up rather than ignoring them."
      ]
    },
    {
      "version": "0.5.14",
      "date": "2026-06-13",
      "summary": "Clarified request-thread deduplication for persistent bugs and repeated repros.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Updated request-intake guidance to search existing requests and threads before creating a new `REQ-*`.",
        "Documented that persistent bugs and later-version repro confirmations should append `MSG-*` thread updates to the original request.",
        "Added default config policy for preferring thread updates when an existing issue already covers the report."
      ],
      "migration_notes": [
        "Agents should update affected-version metadata and append upstream-visible thread messages for ongoing bugs instead of opening duplicate requests.",
        "Request health checks should treat duplicate `REQ-*` records for the same persistent bug as hygiene findings."
      ]
    },
    {
      "version": "0.5.13",
      "date": "2026-06-13",
      "summary": "Fixed Stop-hook archive output and config version marker drift.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Changed archive_automation_session.py to keep stdout empty during normal hook execution.",
        "Added an explicit `--json` diagnostic mode for manual archive-hook checks.",
        "Documented that Stop-hook archive scripts must not print arbitrary diagnostic JSON to stdout.",
        "Updated PRD Plugin config templates so plugin.installed_version matches the package manifest.",
        "Added release hygiene coverage for config/template installed_version drift."
      ],
      "migration_notes": [
        "If invoking the archive script manually and expecting JSON output, pass `--json`.",
        "Existing hook definitions can continue to call `python scripts/archive_automation_session.py`; no hook command change is required.",
        "Downstream repos seeded from the templates should now record the current plugin version."
      ]
    },
    {
      "version": "0.5.12",
      "date": "2026-06-13",
      "summary": "Added automation-only session archiving through a Stop hook.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added a Stop-hook archive script that only archives sessions whose transcripts contain a known Automation ID.",
        "Added repo and skeleton hook wiring plus automation config flags for completed-session archiving.",
        "Documented that automation cleanup should use `codex archive <session-id>` instead of moving transcript files."
      ],
      "migration_notes": [
        "Enable the repo-local `.codex/hooks.json` or equivalent inline hook config if you want automatic archiving.",
        "Archive only known automation sessions by verifying `$CODEX_HOME/automations/<automation-id>/automation.toml`."
      ]
    },
    {
      "version": "0.5.11",
      "date": "2026-06-13",
      "summary": "Changed request-check from read-only reporting to risk-based autonomous triage.",
      "risk": "medium",
      "recommendation": "review_first",
      "changes": [
        "Documented autonomous inbox triage rules for low, medium, high, and critical risk submissions.",
        "Changed automation.default_mode to `risk_based_triage` in live and template configs.",
        "Updated plugin docs to state that validated inbox packages should be triaged into canonical request state rather than left only in transport."
      ],
      "migration_notes": [
        "Request-check automations should mutate canonical request state when a validated inbox submission can be triaged safely by policy.",
        "Medium-risk and higher submissions should still avoid silent acceptance, but they should not remain inbox-only when they can be imported as `in_review` or `needs_info`."
      ]
    },
    {
      "version": "0.5.10",
      "date": "2026-06-13",
      "summary": "Made plain fold-it-in requests create or check a Codex goal by default.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Updated project-fold-it-in so any fold-it-in style request is treated as goal-backed work.",
        "Removed wording that limited goal creation to only explicit goal-tracking requests.",
        "Aligned README and METHOD docs with the default goal-backed fold-it-in policy."
      ],
      "migration_notes": [
        "Treat plain `fold it in` as requiring `create_goal` or goal reconciliation before implementation.",
        "Report a mismatch if an active goal does not match the requested fold-it-in work."
      ]
    },
    {
      "version": "0.5.9",
      "date": "2026-06-13",
      "summary": "Clarified two-layer scheduler verification for recurring request checks.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Documented that `.prd_plugin/local/automation/` reports runtime lock state, not future recurrence.",
        "Added guidance to inspect `%USERPROFILE%/.codex/automations/<automation-id>/automation.toml` for `kind`, `rrule`, and `status` when answering scheduler questions.",
        "Updated request-intake and project-health skills plus companion docs to require the two-layer check."
      ],
      "migration_notes": [
        "When asked whether recurring request checks are scheduled or paused, inspect both the local automation guard and the Codex app automation record.",
        "Do not report scheduler state from local lock files alone."
      ]
    },
    {
      "version": "0.5.3",
      "date": "2026-06-13",
      "summary": "Added threaded request intake and sanitized upstream submissions.",
      "risk": "medium",
      "recommendation": "review_first",
      "changes": [
        "Added MSG-* request-thread IDs and thread.messages request shape.",
        "Added in_review and needs_info request statuses.",
        "Added sanitized upstream request export helper.",
        "Added request privacy validation to request reports."
      ],
      "migration_notes": [
        "Requests may now include a thread object.",
        "Config now includes allowed_statuses and upstream_submissions_must_be_sanitized.",
        "Repos with private request discussions should review message visibility before exporting upstream."
      ]
    },
    {
      "version": "0.5.4",
      "date": "2026-06-13",
      "summary": "Added pre-upgrade version advice for downstream repos.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added scripts/version_advice.py to compare a downstream repo's installed PRD Plugin version with the hub version.",
        "Added structured releases.json metadata for machine-readable upgrade summaries.",
        "Added version_change as a first-class request type for upgrade approval or compatibility discussions."
      ],
      "migration_notes": [
        "Downstream repos should store plugin.installed_version in .prd_plugin/config.json when known.",
        "Run version_advice.py before bumping a downstream repo's installed plugin version."
      ]
    },
    {
      "version": "0.5.5",
      "date": "2026-06-13",
      "summary": "Added pre-bump gap audit and stronger version-advice request automation.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added scripts/gap_audit.py to check release metadata before a version bump.",
        "Added version_advice.py --write-request to append local version_change requests when review is needed.",
        "Added release hygiene validation that version bumps have matching release metadata.",
        "Added prerelease-aware version ordering for alpha, beta, and rc releases."
      ],
      "migration_notes": [
        "Run gap_audit.py before bumping .codex-plugin/plugin.json.",
        "Use version_advice.py --write-request to create a local version_change request from review-first advice."
      ]
    },
    {
      "version": "0.5.6",
      "date": "2026-06-13",
      "summary": "Added scoped request mailbox protocol for downstream repos without hub write access.",
      "risk": "medium",
      "recommendation": "review_first",
      "changes": [
        "Added request_import.py, request_mailbox.py, request_pull.py, and request_reply.py.",
        "Added .prd_plugin/outbox, .prd_plugin/inbox, and .prd_plugin/mailboxes transport surfaces.",
        "Documented downstream export, hub import, scoped mailbox publishing, mailbox pull, and reply flow.",
        "Added tests for bidirectional request/message protocol behavior."
      ],
      "migration_notes": [
        "Downstream repos should export upstream-visible packages from .prd_plugin/outbox instead of expecting hub write access.",
        "Hub repos should stage incoming packages in .prd_plugin/inbox before graduating them into canonical requests.",
        "Downstream repos should pull only their scoped .prd_plugin/mailboxes/<repo-id> bundle."
      ]
    },
    {
      "version": "0.5.7",
      "date": "2026-06-13",
      "summary": "Added explicit Codex goal handling to the fold-it-in workflow.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Updated project-fold-it-in to create or check a Codex goal when goal-backed work is requested.",
        "Documented progress-plan alignment with active goals during fold-it-in work.",
        "Added closeout guidance for reporting goal status after verification."
      ],
      "migration_notes": [
        "Agents should create or update a Codex goal before implementing goal-backed fold-it-in requests.",
        "Agents should keep progress plans aligned with active goals and mark goals complete only after verification passes."
      ]
    },
    {
      "version": "0.5.8",
      "date": "2026-06-13",
      "summary": "Added local automation lock and pending-run guard for frequent request checks.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added scripts/automation_guard.py for single-run request/mailbox automation coordination.",
        "Added tests for fresh locks, stale lock takeover, pending markers, and owner-only completion.",
        "Documented local automation lock behavior across method docs, README, config, and skills.",
        "Ignored .prd_plugin/local/ so runtime locks and session state stay out of commits."
      ],
      "migration_notes": [
        "Recurring request/mailbox checks should run automation_guard.py begin before scanning and complete after finishing.",
        "If begin reports busy, the automation should stop after the pending marker is written.",
        "Lock and pending files under .prd_plugin/local/automation/ are runtime coordination state and should not be committed or exported."
      ]
    },
    {
      "version": "0.6.0",
      "date": "2026-07-11",
      "summary": "Adopt the ingest-manual/v1 authoring kit, ship a validated prd-plugin ingest manual, and add ingest-manual drift detection to the drift monitor (default + on-Stop).",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added ingest-manual-kit/ (ingest-manual/v1 template, schema, authoring guide, write-ingest-manual skill, and validate_ingest_manual.py).",
        "Added docs/prd-plugin-ingest-manual.html: a self-contained, schema-conformant ingest manual grounded in the hub wiki and verified against real command output.",
        "Added scripts/ingest_manual_drift.py: read-only drift detector for docs/<repo>-ingest-manual.html (meta.commit behind HEAD, unstamped, or non-conformant); fail-open and a no-op where no manual exists.",
        "Wired ingest_manual_drift into drift_monitor's default and on-Stop validator sets and registered it downstream_runtime in script-install-scope."
      ],
      "migration_notes": [
        "Repos that adopt the ingest-manual kit and author docs/<repo>-ingest-manual.html get automatic staleness/conformance drift detection; repos without a manual see a no-op 'nothing to drift'.",
        "Conformance checking in the drift detector requires the kit vendored at ingest-manual-kit/; otherwise the check degrades to staleness-only."
      ]
    },
    {
      "version": "0.6.1",
      "date": "2026-07-11",
      "summary": "Ingest-manual drift detection is now source-path-aware: it flags when a file the manual cites changed since its commit stamp, instead of counting commits behind HEAD.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "ingest_manual_drift.py: primary staleness signal is now cited-source diff (git diff meta.commit..HEAD intersected with the repo paths the manual cites); commits-behind is a coarse fallback only when no citable paths exist.",
        "Silent for unrelated churn, immediate for relevant changes; unstamped and non-conformant stay zero-tolerance.",
        "Refreshed and re-stamped docs/prd-plugin-ingest-manual.html (test count, new detector)."
      ],
      "migration_notes": [
        "Repos with an ingest manual now get precise drift signals tied to the sources the manual cites; a manual that cites no in-repo paths falls back to the commits-behind heuristic.",
        "After a release that touches a cited file, re-stamp the manual's meta.commit to clear the (correct) drift flag."
      ]
    },
    {
      "version": "0.6.2",
      "date": "2026-07-11",
      "summary": "Fix: prd-install --force now refreshes .prd_plugin/config.json's plugin.installed_version (the marker the version check reads), so updates no longer silently mask releases.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "_record_install stamps config.json's plugin.installed_version (surgically, preserving other user config) in addition to state/project.json.",
        "config.json is state-protected so its skeleton copy is still skipped; only the version marker is refreshed."
      ],
      "migration_notes": [
        "A repo previously updated with --force may carry a stale config.json marker; re-run prd-install . --force with 0.6.2+ once to correct it.",
        "The version check reads config.json.plugin.installed_version; it will now track the installed version across updates."
      ]
    },
    {
      "version": "0.6.3",
      "date": "2026-07-11",
      "summary": "Fork version drift monitoring: a repo that consumes an external fork can now see on Stop when a newer fork version is available, via a generic configurable check (poll a JSON URL, compare to a local marker). Inert unless configured.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "New scripts/fork_version_check.py: generic fork/upstream version check (static manifest or node /v1/status), TTL-cached, fail-open, no-op unless configured.",
        "5 fork.version_check config toggles; fork_drift wired into the drift monitor (default + on-Stop) and a nudge line surfaces it on Stop.",
        "Retroactively added ingest_manual_drift + fork_drift to the config validators/on_stop_validators lists (they had pinned an older list)."
      ],
      "migration_notes": [
        "To use it: set fork.version_check.enabled true, fork.version_check.source_url to a JSON endpoint, and keep a FORK-VERSION marker (or set fork.version_check.local_marker).",
        "The fork side must publish a small JSON manifest exposing fork_version (or expose it in /v1/status); repos that do not consume a fork are unaffected."
      ]
    },
    {
      "version": "0.7.0",
      "date": "2026-07-11",
      "summary": "PRD Plugin now owns its UTCP tool surface: read-only method tools (status, tracking, decisions, evidence, wiki, drift, gate) defined in-repo (scripts/prd_tools.py + utcp.json) as cli call templates a UTCP host mounts and bridges to MCP.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "New scripts/prd_tools.py: read-only observe/recall tools over .prd_plugin state + --utcp-manual discovery; single TOOLS spec drives dispatch and the manual.",
        "Repo-root utcp.json manual (cli call templates over this repo's scripts); ingest manual utcp_manual is no longer null.",
        "Registered prd_tools.py downstream_runtime so every prd-plugin repo exposes its own mountable manual. Writes stay on the MCP/script path."
      ],
      "migration_notes": [
        "A UTCP host (e.g. the AI-Collab hub) mounts a repo's manual via @utcp/cli (discovery command: python .prd_plugin/scripts/prd_tools.py --utcp-manual) and bridges to MCP.",
        "The hub's hand-defined tracking/decisions tools can be replaced by mounting prd-plugin's manual to also gain status/evidence/wiki/drift/gate."
      ]
    },
    {
      "version": "0.13.0",
      "date": "2026-07-14",
      "summary": "Add disabled-by-default, impact-scoped verification planning for execution by AI-Collab with conservative full-suite fallbacks.",
      "risk": "medium",
      "recommendation": "safe_to_update",
      "changes": [
        "Added a deterministic local changed-file and verification-plan adapter without requiring a remote or CI.",
        "Added configurable test-scope bounds, core paths, test patterns, mandatory full-suite triggers, and fail-closed policy validation.",
        "Extended the Substrate contract with verification discovery while leaving impact analysis and test execution in AI-Collab.",
        "Updated downstream skills, installer assets, docs, and host mirrors to accept fingerprint-current focused evidence and escalate safely."
      ],
      "migration_notes": [
        "The feature is disabled by default; existing downstream verification behavior is unchanged until verification.test_scope.enabled is set true.",
        "To enable scoped execution, also enable Substrate coordinate mode and add the verification capability; unavailable, degraded, unmapped, broad, core, or release changes still require full verification."
      ]
    },
    {
      "version": "0.14.0",
      "date": "2026-07-14",
      "summary": "Unify PRD Plugin configuration discovery and management, add lean/balanced/thorough latency profiles, and consolidate host hooks into one configuration-gated process per event.",
      "risk": "medium",
      "recommendation": "safe_to_update",
      "changes": [
        "Derived a complete 155-setting catalog from shipped defaults with ownership, mutability, activation, dependencies, latency, audit, and effective-state metadata.",
        "Added validated atomic CLI and MCP operations for settings and built-in/custom profiles, plus read-only UTCP inventory.",
        "Added master and per-capability hook switches and one in-process dispatcher for Claude, Codex, and OpenCode host events.",
        "Added additive installer migration, downstream command/template parity, documentation, and durable wiki knowledge."
      ],
      "migration_notes": [
        "Run npx prd-install . --force after updating so the dispatcher, host manifests, and missing configuration/hooks defaults are installed without replacing existing choices.",
        "Use prd_config.py inventory/audit and preview lean, balanced, or thorough with profile apply <name> --dry-run before selecting a latency profile."
      ]
    },
    {
      "version": "0.15.0",
      "date": "2026-07-14",
      "summary": "Add a complete configurable deterministic workflow authority so bounded mechanics execute through validated actions and only explicit source-backed judgment reaches AI-Collab.",
      "risk": "medium",
      "recommendation": "safe_to_update",
      "changes": [
        "Added a strict workflow catalog/interpreter with duplicate-safe WFR IDs, atomic checkpoints, receipts, idempotency, legal transitions, bounded outputs, postconditions, and conservative outcome-unknown handling.",
        "Added twelve shipped lifecycle workflows and eighteen code-owned actions covering session, intake, planning, debugging, review, verification, evidence, closeout, maintenance, install/update, and release mechanics.",
        "Added hash-bound source-backed judgment pause/resume contracts; PRD Plugin validates results while AI-Collab owns optional model execution and cannot write canonical project state.",
        "Added nine MCP management tools, read-only UTCP workflow discovery/plan/status, /prd-workflow, host-hook routing, unified config controls/profiles, installer migration, downstream skills/templates, and a deterministic CHML audit."
      ],
      "migration_notes": [
        "Run npx prd-install . --force after updating; the installer additively installs the engine, managed catalog, WFR run state/identity, host command and skills, while preserving existing configuration and workflow history.",
        "Review workflows.enabled_ids, hooks.workflow.*, workflows.allow_state_mutations, attempts/output bounds, and workflows.judgment.*. The lean profile disables lifecycle workflow hooks; balanced and thorough enable bounded SessionStart/Stop preflight.",
        "AI-Collab may enable the workflow_judgment Substrate capability to execute provider-neutral requests. All canonical state writes remain behind PRD MCP."
      ]
    },
    {
      "version": "0.15.1",
      "date": "2026-07-14",
      "summary": "Bring every shipped skill up to the current deterministic workflow, configuration, state-tool, reflection, reporting, Substrate, verification, and release behavior, with semantic coverage enforced before release.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Repaired hub and downstream skill guidance for all twelve deterministic workflows, all thirteen administration commands, duplicate-safe state operations, local request routing, binary evidence, Stop reflections, delegated reporting, tracking branches, and host setup.",
        "Added a versioned feature-to-skill contract and CHML semantic audit, integrated into the workflow audit and local release check so identical but stale mirrors cannot pass.",
        "Updated host manifests, command guidance, installer scope policy, method documentation, and durable wiki knowledge to describe the complete current feature surface.",
        "Normalized fixed-operation receipt commands and local workflow command logs to stable logical names, and made the Windows workflow-state lock retry transient permission races."
      ],
      "migration_notes": [
        "Run npx prd-install . --force after updating so repaired skills, command guidance, and method files replace older installed copies while existing state and configuration remain preserved.",
        "No feature is newly enabled by this patch; existing hook, reflection, reporting, Substrate, verification, workflow, and latency-profile choices remain controlled by the unified configuration."
      ]
    },
    {
      "version": "0.15.2",
      "date": "2026-07-14",
      "summary": "Restore installer configuration-template parity so a fresh or refreshed downstream install validates its own deterministic workflow settings.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Synchronized the repo-skeleton configuration authority with the canonical shipped template, including all workflow controls, WFR identity policy, and the deterministic-workflows required skill.",
        "Added an exact template-parity regression so the two installer authorities cannot silently drift again.",
        "Added a fresh-install integration regression proving install.update-check completes against the installed configuration."
      ],
      "migration_notes": [
        "Repositories that installed 0.15.1 should update to 0.15.2 and run npx prd-install . --force; existing configuration and state remain preserved.",
        "This patch fixes the false unknown-setting failure from install.update-check and does not enable any new optional behavior."
      ]
    },
    {
      "version": "0.15.3",
      "date": "2026-07-15",
      "summary": "Prevent routine plugin updates from silently erasing downstream project truth when agents blindly add --yes.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Wired the installer's dormant protected-state warning into the npm CLI before any files are written.",
        "Made --force the explicitly documented safe refresh route and reclassified --yes as a destructive reset request.",
        "Refused destructive resets in non-interactive agent sessions and required the exact interactive phrase RESET PRD STATE.",
        "Expanded overwrite discovery to cover every protected state, ID, local-data, and configuration file and added focused regressions."
      ],
      "migration_notes": [
        "Update the package, then run npx prd-install . --force without --yes; existing protected project data remains preserved.",
        "Use --force --yes only for an intentional destructive reset performed interactively after reviewing the listed files."
      ]
    },
    {
      "version": "0.15.4",
      "date": "2026-07-15",
      "summary": "Make agent self-service knowledge-first and make subagent creation explicitly user-controlled, bounded, and non-recursive.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Reordered hub and downstream AGENTS.md, CLAUDE.md, method, and decision-router guidance to discover available capabilities, query connected Substrate memory and the LLM wiki, and use canonical tools before raw repository search.",
        "Kept code, files, and git history as the exact verification and gap-filling layer when structured knowledge is disabled, unavailable, stale, contradictory, or insufficiently precise.",
        "Prohibited implicit subagent creation; only an explicit user request enables at most three direct children, and child agents may not spawn or delegate further.",
        "Kept always-loaded agent instructions context-lean by linking to a shipped subagent method file, then applied the authority gate to review, git-workflow, and document-branch skills across every host mirror with semantic CHML regressions."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force so repository instructions, method docs, and host skill mirrors receive the corrected policy without replacing protected project state.",
        "No Substrate integration or subagent capability is enabled by this release; availability is discovered at runtime, and subagents still require an explicit user request."
      ]
    },
    {
      "version": "0.15.5",
      "date": "2026-07-15",
      "summary": "Make every LLM wiki directly navigable by enforcing inline links for local Markdown references across hub and downstream repositories.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Added deterministic --lint-links auditing and conservative --fix repair for bare local Markdown references; ambiguous and missing targets are never guessed.",
        "Wired the policy into the composed PRD gate, wiki drift checks, unified configuration, the project-llm-wiki skill, every host mirror, and downstream installer templates.",
        "Audited the hub wiki, converted all 32 bare Markdown references to inline links, and added regression and semantic coverage preventing recurrence.",
        "Stopped deterministic workflow receipt snapshots from masquerading as duplicate canonical identities during later MCP ID allocation."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes so the downstream checker, gate, configuration, and skills are refreshed while project state is preserved.",
        "The inline-link policy defaults on; disable only knowledge.llm_wiki.require_inline_md_links if a repository intentionally rejects this navigation rule."
      ]
    },
    {
      "version": "0.16.31",
      "date": "2026-07-19",
      "summary": "Replies carry a delivery state and flush automatically; inbox updates reconcile into canonical requests. A reply can no longer be written and silently never sent, and an answer can no longer arrive and never be read.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Replies carry a delivery state from birth: outbound replies start `pending` and only a verified send marks them `delivered` (REQ-133).",
        "flush_pending_replies republishes each origin repo's mailbox and marks messages delivered only for ids read back from the published artifact; an unreachable destination leaves the reply pending and is reported.",
        "session.start flushes pending replies automatically, and message_check reports replies pending delivery.",
        "reconcile_inbox merges inbox package updates into already-imported canonical requests by origin_repo + source_request_id, so a downstream answer can no longer sit unread (REQ-134).",
        "Inbound messages are identified by provenance (origin repo + their message id) rather than local id or body, because ids are allocated per repo: colliding ids no longer clobber distinct messages and revised messages update in place instead of forking into twins.",
        "Reconciling a terminal request merges its messages without reopening the resolution."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes so the downstream checker, gate, configuration, and skills are refreshed while project state is preserved.",
        "The inline-link policy defaults on; disable only knowledge.llm_wiki.require_inline_md_links if a repository intentionally rejects this navigation rule."
      ]
    },
    {
      "version": "0.16.32",
      "date": "2026-07-19",
      "summary": "The accepted journal.* configuration contract ships: seven activation keys with safe defaults, dependency-aware effective state, archive-only retention, and fail-closed partial-family validation.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Ships the seven accepted journal.* activation keys with safe defaults, so `prd_config describe journal.enabled` resolves instead of reporting an unknown setting (REQ-135).",
        "Journal feature keys declare journal.enabled as a dependency, giving dependency-aware effective state.",
        "journal.retention.mode is a closed enum: archive-only, with no selectable time-based destructive deletion.",
        "The journal family is validated as a contract: absent entirely reports unavailable, partially present reports invalid and names the missing keys, and both fail closed so journal operations are refused until the family is complete.",
        "New `prd_config.py journal-contract` reports that state deterministically."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes so the downstream checker, gate, configuration, and skills are refreshed while project state is preserved.",
        "The inline-link policy defaults on; disable only knowledge.llm_wiki.require_inline_md_links if a repository intentionally rejects this navigation rule."
      ]
    },
    {
      "version": "0.16.33",
      "date": "2026-07-19",
      "summary": "Requests can be addressed to a peer repo and delivered into its inbox with read-back verification, without the filing ever being at risk.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "A request can be addressed to a peer repo with target_repo and is delivered into that repo's inbox, verified by reading the written package back (REQ-136).",
        "Peers are declared once as requests.peers {repo id -> path}; a configured path is the consent to deliver there, and declaration is one-sided.",
        "New tools: prd_list_destinations, prd_send_request, prd_flush_addressed_requests. session.start flushes addressed requests automatically.",
        "Filing never fails because of routing: an undeclared target writes nothing and names the fix, an unreachable target is held for the next flush, and imported, terminal, self-addressed or already-delivered requests are not re-sent.",
        "Peer packages carry the repo-facing visibility set, so hub-private 'upstream' messages never travel to a peer."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes so the downstream checker, gate, configuration, and skills are refreshed while project state is preserved.",
        "The inline-link policy defaults on; disable only knowledge.llm_wiki.require_inline_md_links if a repository intentionally rejects this navigation rule."
      ]
    },
    {
      "version": "0.16.34",
      "date": "2026-07-19",
      "summary": "The decision-quality bar gains Bounded, the dimension that stops scope inflation: CRAFTES becomes CRAFTESB.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Adds Bounded as the eighth dimension of the decision-quality bar: CRAFTES becomes CRAFTESB (REQ-139).",
        "Efficient bounds the size of the solution; Bounded bounds the size of the problem - solve the problem you were asked to solve, at the size you were asked to solve it.",
        "Bounded is falsifiable rather than a virtue rating: name the smallest thing that satisfies the literal ask, and if you cannot state the smaller alternative you rejected, you have not considered one.",
        "Names concrete scope inflation: generalising to N cases when one was asked for, options nobody needs yet, abstractions with only hypothetical callers, design documents where a small mechanism was wanted, and handing back questions instead of working software.",
        "Bounded never licenses under-delivering - it bounds the problem, not the quality bar, and adjacent problems are filed as REQ-*, not built into the change.",
        "Removes 'without reducing scope' from every normative statement of the bar, and fixes four always-in-force docs that stated the Secure dimension twice."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes so the downstream checker, gate, configuration, and skills are refreshed while project state is preserved.",
        "The inline-link policy defaults on; disable only knowledge.llm_wiki.require_inline_md_links if a repository intentionally rejects this navigation rule."
      ]
    },
    {
      "version": "0.16.35",
      "date": "2026-07-19",
      "summary": "The version check sees both install channels, so a stale host plugin can no longer sit silently behind a current repo.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "The version check now reads the HOST plugin install as well as the repo install, so a stale Claude marketplace plugin is reported even when the repo is current (REQ-140).",
        "A stale host install names the fix: the `claude plugin update` command and the required restart.",
        "Surfaced on every return path including the cache-only status used by the session nudge and /prd-status.",
        "Fail-open: a repo with no marketplace install reports nothing rather than erroring, and staleness is never guessed when the latest version is unknown."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes so the downstream checker, gate, configuration, and skills are refreshed while project state is preserved.",
        "The inline-link policy defaults on; disable only knowledge.llm_wiki.require_inline_md_links if a repository intentionally rejects this navigation rule."
      ]
    },
    {
      "version": "0.16.36",
      "date": "2026-07-19",
      "summary": "PRD Plugin gets a UI: embeddable or standalone, and live enough to actually switch things on and off.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "New PRD Plugin UI: prd_ui_export.py renders all plugin state as one self-contained HTML page that embeds in a host app shell or opens standalone (REQ-141).",
        "prd_ui_serve.py serves it as a live control surface on loopback, where the config toggles are real switches applied through the validated prd_config authority.",
        "All 107 toggles appear in collapsible groups with the description of what each one does, as switches, dropdowns or read-only values.",
        "Toggles that cannot take effect in the running session are marked 'new session' - hook changes land at the next event, but injected guidance and the Substrate handshake do not.",
        "The control server is loopback-only and refuses a non-loopback bind, serves no files from disk, and limits framing to local origins.",
        "Styled from the host shell's theme tokens with ?theme=dark|light, since an iframe cannot inherit the host stylesheet."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes so the downstream checker, gate, configuration, and skills are refreshed while project state is preserved.",
        "The inline-link policy defaults on; disable only knowledge.llm_wiki.require_inline_md_links if a repository intentionally rejects this navigation rule."
      ]
    },
    {
      "version": "0.16.37",
      "date": "2026-07-20",
      "summary": "Debugging stops being whack-a-mole: three consecutive finds force a re-grounding, research and re-plan pass instead of another patch.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Debugging is now a bounded loop rather than a one-shot checklist: three consecutive bug finds trip a circuit breaker that stops the fixing (REQ-143).",
        "The trigger counts FINDS, not failed attempts - three fixes that each worked and each revealed another mean the model of the system is wrong, which more patching cannot repair.",
        "On the third find: re-ground (assumed versus actual, both sides of every boundary), research locally AND on the web (both required), re-plan for the bug class, then implement the plan with tests.",
        "The counter resets only on a verified re-planned change or a confirmed unrelated cause, never because a fix passed.",
        "The breaker is surfaced in the decision-policy router as well, since an agent mid-whack-a-mole has usually stopped re-reading the debugging skill."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes so the downstream checker, gate, configuration, and skills are refreshed while project state is preserved.",
        "The inline-link policy defaults on; disable only knowledge.llm_wiki.require_inline_md_links if a repository intentionally rejects this navigation rule."
      ]
    },
    {
      "version": "0.16.38",
      "date": "2026-07-20",
      "summary": "Unrelated bugs found mid-debug are parked and returned to at the completion gate, instead of being chased or forgotten.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "An unrelated bug found while debugging is parked as a REQ-* linked to the episode rather than chased, so the task in hand still gets finished (REQ-144).",
        "Parking uses the existing record mechanism on purpose: a REQ-* survives the session and shows up in prd_status and the UI, which a scratchpad note does not.",
        "Related versus unrelated is decidable - same subsystem, boundary, data path, or plausible shared root cause - and uncertainty breaks toward RELATED so it fails toward re-grounding.",
        "Labelling a related bug 'unrelated' to keep patching is named explicitly as the failure the rule prevents, closing the loophole in the three-find breaker.",
        "The loop-back is enforced at the completion gate: parked findings must be filed and visible before work can be claimed done."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes so the downstream checker, gate, configuration, and skills are refreshed while project state is preserved.",
        "The inline-link policy defaults on; disable only knowledge.llm_wiki.require_inline_md_links if a repository intentionally rejects this navigation rule."
      ]
    },
    {
      "version": "0.16.39",
      "date": "2026-07-20",
      "summary": "Documentation release: the wiki is level with the shipped work again, with two new articles covering the plugin UI and the bounded debug loop.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Documentation release: the wiki is brought level with the work shipped in 0.16.31-0.16.38, which had fallen nine implemented requests behind.",
        "Request Intake gains reply delivery state, inbound reconcile with provenance-based message identity, and peer routing.",
        "Unified Configuration gains the journal.* contract, including why the keys must ship in the defaults rather than only in toggle metadata.",
        "Two new articles: The PRD Plugin UI, and Debugging as a Bounded Loop.",
        "No behaviour change; shipped .prd_plugin state is updated, which is why the version moves."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes so the downstream checker, gate, configuration, and skills are refreshed while project state is preserved.",
        "The inline-link policy defaults on; disable only knowledge.llm_wiki.require_inline_md_links if a repository intentionally rejects this navigation rule."
      ]
    },
    {
      "version": "0.16.40",
      "date": "2026-07-20",
      "summary": "Three downstream-reported defects fixed: no console flash on Windows hooks, .claude/skills refreshed on force-install, and the reply-delivery invariant stated upstream.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Windows Codex hooks no longer spawn a console window on every event: the cmd /c wrapper is replaced by a direct python launch with an in-process file guard, so a missing dispatcher is still a silent no-op (REQ-148).",
        "npx prd-install . --force now refreshes an existing .claude/skills mirror, so host roots stop diverging after every update (REQ-147).",
        "The reply-delivery invariant is stated in the request-intake skill upstream: a reply is not sent until the upstream inbox holds the intended message ID and exact body digest, and is never reported sent from local state alone (REQ-146)."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes so the downstream checker, gate, configuration, and skills are refreshed while project state is preserved.",
        "The inline-link policy defaults on; disable only knowledge.llm_wiki.require_inline_md_links if a repository intentionally rejects this navigation rule."
      ]
    },
    {
      "version": "0.16.41",
      "date": "2026-07-20",
      "summary": "Claude Code gets native plugin hooks, so PRD lifecycle events fire in every enabled repo - closing the last cross-host hook parity gap.",
      "risk": "medium",
      "recommendation": "safe_to_update",
      "changes": [
        "The plugin ships native Claude Code hooks (hooks/hooks.json), so all five lifecycle events fire in every repo where the plugin is enabled - no per-repo .claude/settings.json required (REQ-149).",
        "This closes the cross-host parity gap: Claude, the plugin-primary host, was the only one of the three with no plugin-native hook delivery.",
        "Hooks are exec-form addressed by ${CLAUDE_PLUGIN_ROOT}, so they never allocate a console window and resolve correctly from the plugin directory.",
        "No double-firing: a plugin-native invocation defers to a repo's own settings hooks when present, so an installed repo keeps its interpreter-detected settings hook and an un-installed repo gains plugin coverage."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes so the downstream checker, gate, configuration, and skills are refreshed while project state is preserved.",
        "The inline-link policy defaults on; disable only knowledge.llm_wiki.require_inline_md_links if a repository intentionally rejects this navigation rule."
      ]
    },
    {
      "version": "0.16.42",
      "date": "2026-07-20",
      "summary": "key_decision stops for key decisions, not for permission to keep working - the Stop guard is no longer inert in the default tier.",
      "risk": "medium",
      "recommendation": "safe_to_update",
      "changes": [
        "key_decision now stops only for actual key decisions: the Stop guard blocks an undeclared stop while an open goal exists, instead of ignoring the tier entirely (REQ-150).",
        "The blocked-stop message tells the agent to resolve the question itself first, names what does justify stopping (a genuine key decision, or the consent floor), and gives the escape.",
        "To stop legitimately, write the actual question into .prd_plugin/local/autonomy-pause - the guard lets that through.",
        "New automation.key_decision_continue_guard toggle (default true) switches it off; the per-session continue cap still bounds it and `guided` is untouched."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes so the downstream checker, gate, configuration, and skills are refreshed while project state is preserved.",
        "The inline-link policy defaults on; disable only knowledge.llm_wiki.require_inline_md_links if a repository intentionally rejects this navigation rule."
      ]
    },
    {
      "version": "0.16.43",
      "date": "2026-07-21",
      "summary": "Installs say what they changed in config.json, and an abandoned worktree that kept deleted files alive on disk is gone.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Every install now reports config_changes: exactly which config.json keys it changed, with from/to values, so installer edits can be told apart from a profile change (REQ-153).",
        "Added and removed keys are marked; lists are compared whole so the report names settings rather than array indices; unparseable input degrades to an empty list instead of failing the install.",
        "Removed an abandoned git worktree that kept a deleted skill alive on disk and made repo-wide searches misleading (REQ-152)."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes so the downstream checker, gate, configuration, and skills are refreshed while project state is preserved.",
        "The inline-link policy defaults on; disable only knowledge.llm_wiki.require_inline_md_links if a repository intentionally rejects this navigation rule."
      ]
    },
    {
      "version": "0.16.44",
      "date": "2026-07-21",
      "summary": "UTCP-first authority inversion, a validated thread-close tool, wiki-ingest drift detection, and a test suite that only goes red for real defects.",
      "risk": "medium",
      "recommendation": "safe_to_update",
      "changes": [
        "State-lock correctness: a denied mkdir on the shared lock is now read as contention in all three implementations (the MCP server plus the two Python mirrors), so two overlapping canonical writes queue instead of crashing on Windows (REQ-154, EV-186).",
        "UTCP-first: templates/tool-spec.json is now the authored source of every tool definition. The MCP server reads it and contributes only handlers, the UTCP manual is generated from it, and tool-metadata.json is a derived artifact checked against it (REQ-107).",
        "@utcp/mcp-bridge ships as a supported, verified configuration (templates/utcp-config.json). It is not the default MCP transport because it exposes a 7 meta-tool facade rather than named tools, which would break every skill that names one (DEC-014).",
        "New prd_close_thread closes a finished request thread with a reason under the shared state lock, so message_check stops reporting settled conversations as unresolved (REQ-113).",
        "New wiki-ingest drift detector reports implemented work with no corresponding wiki ingest, anchored on the wiki's high-water mark (REQ-145).",
        "The test suite no longer goes red for non-code reasons: a child process that blocked forever on an inherited stdin is fixed, and tests no longer pin the values of operator-owned config (REQ-151).",
        "REQ-072 closed as an upstream host limitation: OpenCode's session.idle is a notification, not a vetoable stop (DEC-015).",
        "Control-surface fix: a dependency chip listing three config keys could not wrap, so at phone width it ran off the panel and was clipped where the page has no sideways scroll (REQ-142, EV-185)."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes so the downstream checker, gate, configuration, and skills are refreshed while project state is preserved.",
        "The inline-link policy defaults on; disable only knowledge.llm_wiki.require_inline_md_links if a repository intentionally rejects this navigation rule."
      ]
    },
    {
      "version": "0.16.45",
      "date": "2026-07-21",
      "summary": "Downstream repos keep their own Codex hooks through a plugin refresh, and the reply-delivery invariant is greppable again.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Installer no longer deletes repo-owned Codex hooks. `.codex/hooks.json` was copied wholesale under --force, destroying any entry the repo had added to it; Codex reads one hooks file per repo, so ours and yours necessarily share it. The plugin's entries are now merged in place - identified by the command that runs prd_hook_dispatch - and everything else is preserved. An unreadable hooks.json is left untouched rather than replaced (REQ-155, EV-188).",
        "The reply-delivery invariant in project-request-intake now sits on one line, so a literal search finds it. The paragraph was never removed - a line break inside the sentence defeated three consecutive downstream checks for it (REQ-156, EV-189)."
      ]
    },
    {
      "version": "0.16.46",
      "date": "2026-07-22",
      "summary": "Completes the Codex hook fix, removes mojibaked em dashes from shipped tool metadata, and stops full test suites running anywhere but before a commit.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Codex hook ownership is decided per ENTRY, not per group. 0.16.45 classified whole hook groups, so a repo hook sitting in the same group as the plugin's dispatcher was still deleted — the same data loss REQ-155 was meant to end. A mixed group is now split: our entries are refreshed, yours are kept, and a group left with no hooks is dropped rather than carried empty (REQ-158, EV-191).",
        "Shipped tool metadata is clean UTF-8 again. templates/tool-spec.json, mcp/tool-metadata.json and utcp.json carried six mojibaked em dashes each, served to every MCP and UTCP client. Cause was stdout redirection through a cp1252 console, so prd_tools.py --output now pins UTF-8, LF and a trailing newline, and the suite rejects mojibake markers or U+FFFD in any shipped metadata (REQ-159, EV-192).",
        "Full test suites now run before a commit and nowhere else. A new PreToolUse guard (hooks.test_scope_guard.enabled, on by default) blocks a whole-suite command while nothing is staged and the change set is narrow, naming the scoped command to run instead. It allows the run when a commit is imminent, a core path moved, the change is broad, or no scoped command can be derived - and every allowed full run now announces itself first, saying whether it is the pre-commit one. PRD_FULL_SUITE=1 overrides (REQ-160, EV-193).",
        "verification.test_scope.enabled now defaults to true. It was false in the shipped default and in all four profiles, so the scoped-verification planner answered test_scope_disabled and an agent that consulted it learned nothing (REQ-160).",
        "A test method name reused inside a class now fails the suite. Python keeps the last definition, so the earlier test silently never runs; three existed here and two had lost real assertions, which were recovered rather than deleted. project-test-driven-implementation now tells agents to find and extend existing coverage before writing a new test (REQ-161, EV-194).",
        "The agent instruction files are now parity-checked. CLAUDE.md and AGENTS.md were in no parity set, so a rule could be always-in-force in one, a routing-table entry in another and absent from a third with every validator green - which is what had happened to test-first. instruction_parity.py checks a declared rule registry across all four files and fails when an always-in-force rule sits below CLAUDE.md's skills heading. Test first is now an always-in-force rule everywhere (REQ-163, EV-195)."
      ]
    },
    {
      "version": "0.16.47",
      "date": "2026-07-23",
      "summary": "Verification commands resolve to concrete executables before launch, workflow bridges honor their declared execution bound, and the full-suite guard test no longer depends on the caller's live Git state.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "The verification executor resolves every allowlisted command through the operating system before launch. On Windows, bare shims such as npm now execute through npm.cmd instead of raising FileNotFoundError before the test suite starts (REQ-166).",
        "The MCP workflow bridge now remains alive for the configured verification-command timeout plus bounded orchestration overhead. Full-suite engineering.verify runs are no longer killed by an unrelated 60-second Python bridge cap (REQ-166).",
        "The test-scope guard's stdout-contract test now builds its own temporary Git repository and explicit core-path change, so the 1,192-test suite stays deterministic regardless of whether the caller's checkout is staged or dirty (REQ-160, REQ-166)."
      ]
    },
    {
      "version": "0.16.48",
      "date": "2026-07-23",
      "summary": "CRAFTESB is now the prominent, fully defined core philosophy at the top of every hub and downstream agent instruction file.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "AGENTS.md and CLAUDE.md now open with a dedicated Core Philosophy: CRAFTESB section that defines Correct, Robust, Aligned, Faithful-to-method, Tested, Efficient, Secure, and Bounded in place. The complete bar is no longer buried below operational routing or delegated to a skill link (REQ-167).",
        "Instruction parity now fails if any hub or downstream instruction file omits the section, leaves a dimension undefined, or places CRAFTESB below the first operational heading. Installer coverage proves a normal --force refresh replaces stale CRAFTES/duplicate-Secure downstream copies with the complete CRAFTESB instructions (REQ-167)."
      ]
    },
    {
      "version": "0.16.49",
      "date": "2026-07-23",
      "summary": "Autonomous git workflows now ship clean verified commits instead of stalling for redundant push consent.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "project-git-workflow now makes the autonomy split executable: autonomous runs integrate and push a clean verified commit to the configured remote without presenting finish options or asking again, while key_decision and guided retain the explicit-consent checkpoint (REQ-168).",
        "All seven hub and downstream host-discovery copies carry the corrected rule, and regression coverage rejects the former blanket no-push wording while preserving the force-push consent floor (REQ-168)."
      ]
    },
    {
      "version": "0.16.50",
      "date": "2026-07-24",
      "summary": "Human-facing interfaces now prefer readable names and labels while keeping internal system IDs behind the scenes.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Hub and downstream AGENTS.md and CLAUDE.md now require human-readable names, titles, summaries, or labels as primary UI text. Internal IDs may appear only when requested or needed for disambiguation, support, or audit, and then only as secondary copyable detail (REQ-169).",
        "The shared reporting method and instruction-parity registry carry the same rule, with regression coverage across all four agent instruction files and both method copies (REQ-169)."
      ]
    },
    {
      "version": "0.16.51",
      "date": "2026-07-24",
      "summary": "The settings UI now organizes controls by human purpose and explains important on/off and latency trade-offs.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "All 109 catalog settings now render in 11 collapsed human-purpose groups such as Agent autonomy, Logging & audit, and Reporting & reflection, while the existing technical category fields remain compatible for API consumers (REQ-170).",
        "Twelve high-impact settings now provide expandable use-case, enabled-effect, disabled-effect, and latency guidance. Known configured bounds are shown directly; environment-dependent costs are identified without fabricated duration estimates (REQ-170).",
        "Settings use human-readable visible and accessible labels with technical config keys retained as secondary detail. Browser verification covers category expansion, guidance expansion, accessible switch names, configured timeout text, and narrow-panel overflow (REQ-170)."
      ]
    },
    {
      "version": "0.16.52",
      "date": "2026-07-24",
      "summary": "A report-first Reasoning Guard now carries decision-relevant evidence promises across tools and hosts before unsupported conclusions or permanent changes.",
      "risk": "medium",
      "recommendation": "safe_to_update",
      "changes": [
        "One deterministic engine tracks IDENTIFIED, PLANNED, EXECUTED, EVIDENCED, RESOLVED, and DEFERRED obligations from visible event streams. The global mode is report by default, with on/report/off behavior and independent inherit/on/report/off overrides for evidence follow-through, causal claims, permanent mutations, and completion claims (REQ-171).",
        "Codex, Claude Code, and OpenCode share the same dispatcher, parser, state, and mode semantics. Claude observes every pre/post tool event; OpenCode now sends post-tool results and reprompts on enforce-mode findings; any event without a visible reasoning summary declares reduced coverage instead of claiming parity it cannot prove (REQ-171).",
        "The ignored local reason_guard.json is schema-versioned, bounded, replay-idempotent, concurrency-locked, and atomically replaced. Private prompts are excluded, nested credentials and secret flags are redacted, unrelated tool output cannot satisfy a promised control, malformed state recovers with diagnostics, and on mode fails closed only at guarded boundaries (REQ-171).",
        "Unified config, built-in profiles, status, grouped UI controls, measured p50/p95 latency guidance, safe-upgrade defaults, operator documentation, and prominent downstream AGENTS.md/CLAUDE.md evidence-follow-through rules ship together with focused, cross-host, concurrency, security, installer, and end-to-end regression coverage (REQ-171)."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes. Existing config is preserved and gains the report-first Reasoning Guard defaults; use the configuration UI or prd-config to choose another global or category mode."
      ]
    },
    {
      "version": "0.16.53",
      "date": "2026-07-24",
      "summary": "Reasoning Guard now reads Codex's explicit visible summaries from its trusted rollout path and retains cumulative session coverage.",
      "risk": "medium",
      "recommendation": "safe_to_update",
      "changes": [
        "Codex hooks supply transcript_path rather than the inline reasoning_summary field assumed by 0.16.52. The guard now reads only response_item.reasoning.summary[].summary_text values from a bounded rollout tail under the configured Codex sessions directory (REQ-172).",
        "Raw and encrypted reasoning, prompts, messages, and transcript tool data remain excluded. Paths outside the Codex sessions directory, non-rollout files, malformed records, and unavailable transcripts fail safely as reduced coverage (REQ-172).",
        "Visible-summary, tool-input, and tool-result coverage now accumulates within the current session instead of being overwritten by every event, while a different session starts with fresh coverage (REQ-172)."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes. Existing Reasoning Guard configuration is preserved; Codex coverage corrects itself on the next hook event with a valid transcript_path."
      ]
    },
    {
      "version": "0.16.54",
      "date": "2026-07-24",
      "summary": "Reasoning Guard now provides bounded structured evidence contracts, typed deterministic acceptance, coalesced diagnostics, and coverage-qualified clearance across Claude, Codex, and OpenCode.",
      "risk": "medium",
      "recommendation": "safe_to_update",
      "changes": [
        "Version-1 Evidence-Check directives create bounded typed obligations with explicit blocking authority. Heuristic prose remains low-confidence and report-only, and schema-1 local reports migrate atomically into non-blocking schema-2 history (REQ-173).",
        "Tool evidence is bound by tool identity and outcome and evaluated only through outcome_is, json_field_equals, output_contains_all, and output_contains_none. Aggregate byte, evidence, predicate, nesting, and collection bounds apply to every ingress form; raw tool output, private reasoning, prompts, and secrets are not persisted (REQ-173).",
        "Repeated findings coalesce by diagnostic code and obligation. A derived human-readable clearance receipt reports clear, conditional, or blocked status with mode, coverage, limitations, deferred work, blockers, and a report digest; status and UI keep internal IDs secondary (REQ-173).",
        "Claude, Codex, and OpenCode use one shared kernel and schema. Hub and downstream AGENTS.md/CLAUDE.md explain explicit directives near the evidence-follow-through rule, and focused benchmark plus installer, parity, privacy, migration, E2E, and release coverage ship together (REQ-173)."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes. Existing Reason Guard configuration remains report by default; supported local schema-1 state migrates on the next visible hook event."
      ]
    },
    {
      "version": "0.16.55",
      "date": "2026-07-25",
      "summary": "Reasoning Guard now recovers Codex visible-summary coverage from the trusted session rollout when a hook event omits its transcript path.",
      "risk": "medium",
      "recommendation": "safe_to_update",
      "changes": [
        "Codex events with a null or missing transcript_path now resolve exactly one rollout from the UUID-shaped session_id below the configured Codex sessions root, restoring explicit visible-summary coverage without trusting project-controlled paths (REQ-172).",
        "Invalid session IDs, traversal or glob syntax, ambiguous matches, symlink escapes, paths outside the sessions tree, non-rollout files, raw reasoning, and encrypted reasoning remain rejected (REQ-172).",
        "The AI-Collab-v3 reproduction found 964 visible summaries before the stale reduced-coverage report update. Real-store fallback measured 27.522 ms p95 with 297 sessions, within the existing 50 ms release ceiling (REQ-172)."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes. Existing Reasoning Guard configuration and local report state are preserved; Codex coverage corrects itself on the next hook event carrying the affected session ID."
      ]
    },
    {
      "version": "0.16.56",
      "date": "2026-07-25",
      "summary": "Reasoning Guard now recognizes normal active-check summary headings, reports unresolved inferred work as conditional, and measures classification accuracy and latency.",
      "risk": "medium",
      "recommendation": "safe_to_update",
      "changes": [
        "Anchored visible-summary forms such as Investigating, Tracing, Diagnosing, and Assessing create low-confidence report-only obligations only when they also name a consequential system area and a concrete decision signal; cosmetic near-misses remain ignored (REQ-174).",
        "Full visible coverage with an unresolved inferred obligation now yields conditional rather than clear clearance. Explicit directives remain the only source of blocking authority (REQ-174).",
        "The existing local report, status output, and UI expose aggregate observed-summary, candidate, created, reconciled, and ignored counts alongside measured latency. No additional summary text is stored for telemetry (REQ-174).",
        "The focused benchmark now reports a labelled confusion matrix, precision, recall, F1, accuracy, missed case IDs, and classifier latency. Release gates require at least 0.95 precision and recall, zero required misses, and classifier p95 no greater than 1 ms without a model, network call, or new dependency (REQ-174)."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes. Existing Reasoning Guard modes and local state remain compatible; aggregate classification counters initialize on the next observed summary."
      ]
    },
    {
      "version": "0.16.57",
      "date": "2026-07-25",
      "summary": "Reasoning Guard now recognizes Codex Markdown-emphasized active headings proven by a live in-repository session replay.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "Codex Markdown emphasis delimiters now act as bounded active-heading boundaries, including a qualifying heading after an earlier neutral heading, while consequential-area and decision-signal gates remain unchanged (REQ-174).",
        "The live PRD Plugin session reached full transcript coverage and contained three qualifying candidates among 548 visible summaries. Replaying an actual candidate through the hook created one report-only obligation and changed clearance from clear to conditional (REQ-174).",
        "The labelled corpus now covers 46 positive, negative, control, and Markdown near-miss cases with 1.0 precision, recall, F1, and accuracy and 0.011 ms classifier p95 on the release run (REQ-174)."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes. Existing Reason Guard configuration and local state remain compatible."
      ]
    },
    {
      "version": "0.16.58",
      "date": "2026-07-25",
      "summary": "Reasoning Guard now prevents false-clear reports by abstaining on active-looking summaries that its high-confidence classifier cannot safely interpret.",
      "risk": "medium",
      "recommendation": "safe_to_update",
      "changes": [
        "Representative evaluation replaced the vocabulary-leaky 46-case claim. Deduplicated real-session development and holdout data now report candidate precision, safety recall, clear specificity, abstention rate, stratum results, misses, and latency; ambiguous labels are excluded rather than forced negative (REQ-174).",
        "The narrow high-confidence obligation classifier remains unchanged. Other active-looking visible summaries increment only an aggregate uncertainty counter, create no obligation, store no summary text, never block, and make an otherwise-clear receipt conditional (REQ-174).",
        "On the frozen holdout the narrow classifier made no candidate predictions, so precision is reported as unmeasured rather than a vacuous 1.0; safety recall was 1.0, overall clear specificity 0.7778, representative-neutral clear specificity 0.875, misses and false obligations zero, and classification p95 0.017 ms. Synthetic candidate precision remained 1.0. Lexical expansion, MiniLM, and character n-grams were rejected for accuracy or hook-path latency (REQ-174).",
        "Status and UI expose the human-readable uncertain-summary count. Existing schema-2 local reports gain a zero-valued counter in place without losing state; source and downstream template hooks remain byte-identical (REQ-174)."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes. Existing Reason Guard modes and reports remain compatible; uncertainty telemetry initializes automatically on the next hook event."
      ]
    },
    {
      "version": "0.16.59",
      "date": "2026-07-25",
      "summary": "Reasoning Guard can now backfill the latest 20, a custom recent count, or the full trusted visible-summary history and then follow new summaries exactly once.",
      "risk": "medium",
      "recommendation": "safe_to_update",
      "changes": [
        "Reason Guard defaults to recent history with a limit of 20. Operators can choose live for the smallest startup read, set a positive recent count, or choose full for complete trusted rollout history (REQ-175).",
        "A compact source-bound byte cursor and covered interval process unseen complete summary_text records oldest-to-newest exactly once, including across mode changes beyond the bounded digest window. Torn tails retry; source replacement or shrinkage reports reduced coverage (REQ-175).",
        "Coverage now distinguishes live_full, recent_backfill, historically_complete, and reduced ingestion failure. Status and the grouped configuration UI explain the auditability, latency, and temporary-memory trade-offs (REQ-175).",
        "Report schema 3.0 stores only bounded ingestion metadata and aggregate telemetry. Private or encrypted reasoning, prompts, messages, and tool payloads remain excluded; no model, embedding, RAG service, daemon, GPU path, network call, or dependency was added (REQ-175)."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes. Existing schema 1.0 and 2.0 reports migrate on the next event. The enforcement default remains report; the new history default is recent 20."
      ]
    },
    {
      "version": "0.16.60",
      "date": "2026-07-25",
      "summary": "Reason Guard now retains separate Claude, Codex, and OpenCode session reports and can backfill trusted visible Claude assistant history.",
      "risk": "medium",
      "recommendation": "safe_to_update",
      "changes": [
        "Separate ignored host ledgers retain up to 20 schema-3 session reports for Claude, Codex, and OpenCode while reason_guard.json remains the active-session compatibility snapshot. Concurrent sessions remain distinct and legacy state migrates on the next event (REQ-176).",
        "Claude now applies the existing live, recent-20, custom-recent, and full history contract to trusted UUID-named transcripts below the Claude projects tree. Only exact visible assistant text blocks are admitted; thinking, signatures, user records, tools, unknown shapes, and out-of-tree paths are excluded (REQ-176).",
        "Status and the offline UI list readable provider/surface/model/effort/session history with coverage, clearance, processed-summary count, and p95 latency while keeping the system session ID secondary. Codex Desktop, Codex CLI, Claude Desktop, Claude CLI, OpenCode, and honest unknown surfaces remain distinct; each retained session includes its latest trusted bounded model and effort inside the same provider/session ledger and classifier (REQ-176).",
        "An existing 733,150-byte Claude session was backfilled offline without launching Claude: the isolated default-recent proof selected exactly 20 visible records and measured 11.319 ms for the single guard sample. Focused tests cover privacy, migration, concurrency, history bounds, mode selection, and source/template parity (REQ-176)."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes. Existing reason_guard.json state is preserved and seeds the matching host ledger on the next event. No live Claude session is required for migration."
      ]
    },
    {
      "version": "0.16.61",
      "date": "2026-07-25",
      "summary": "Reason Guard now keeps inferred obligations, evidence binding, lifecycle diagnostics, and Claude visible-text normalization precise under real backfill.",
      "risk": "medium",
      "recommendation": "safe_to_update",
      "changes": [
        "Heuristic commitment classification is clause-local, so a completed analysis or ordinary reporting promise cannot borrow check and decision tokens from another sentence and become a false obligation (REQ-174).",
        "Heuristic execution now requires both a matching check action and a shared subject before binding the exact tool-use result. Generic system-area overlap can no longer attach unrelated test output as evidence (REQ-174).",
        "Repeated equivalent boundaries retain bounded event evidence but increment occurrence telemetry only after an obligation lifecycle transition. EVIDENCED findings now say that explicit reconciliation is missing rather than claiming evidence is missing (REQ-174).",
        "Allowlisted Claude visible text is NFC-normalized and recognizable CP1252/Latin-1-to-UTF-8 mojibake is conservatively repaired before sanitization and hashing. The change adds no model, service, dependency, network path, or configuration (REQ-174, REQ-176)."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes. Existing schema-3 reports and configuration remain compatible; retained findings learn their current lifecycle state on the next matching boundary without inflating the occurrence count."
      ]
    },
    {
      "version": "0.16.62",
      "date": "2026-07-28",
      "summary": "Asking an agent to check messages now checks the current repository's PRD Plugin inbox first.",
      "risk": "low",
      "recommendation": "safe_to_update",
      "changes": [
        "A first-class read-only prd_check_messages MCP tool reports the current repository's new and imported inbox packages, outbox packages, mailbox files, pending replies, and unresolved request threads (REQ-007).",
        "message_check.py is now mandatory downstream runtime instead of an optional helper, so the tool and CLI fallback exist in every Codex, Claude, and OpenCode installation (REQ-007).",
        "Always-in-force AGENTS.md and CLAUDE.md rules plus the request-intake skill route phrases such as 'check messages' and 'any messages' to the current repo's PRD Plugin transport before chat, email, collaboration, or host-message surfaces (REQ-007)."
      ],
      "migration_notes": [
        "Update the package and run npx prd-install . --force without --yes. Restart or refresh the host MCP connection so prd_check_messages appears in the tool list."
      ]
    }
  ]
}
