Repository navigation
docs(agents): refresh code standards from the vault notes - #40
Conversation
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Reconcile README's PR #1 link with the OSS-boundary rule
AGENTS.md's Code standards state an unqualified OSS boundary: 'no issue/PR numbers, incident dates, deployment names, or task-board IDs in any public artifact.' README.md — a public artifact — contains a PR number in its Status section. The restated rule and the repository's own public-facing doc contradict each other, which undermines the rule's enforceability. Failure scenario: A contributor who wants to add a tracking ID to a comment or public doc reads the OSS-boundary rule, sees README.md already referencing PR #1, and concludes the rule is advisory or only applies to code comments — an internal ticket, release date, or deployment name then ships in a public artifact. Suggested fixRemove the PR-number reference from README's Status section (e.g. 'is merged and now in validation') or add a qualifier to the OSS-boundary rule permitting references to the project's own public GitHub PRs.umm-actually · deepseek/deepseek-v4-flash-0731 |
|
umm-actually re-reviewed at 2 new finding(s) posted (21 tracked finding(s) across all runs). Context notes
umm-actually · deepseek/deepseek-v4-flash-0731 |
The distilled TypeScript rule recommended Bun.Glob and Bun.spawn for scripts/, but CI and the render:social-preview npm script run every script under Node, and Development Guidelines call scripts/ runtime-agnostic. The vault source limits Bun builtins to local scripts. Ship-Check: pr-review · claude-opus-5-5 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Name where substituted values, the Chrome pin and the skipDownload key come from; state one script runtime story (Bun locally, node in CI and the render script); complete the add-a-reference procedure with its lockstep step; and gloss the standards terms a cold reader stalled on. Ship-Check: code-quality · claude-opus-5-5 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Generated skills: only session-start and session-end defer to the session protocol; remember and project-role carry their own workflows. - SKILL.md tools: "every client has" Read/Write/Bash contradicted SKILL.md's own client table (claude.ai chat has no file access). - Install-time download: Bun runs puppeteer's postinstall (puppeteer is on Bun's default trusted-dependency list); the skipDownload key is what stops the download under every package manager. - Lockstep: name the real surfaces per kind (Asset templates list, asset-inventory check, Phase 0/7, per-client references) instead of the Reference files list for templates and clients. - Reference-file step 3: cover the "during <step>" form SKILL.md uses. - Template description: mention conditional blocks; validate.yml runs on pushes to main only. Ship-Check: bug-check · claude-opus-5-5 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…eader Ship-Check: triage · claude-fable-5-1 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Ship-Check: triage · claude-fable-5-1 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Ship-Check: triage · claude-fable-5-1 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Ship-Check: pr-monitor · claude-fable-5-1 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Reconcile CONTRIBUTING.md release workflows with this repo's actual CI
CONTRIBUTING.md instructs maintainers to cut a release via an Actions 'Manual Release' workflow and describes 'Manual Release' ( Failure scenario: A maintainer follows CONTRIBUTING.md's 'Cut a release from the GitHub UI' steps, navigates to Actions, finds no 'Manual Release' workflow, and cannot run the described bump/tag/zip/release steps; a contributor reading the CI table believes a Suggested fixRewrite the Releasing and 'How the CI works' sections to describe only the actual workflows in .github/workflows/ (validate.yml runs via AGENTS.md), and either delete the manual/auto-release steps or add the workflows they describe. At minimum, add a pragmatic release path (e.g. the validate.yml CI plus a documented tag-and-release process) that matches what exists.umm-actually · deepseek/deepseek-v4-flash-0731 |
…orkflow Ship-Check: pr-monitor · claude-fable-5-1 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
On the CONTRIBUTING.md release-workflow finding (umm-actually, Not changing CONTRIBUTING.md: the workflows it describes exist. 🔍 ship-check · pr-monitor · claude-fable-5-1 |
Ship-Check: pr-monitor · claude-fable-5-1 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Give troubleshooting entries numbered-steps form matching the new rule
The newly codified rule requires troubleshooting entries to end in numbered steps the reader can take, with a safe fallback, never in a diagnosis alone. setup-verification.md's Troubleshooting section, the repo's model for such entries, ends each entry in plain diagnostic bullets, contradicting the standard an agent is now told to follow. Failure scenario: An agent drafting a new troubleshooting entry mirrors setup-verification.md's bullet-list-with-diagnosis format instead of the numbered-steps-with-fallback the rule mandates, so newly added entries keep ending in a diagnosis and the rule stays unimplemented. Suggested fixRestructure each troubleshooting entry to end in numbered steps with a safe fallback, e.g. '### Agent doesn't know my name\n1. Verify the instruction file exists at the expected path.\n2. Check it is not empty or malformed.\n3. For paste surfaces, re-paste and check for truncation.\n4. If it still fails, ask the user to re-paste from the vault note.'umm-actually · deepseek/deepseek-v4-flash-0731 |
Ship-Check: pr-monitor · claude-fable-5-1 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
On the troubleshooting-entries finding (umm-actually, The entries do end in diagnostic bullets rather than numbered steps with a fallback, so the file does not match the rule as written. Not restructuring it here: it is shipped skill content outside this change, and this is the third existing file a round has found that predates a newly codified rule. 38b8ee9 states the class boundary once, at the top of the Code standards section: the rules are authoring guidance for the prose and code you write, and an existing file is brought into line when a change already edits that passage, never in a sweep of its own. The maintainer decides whether the Troubleshooting section gets its own change. 🔍 ship-check · pr-monitor · claude-fable-5-1 |
Ship-Check: pr-monitor · claude-fable-5-1 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Log the actual exec failure in commandAvailable's catch
The new Code standards in AGENTS.md state 'Every catch logs or re-throws; a swallowed error is worse than an uncaught one', and this script is the in-repo example that must model that rule. commandAvailable() silently swallows any execFileSync failure and returns false, so a failure that is NOT 'command not found' (e.g. 'which' itself missing on a native Windows shell, or a permission error) produces the same misleading 'optipng not found — install via…' warning as a genuinely absent binary. The catch needs to distinguish the expected not-found case from other errors, or log the underlying error message. Failure scenario: On a Windows host without the POSIX 'which' utility (CONTRIBUTING.md documents Windows support), execFileSync throws ENOENT rather than a non-zero status; commandAvailable returns false, and a user who has optipng installed is told to install it. Similarly, any transient filesystem/permission error on 'which' is reported as 'optipng not found' with no diagnostic. Suggested fixIn the catch block, capture the error and short-circuit based on it, e.g.:
```ts
const commandAvailable = (command: string): boolean => {
try {
execFileSync("which", [command], { stdio: "pipe" })
return true
} catch (error) {
if (error && typeof error === "object" && "status" in error) return false // not found
console.warn(`could not locate ${command}: ${String(error)}`)
return false
}
}
```
This makes 'not found' the silent fast path while surfacing unexpected failures per the new 'every catch logs or re-throws' rule.umm-actually · deepseek/deepseek-v4-flash-0731 |
|
On the Not changing this: 🔍 ship-check · pr-monitor · claude-fable-5-1 |
…ection Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…h a fallback Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
No semicolons, arrow constants for the two helpers, and the conditional scan iterates with entries() instead of an index loop. Output under Node 24 and Bun is byte-identical to the previous version. The AGENTS.md carve-out that named this file as predating the rules is removed. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
On the README Status finding (umm-actually, Fixed in 3886be9: the maintainer chose to drop the sentence that linked the initial pull request, so the Status section now reads "vault-onboarding is in active development and not yet released. The install command works, but treat it as pre-release until testing passes and a first GitHub release is cut." No other public file in the repo carries a pull-request number. 🔍 ship-check · pr-monitor · claude-fable-5-1 |
|
On the troubleshooting-entries finding (umm-actually, Fixed in 7550bfd: the maintainer chose to rewrite the section now. Each of the five Troubleshooting entries is numbered steps the reader can take and ends in a safe fallback (regenerate from the template, run the protocol by hand, tighten the scope callout, keep working with the plain task list, re-paste the missing sections). 🔍 ship-check · pr-monitor · claude-fable-5-1 |
toSorted() for the fresh-array sorts, stack.at(-1) for the last open block, the two `?? ""` sentinels replaced by handling the absent value at the use site, and the inline regexes lifted into doc-commented constants. Output under Node 24 and Bun is byte-identical to the previous version. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Open the Releasing procedure with the reader's motive
The new Writing rule requires procedure copy to open with the reader's motive, not the operation's name. CONTRIBUTING.md's Releasing section — the repo's model for a procedure — opens with 'Cut a release from the GitHub UI:', the operation, so the in-repo example contradicts the rule it was meant to illustrate. Failure scenario: An agent drafting a new procedure section mirrors CONTRIBUTING.md's Releasing section and opens with the operation's name instead of the reader's motive, propagating the exact pattern the new Writing rule was added to eliminate. Suggested fixOpen with the motive, e.g. 'To cut a release, run the Manual Release workflow from the Actions tab:', then keep the numbered steps.umm-actually · deepseek/deepseek-v4-flash-0731 |
|
State the conditions for generated skills in the README
The 'What it does' capability list states all four generated skills unconditionally, but SKILL.md generates session-start/session-end only when the protocol is enabled, remember only when memory is enabled, and project-role only for the full protocol — conditional capabilities the repo's new Code standards rule says must be stated conditionally. Failure scenario: A user who opts into only memory and task boards (no protocol) reads 'Generated skills — session-start, session-end, remember, and project-role skills' and expects all four after onboarding; the session skills are never generated without the protocol, so the delivered system does not match the README's capability list. Suggested fixReword the bullet to state the conditions, e.g. 'Generated skills — session-start and session-end when the protocol is enabled, remember when memory is enabled, and project-role when the full protocol is chosen, each tailored to your actual vault structure.'umm-actually · deepseek/deepseek-v4-flash-0731 |
|
Correct the sessions-folder gating claim in memory-system.md
The Three-Layer Model table claims project Failure scenario: A vault whose project was scaffolded in Phase 3 but whose protocol was declined in Phase 6 still contains the project's sessions/ folder; an agent that read memory-system.md believes sessions/ folders exist only with the protocol and misroutes or ignores the existing folder when handling session logs. Suggested fixSplit the gating: '`Sessions/` (vault root) — created only when the session protocol is enabled; project `sessions/` subfolders — scaffolded with each project in Phase 3.'umm-actually · deepseek/deepseek-v4-flash-0731 |
|
Add the missing 'during X' read lines to Phases 5 and 7
AGENTS.md's new 'Adding a reference file' step 3 requires a bold read line at the top of every phase that uses a reference file, naming the step when only one uses it. SKILL.md Phases 5 and 7 each use references/setup-verification.md in a single step (the plugin walkthrough and the per-client checks) without that bold line, even though the file's own reference list promises reads during those phases. Failure scenario: An agent following AGENTS.md step 3 to add a new reference file mirrors the existing phases: it adds bold read lines to the phases that have them but, copying Phase 5, omits the line for a phase that uses the file in only one step — reproducing the exact gap the rule was written to close. Suggested fixAdd '**Read `references/setup-verification.md` during the plugin walkthrough.**' at the top of Phase 5 and '**Read `references/setup-verification.md` during the per-client checks.**' at the top of Phase 7.umm-actually · deepseek/deepseek-v4-flash-0731 |
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
On the Releasing-procedure lead (umm-actually, Not changing these here: both are existing passages that predate the rule they now sit beside, and this change edits neither. The Code standards section states the boundary for that case at its top: the rules are authoring guidance for what you write, and an existing file is brought into line when a change already edits that passage, never in a sweep of its own. Each becomes a one-line edit in whichever change next touches CONTRIBUTING.md's Releasing section or SKILL.md's Phase 5 and Phase 7. 🔍 ship-check · pr-monitor · claude-fable-5-1 |
Refreshes the
## Code standardssection of AGENTS.md from the cross-project standards notes (last distilled 2026-08-24), keeping the section's hand-written rules. The review passes then corrected or clarified claims in five other sections (Project Overview, Repository Structure, Development Guidelines, Social preview card, Adding a reference file) and the header comment ofscripts/render-social-preview.ts.Code standards section
Valid values:/Default:lines for setting references, defensive copy only after the problem occurred, reviewed copy has a job, prerequisites follow the reader, and no implicit contrasts.scripts/): adds readonly inputs and no mutation-as-fold, no chained ternaries, named params, named constants, exhaustiveswitchover unions, platform built-ins before hand parsing, per-operation try/catch with every catch logging or re-throwing, and Node built-ins only, since Node runs every script.Other sections
puppeteer.skipDownloadmechanism; splits the design-family note into its own paragraph; opens the regenerate procedure with the reader's motive.scripts/render-social-preview.ts: the header comment now points at the Social preview card section instead of restating the install story.Review follow-ups, one commit each
references/setup-verification.md: each Troubleshooting entry is numbered steps ending in a safe fallback, matching the rule this change codifies.scripts/validate-structure.ts: restyled to the TypeScript rules (no semicolons, arrow constants,entries()instead of an index loop), then the remaining lint flags cleared (toSorted(),at(-1), absent values handled at the use site instead of?? "", inline regexes lifted into doc-commented constants). Output under Node 24 and Bun is byte-identical to the original.AGENTS.md size: 8,758 → 17,597 bytes (budget 30,720).
scripts/validate-structure.tspasses under Bun and Node 24.🤖 Generated with Claude Code