chore(knowledge): retire fable-5 guide doc-queue entry after slice completion - #1752
Conversation
…mpletion The prompting-claude-fable-5 digest slice completed end-to-end (fetch through interview handoff; Verifier A PASS, Verifier B cross-vendor corrections applied and re-verified PASS), so its entry leaves the Anthropic profile's doc queue per the queue's remove-on-completion rule. The two thinking docs decided by the effort-slice disposition were already enqueued in 0.10.1 and remain queued; both verified live at their queued URLs at edit time. Knowledge plugin 0.10.1 -> 0.10.2 with CHANGELOG entry (changelog-parity green). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 17s —— View job PR Review
LGTM — no findings. This is a clean, minimal housekeeping change. All three files are internally consistent and correctly scoped.
|
| Check | Result |
|---|---|
Conventional Commits title (chore(knowledge): …) |
✓ |
Branch pattern (chore/<description>) |
✓ |
| CHANGELOG entry paired with version bump (changelog-parity) | ✓ |
| No hardcoded project paths / repo-agnostic | ✓ |
| No secrets, no egress config changed | ✓ |
| Thinking-doc URLs not re-added (already present from 0.10.1) | ✓ |
No issues found. Ready to merge.
|
Claude finished @kyle-sexton's task in 54s —— View job Security Review — PR #1752
No security issues found. The three changed files are entirely metadata and documentation:
Checked and ruled out: command/path/template injection, credential or token exposure, authorization changes, new external trust delegation, dependency or action pin changes, data egress risk, and dangerous GitHub Actions patterns. None are present. The diff is a queue-entry retirement with a matching version bump and changelog entry. |
…er slice completion (#1756) ## Summary - Removes the new-rules-of-context-engineering blog entry from the `docpage-digest` Anthropic profile's doc queue — its slice completed end-to-end (fetch through interview handoff) per the queue's remove-on-completion rule. - Channel: rendered (raw-md confirmed absent for this page — `.md` probe 404, `Accept: text/markdown` ignored — matching the profile's blog-post channel note); `source.html` unaltered original + firecrawl 1.19.27 markdown extraction, artifacts recorded in the slice checklist. - Slice verification: Verifier A (same-vendor, fresh context) CORRECTION-NEEDED (1+3); Verifier B (cross-vendor Codex CLI 0.146.0 via the issue #1740 elevated recipe, no degraded fallback) CORRECTION-NEEDED (10+1). All findings applied; cross-vendor re-verify round 1 resolved all 15 and surfaced 2 correction-introduced issues; round 2 REVERIFY2: PASS. Records under `.work/claude-com-blog-the-new-rules-o-8e418fc0/verification/`. - Knowledge plugin `0.10.2` → `0.10.3` with matching CHANGELOG entry. ## Verification - `markdownlint-cli2` on changed markdown: 0 errors - `check-skill.sh docpage-digest` (`CHECK_SKILL_SKILLS_ROOT=plugins/knowledge/skills`, base `origin/main`): PASS (1 pre-existing soft warning, SKILL.md length) - `check-changelog-parity.sh --check-bump origin/main`: PASS - Independent fresh-context reviewer on the diff: APPROVE (traced the changelog claims to the slice checklist and verification records; its one non-blocking wording observation was applied before commit) - Base freshness: fetched origin/main immediately before commit; zero commits behind ## Related - #1752 (previous doc-queue completion in this series — fable-5 guide slice) - #1740 (Verifier B elevated recipe used for cross-vendor verification) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…1544) *This was generated by AI during work-loop execution.* ## Summary Enables the two shell-portability-lint classes #1510 staged for this PR — `date -d` and `stat -c`. (The issue's third class, `mktemp -p`, went active separately in #1543 while this branch was open, so the token file's STAGED section is now empty.) - **Precision fixes to the staged regexes.** The original patterns matched `date`/`stat` as bare substrings, so `[[ -d "$candidate" ]]` (via "can-**DATE**") and `git -c alias.x=status -c ...` (via "**STAT**us") false-positived. Both now require whitespace immediately after the command name. - **Extended `is_guarded()`** with a same-line `stat -c` / `stat -f` guard requiring an actual `||` fallback relationship, matching the rigor #1519/#1534 established for the `readlink`/`realpath` guard. - **Ran `scripts/check-shell-portability.sh --all`** per the issue's step 4 and resolved every real hit from the two newly-active classes: - `portability-ok:` annotations on already-correct dual-dialect date/stat call sites in `claude-ops`, `context-guard`, `kindle-dedrm`, `work-items` (most span a line break or an if/else block, so the same-line auto-guard cannot recognize them even after extension); - a genuine fix for one previously-unguarded gap: `skill-quality`'s vendor-sync-age check had no BSD `date` fallback at all and silently no-op'd on macOS; - Windows-only-script annotations for `kindle-dedrm`'s two `stat -c` sites. - **Pre-existing violations of already-active classes** surfaced by touching `skill-quality/scripts/check-skill.sh` (GNU-only `\S`/`\b` escapes in its own `grep -qE` patterns) were fixed so the PR's own diff stays clean. - Every touched plugin's version is bumped with a matching CHANGELOG entry. ## Scanner correctness work (review rounds) Codex review found defects in the scanner itself across several rounds. Every one is addressed here — all but one fixed, and that one recorded as designed behavior. The first five: | Reported shape | Direction | Resolution | | --- | --- | --- | | `stat ${x:-$((1 \| 2))} -c %s` read clean | fail-open | Fixed — arithmetic expansion is its own mask state with per-frame paren-depth tracking, so `$((` is no longer consumed as `$(` plus a stray `(` | | `x=$(stat -c …) y=$(true) \|\| stat -f …` read as a guarded ladder | fail-open | Fixed — `status_swallowed()` now establishes that the matched frame is the *status-determining* frame of its command, rather than excluding one neighbour shape at a time | | `d"a"te -d …` / `st"a"t -c …` read clean | fail-open | Fixed — command names are spelled letter-by-letter with optional quote runs between them, since quote removal splices the word before the utility sees argv | | A quoted word spanning physical lines hid its option | fail-open | Fixed — records join on an unterminated quote as they already did on a dangling backslash, with every escape attributed to the physical line the hit sits on | | A utility named in a string (`echo "run date -d tomorrow"`) is reported | false positive | **Not fixed — documented.** Recorded in the script header as the gate's largest accepted over-flag | On the last row: matching text the shell would treat as a string literal is the whole mechanism behind the regex-escape classes, where `grep -E "\bword"` lives inside quotes and must still be caught. Requiring command position for the option-based classes alone needs a per-class axis in the token data plus word-level tokenization, and every partial answer trades this false positive for a fail-**open** — the same trade already made and withdrawn for `--` (see the block above `collapse_subs()`). `portability-ok:` is the one-line escape. This is the same decision already taken once in this file, now written down rather than left implicit. Two further defects were found and fixed while closing the quote-join finding, both pre-existing: - **Heredoc bodies leaked quote state.** A stray backquote in a PowerShell settings body (``"CustomRule`Path"``) opened a frame that, once joining was active, swallowed the 57 lines after it. Heredoc bodies are now excluded from joining — they are data, so they can neither continue a command nor leave a quote open — while still being scanned, since this corpus writes real scripts through heredocs. - **A `#` opening a joined physical line did not start a comment**, so a commented-out `|| stat -f` could excuse a hit above it. A newline now joins `WORDSTART`. The security-review lane then found a third, in the gate's own plumbing: a relative `SHELL_PORTABILITY_TOKENS` path shaped like `identifier=value` is parsed by awk as a variable assignment rather than opened, so no class loaded, every file reported clean, and awk still exited 0 — invisible to the scanner-fault check. It now gets the same `./` disambiguation the scanned file already had, and an empty pattern set fails closed however it arose. A further review round then found six more, five of them pre-existing and one a regression from the quote-join above. Rather than answer them one at a time — the pattern that had been producing a fresh variant every round — they were taken as three families and generalized: - **Quote spellings the token classes did not admit.** A backslash quotes exactly as a quote pair does, so the quote-run class is now `['"\]` in every place the command word, the short-option cluster and the long option are spelled — closing `da\te -d`, `date -\d`, `date "--date"`, `date --"date"=` and `stat --"format"=` together. `&>` / `&>>` join the separator class after the command name, since bash runs `date&>/dev/null -d tomorrow` with the GNU-only option. - **Boundaries that predate records containing a newline.** A structural newline ends a command inside a `$( )` frame, so it now bounds the guard's segment gap and the lookback both guards share. That lookback became a backward scan rather than a greedy `.*[;|&)]` match, because whether `.` matches a newline is an awk-implementation difference this gate must not rest on. **This closes the one regression the quote-join introduced**: `x=$(stat -c …` newline `true) || stat -f …` had read as a guarded ladder. - **Frames still not tracked.** A raw subshell inside a command substitution was not pushed, so its closing paren popped the substitution — the same unbalanced-frame failure the arithmetic branch fixed, one spelling over. A `)` with no frame open remains a `case` pattern terminator. Also in that round: a spaced redirection operand (`|| 2> /dev/null stat -f …`) is no longer rejected as a non-ladder, and the whole-file `portability-scope:` declaration moved out of a grep pre-pass into the awk program. A grep sees no shell structure, so it honored the token inside a heredoc **body**, where the line is generated data rather than a declaration the file makes about itself — one such line silently exempted a whole file. A final round found the same quote family reached through Bash ANSI-C (`$'…'`) and locale (`$"…"`) quoting: `d$'a'te -d`, `date -$'d'`, `stat -$'c'`, `st$'a't -c` and `date $"--date"=` all reach the GNU utility while reading clean. A quote-run element is now `(\$?['"]|\\)` — an optional `$` before a quote, or a backslash — defined once and shared by the command word, the short-option cluster, the long option, and the fallback guard. A **bare** `$` is deliberately excluded, since `$config` is a variable expansion rather than quote removal: `validate -d $config` stays clean and `d$a$t$e` is not a spelling of `date`, both pinned as negatives. Moving the scope decision into awk then turned out to have fixed only the heredoc half of its own problem: the check still read the raw record without asking what earlier lines had left open, so a physical line spelling `# portability-scope:` inside a multiline quoted value or substitution granted whole-file scope and suppressed every hit in the file. The marker now counts only on a line that also *opens* its own record — the one context where a leading `#` starts a comment rather than being data. A genuine declaration is unaffected, and the regression cases pin both directions, since the cheap fix here is one that quietly breaks the declaration it exists to protect. ## Token-file premise correction (rode along) The `mktemp -p` rationale comment asserted BSD/macOS mktemp "has no `-p`". It does — FreeBSD 14.2 and Apple both document `-p tmpdir, --tmpdir[=tmpdir]`. The real hazard is **precedence, and it diverges silently**: GNU treats `-p` as authoritative and overrides `TMPDIR`, while BSD/macOS consults it only as a fallback when `TMPDIR` is unset, so the same command writes to different directories per platform with no error either way. The gate's *behavior* was already correct; only its stated reason was wrong. Carried here because this PR owns the token file. The plugin CHANGELOG entries that quoted the old sentence are historical and left alone. ## Test plan - [x] `bash scripts/check-shell-portability.test.sh` — **215/215 passing**, including new regression cases for every shape above (arithmetic-expansion frames, sibling-substitution status ownership, quote-spliced command words on both rungs of a ladder, quoted words spanning lines, per-physical-line attribution and annotation scoping, heredoc-body isolation, and the joined-line comment opener). - [x] `scripts/check-shell-portability.sh origin/main` (this PR's own diff, 15 shell files in scope) — clean. - [x] `scripts/check-shell-portability.sh --all` — **19 hits, the same hits `origin/main`'s own scanner reports over the same tree**, all from unrelated already-active regex-escape classes and none from the two newly-active ones. Every scanner change above was held to that comparison, so no fix introduced a false positive anywhere in the corpus. One hit is attributed to a different line than main reports it: this PR introduces logical-line joining, so a backslash-continued record is now reported at its first physical line, as the script header specifies. That joining is also what makes a `date` whose `-d` sits on the next continued line reportable at all — main reads that shape clean. - [x] Full test suites for every touched script pass: `morning-brief.test.sh`, `claude-observability.test.sh`, `context-zone.test.sh`, `statusline-tee.test.sh`, `lease.test.sh`, `check-skill.test.sh`. - [x] `shellcheck --rcfile=.shellcheckrc` on every changed `.sh` file — clean. - [x] `scripts/validate-plugins.sh` — all manifests + catalog validate. - [x] `scripts/check-changelog-parity.sh --check-bump origin/main` — every version-bumped plugin has a matching CHANGELOG entry. ## Related - Closes #1510. - #1491 — original shell-portability-lint gate. - #1543 — activated `mktemp -p`, the issue's third class, independently of this PR. - #1528 — the deferred `mktemp -p` migration; closed. - #1562 — `--` end-of-options handling, which shares the word-level tokenization the command-position over-flag documented above would also need. - Rebased onto #1519 / #1534 / #1530, which merged mid-session and changed the same `check-shell-portability.sh` / `shell-portability-tokens.txt` files. Merged with `origin/main` again after #1603 / #1751 / #1752 landed; `context-zone.test.sh` takes main's side whole, since main replaced the unsuffixed `sed -i` this branch had annotated with a genuinely portable form. --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…ry (#1868) ## Summary The thinking-steering-and-cost platform doc slice completed, so its entry leaves the `docpage-digest` Anthropic profile's doc queue per the queue's remove-on-completion rule. The now-empty "Thinking" category heading goes with it — that category held two overlapping docs digested one page per run under its own contract, and the run-9 entry's PR (#1842) removed the first while anticipating this removal taking the heading. Knowledge bumps 0.10.10 → 0.10.11 so consumers receive the queue change. ## Verification Dual verification reached PASS on both arms against **identical frozen bytes** — a SHA-256 pin of all nine slice files, with the tree quiesced before either arm audited, per the frozen-tree rule this campaign adopted after a concurrent-correction race produced a spurious MAJOR. - **Arm B (cross-vendor, Codex)** — `VERDICT: PASS`, `FINDINGS: none`, six checks PASS, three round-1 findings RESOLVED. - **Arm A (same-vendor, fresh context, rationale withheld)** — `REVERIFY2: PASS`, six checks PASS, five prior findings RESOLVED, three MINORs, all record-keeping and none touching fidelity. Fidelity was swept mechanically: all 108 quoted spans across the six digests are exact substrings of the single source line each cites, 0 misses. Tag census 41 `cc-applicable` / 28 `mixed` / 12 `api-only` = 81 rows, exactly one vocabulary tag per row. The three MINORs were remediated after the verdicts without altering any claim row: two stale self-check footer records got dated "historical as of" annotations, and the missing round-2/3 applied record was written. The slice's `interview-handoff.md` was independently re-validated against the corrected digest bytes by a separate agent and its five stale items corrected. No degraded fallback was used at any point. Three findings from this run carry to the batched dispositions interview rather than this PR: the absence of any cross-digest citation-consistency check in the verification contract, the absence of a required applied-record artifact per correction round, and a genuine unharmonized cross-source tension about where a resolved effort value physically lives. ## Related - Follows #1842 (run 9, the paired thinking doc), which removed the first entry of this category. - Same campaign as #1816, #1788, #1779, #1775, #1765, #1761, #1756, #1752. No linked issue. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ge-digest queue (#1874) The `platform.claude.com/docs/en/release-notes/system-prompts` slice completed. It is the **last entry in the doc queue** — after this merges, the queue section holds only the deferred task-budgets trigger entry, which was never queued. ## What ran The largest slice this pipeline has processed: **18 digests over a 2,548-line source, 659 claim rows, 561 `api-only`.** - Seven correction rounds and five dual-verification rounds, each on SHA-256-pinned bytes with the frozen-tree rule enforced — both arms re-hash before *and* after auditing, and no correction runs while a verifier holds the tree. - Final state: both arms `VERDICT: PASS`, with a confirming round after the last corrections. - Final gates: **1,895 recorded command/count pairs replay with 0 mismatches**, 0 `<corpus>` placeholders, 659/659 rows parse with `N. Quote (line` count equal to `- Tag:` count in all 18 digests, every stated tally equal to its anchored `grep -c`, `check-quotes.py` clean. ## What the run found worth carrying forward - **Narrow-slug false absences** remained the dominant defect — a basis testing one literal while the corpus documents the same concept in other words. Rows now disclose near-misses by name and line, each produced by a command recorded in that row. - **Prose is unparsed by every gate.** Summary paragraphs, Implications bullets and Open questions carried stale counts and false statements across several rounds; two sweeps (one whitespace-normalized with an offset map back to physical lines) closed the class. - **A contested tag-ordering question is escalated, not decided** — whether selecting a positive tag requires first establishing harness applicability. It is written up as a candidate profile amendment with both readings, the evidence, and a recommendation, for the dispositions interview. Residual MINOR findings are disclosed in the slice's `interview-handoff.md` as Open questions, per the run's stopping rule. ## What this PR changes - Removes the system-prompts entry and the now-empty "Supplementary references" heading from the profile's Doc queue. - Bumps the `knowledge` plugin `0.10.13` → `0.10.14`. - Adds the matching CHANGELOG entry. No linked issue ## Related - Third and final of the serialized run-11 queue PRs, after #1872 (resources overview) and #1873 (verification-loops blog). All three touch the same profile file, so they merged one at a time. - Completes the queue drain begun in #1752 and continued through #1756, #1761, #1765, #1775, #1779, #1788, #1816, #1842 and #1868. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Summary
prompting-claude-fable-5entry from thedocpage-digestAnthropic profile's doc queue — its slice completed end-to-end (fetch through interview handoff) per the queue's remove-on-completion rule..work/platform-claude-com-docs-en-bui-ad459d21/verification/.0.10.1→0.10.2with matching CHANGELOG entry.Verification
markdownlint-cli2on both changed markdown files: 0 errorscheck-skill.sh docpage-digest(CHECK_SKILL_SKILLS_ROOT=plugins/knowledge/skills, baseorigin/main): PASS (1 pre-existing soft warning: SKILL.md 223 lines vs soft target 200)check-changelog-parity.sh --check-bump origin/main: PASS🤖 Generated with Claude Code