diff --git a/.changes/architecture/fix-d27-stale-facts-3e522788.md b/.changes/architecture/fix-d27-stale-facts-3e522788.md new file mode 100644 index 00000000000..ed4c8bb5c3a --- /dev/null +++ b/.changes/architecture/fix-d27-stale-facts-3e522788.md @@ -0,0 +1,7 @@ +--- +bump: patch +--- + +### Fixed + +- Corrected stated facts that had gone stale or were wrong, each checked against its current source. diff --git a/.changes/code-tidying/fix-d27-stale-facts-5c5a241a.md b/.changes/code-tidying/fix-d27-stale-facts-5c5a241a.md new file mode 100644 index 00000000000..ed4c8bb5c3a --- /dev/null +++ b/.changes/code-tidying/fix-d27-stale-facts-5c5a241a.md @@ -0,0 +1,7 @@ +--- +bump: patch +--- + +### Fixed + +- Corrected stated facts that had gone stale or were wrong, each checked against its current source. diff --git a/.changes/event-storming/fix-d27-stale-facts-07d51153.md b/.changes/event-storming/fix-d27-stale-facts-07d51153.md new file mode 100644 index 00000000000..ed4c8bb5c3a --- /dev/null +++ b/.changes/event-storming/fix-d27-stale-facts-07d51153.md @@ -0,0 +1,7 @@ +--- +bump: patch +--- + +### Fixed + +- Corrected stated facts that had gone stale or were wrong, each checked against its current source. diff --git a/.changes/machine-health/fix-d27-stale-facts-75212561.md b/.changes/machine-health/fix-d27-stale-facts-75212561.md new file mode 100644 index 00000000000..ed4c8bb5c3a --- /dev/null +++ b/.changes/machine-health/fix-d27-stale-facts-75212561.md @@ -0,0 +1,7 @@ +--- +bump: patch +--- + +### Fixed + +- Corrected stated facts that had gone stale or were wrong, each checked against its current source. diff --git a/.changes/session-flow/fix-d27-stale-facts-63949c65.md b/.changes/session-flow/fix-d27-stale-facts-63949c65.md new file mode 100644 index 00000000000..ed4c8bb5c3a --- /dev/null +++ b/.changes/session-flow/fix-d27-stale-facts-63949c65.md @@ -0,0 +1,7 @@ +--- +bump: patch +--- + +### Fixed + +- Corrected stated facts that had gone stale or were wrong, each checked against its current source. diff --git a/.changes/work-items/fix-d27-stale-facts-8b97b159.md b/.changes/work-items/fix-d27-stale-facts-8b97b159.md new file mode 100644 index 00000000000..ed4c8bb5c3a --- /dev/null +++ b/.changes/work-items/fix-d27-stale-facts-8b97b159.md @@ -0,0 +1,7 @@ +--- +bump: patch +--- + +### Fixed + +- Corrected stated facts that had gone stale or were wrong, each checked against its current source. diff --git a/plugins/architecture/skills/improve/actions/deepening.md b/plugins/architecture/skills/improve/actions/deepening.md index 0dc240b226f..7a57ceb9043 100644 --- a/plugins/architecture/skills/improve/actions/deepening.md +++ b/plugins/architecture/skills/improve/actions/deepening.md @@ -76,7 +76,7 @@ Verification can be a second cheap read-only subagent pass or inline reproductio **Re-badge first.** Before rendering, map each surviving candidate's scan `confidence` to its `recommendation` badge (`strong` → `Strong`, `worth-exploring` → `Worth exploring`, `speculative` → `Speculative`), then re-badge against the two acceptance heuristics below (deletion-test acceptance form, two-adapter rule) and the Phase 1.5 verification result. Scan-time confidence is an input, not the final badge. A candidate whose `shallow-signal` failed to reproduce, or whose value rests on a one-adapter abstraction, cannot carry `Strong`. **Promotion closes the same gate:** if re-badging lifts a candidate the scan rated below `strong` up to `Strong`, apply the Phase 1.5 reproduction to its `shallow-signal` *before* it carries the badge. A `Strong` claim reaches the report reproduced no matter which way the badge was reached, so the Phase 1.5 guarantee holds across both the original strong set and any promotions. -The report is one self-contained HTML file under the OS temp directory, one per run, created via a secure temp-file primitive so the path is unpredictable and permissions are restrictive. On Unix/Linux, create a run directory with `mktemp -d "${TMPDIR:-/tmp}/deepening-review-XXXXXX"` and write `report.html` inside it. Carry the temp root in the positional template, the one form GNU and BSD `mktemp` accept identically, since `-p`/`--tmpdir`/`-t` differ between the dialects and a bare relative template silently creates the file in the **current directory**, the consumer's repository. Keep the `XXXXXX` placeholders **trailing**. BSD `mktemp` (macOS) substitutes only trailing Xs, so an extension after them is not portable. A directory plus a fixed filename is the form that keeps the Xs trailing while still yielding a meaningful `.html` name. On Windows, use a user-scoped temp under `%LOCALAPPDATA%\Temp` or equivalent. Resolve that one path deterministically. Never branch on an injected scratchpad path or `CLAUDE_JOB_DIR`. Show it to the user through the platform's opener: `start` (Windows), `open` (macOS) or `xdg-open` (Linux), each given the path. Report the absolute path. Do **not** delete the file after reporting: the path is the delivery mechanism and must stay readable for the user to open. It outlives the invocation and nothing documented reclaims the OS temp tree on a schedule, which is why one run writes one file and never an accumulating tree. +The report is one self-contained HTML file under the OS temp directory, one per run, created via a secure temp-file primitive so the path is unpredictable and permissions are restrictive. On Unix/Linux, create a run directory with `mktemp -d "${TMPDIR:-/tmp}/deepening-review-XXXXXX"` and write `report.html` inside it. Carry the temp root in the positional template, the one form GNU and BSD `mktemp` accept identically, since `-p`/`--tmpdir`/`-t` differ between the dialects and a bare relative template silently creates the file in the **current directory**, the consumer's repository. Keep the `XXXXXX` placeholders **trailing**. BSD `mktemp` (macOS) substitutes only trailing Xs, so an extension after them is not portable. A directory plus a fixed filename is the form that keeps the Xs trailing while still yielding a meaningful `.html` name. On Windows, use a user-scoped temp under `%LOCALAPPDATA%\Temp` or equivalent. Resolve that one path deterministically. Never branch on an injected scratchpad path or `CLAUDE_JOB_DIR`. Show it to the user through the platform's opener: `start` (Windows), `open` (macOS) or `xdg-open` (Linux), each given the path. Report the absolute path. Do **not** delete the file after reporting: the path is the delivery mechanism and must stay readable for the user to open. It outlives the invocation, which is why one run writes one file and never an accumulating tree. **The rendered-views security baseline governs the report.** The baseline is owned by `docs/contracts/rendered-views/README.md` ("Security baseline") in the marketplace repository; its rules are repeated here because this skill runs where that file is not on disk. Everything taken from the scanned repository is untrusted data: escape `&`, `<`, `>`, `"`, and `'` in text and attribute positions; never interpolate unescaped content into `