Skip to content

docs(agents): repo-conditional skip-changeset, vacuous-pass guard, publish-route preflight in the os-dev contract - #8969

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-8915-osdev-contract-fixes
Aug 16, 2026
Merged

docs(agents): repo-conditional skip-changeset, vacuous-pass guard, publish-route preflight in the os-dev contract#8969
os-zhuang merged 1 commit into
mainfrom
claude/issue-8915-osdev-contract-fixes

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Fixes#8915
Fixes#8727
Fixes#8891
Fixes#8716

One PR, one file: .claude/agents/os-dev.md — the four-card os-dev contract-fix bundle dispatched by the skills-lane seat. Provenance: maintainer batch acceptance of the seat's enumerated bundle proposal, 2026-08-16, verbatim: 「其他问题我接受你的建议。」 Language ruling, same day, verbatim: 「.claude/skills/** 用中文,给客户的 skills 不要改。」 — os-dev.md is in the internal surface per the accepted recommendation, so new/reworded clauses are written in Chinese; machine literals (labels, commands, script names) stay English. Scope notes: the vacuous-pass card lands only its os-dev half (candidates 1+2; candidate 3, the repo-side script-existence guard, goes to the devx lane as its own card at ACCEPT time), and the lock-etiquette card lands direction 3 only (directions 1–2 graded not taken by the seat).

⛔ ADR-class landing: human merge only — do not queue it, do not arm auto-merge. This PR edits the agent-contract instruction surface (human-review class per the standing skills guardrail).

Deliverables

  1. skip-changeset made repo-conditional (the anchor card): this repo applies the label and reads it back (the whole-set-PUT hazard and the first-run race are preserved verbatim in the rewrite); objectui declares tests/docs-only via an empty-frontmatter changeset, and the label must never be created there — a label add silently mints a repo label that the next agent reads as a real mechanism. Verified against objectui origin/main: zero skip-changeset hits anywhere in its workflows; its changeset-presence workflow states "An empty frontmatter counts".
  2. Vacuous-pass guard (new toolchain trap): a pnpm --filter run matching zero scripts exits 0. Measured in this tree at this head: pnpm --filter @objectstack/spec run type-check prints ERR_PNPM_RECURSIVE_RUN_NO_SCRIPT and exits 0, and the same run piped through tail also reads 0. The trap names objectui's hyphenated type-check spelling (verified: zero unhyphenated spellings in objectui package.json files) and prescribes verifying the script name echoed in output or reading the exit via PIPESTATUS, never through a piped tail. The section header's parenthetical was reworded — the old "false-red lap" wording no longer covered this false-green member.
  3. Publish-route preflight (ground rule 1): the first action after creating the branch is pushing it empty, before any edit — it doubles as the claim's branch marker and a minute-one write-route probe; a 403 there is a stop-and-report-blocked, never a retry loop (network errors keep the backoff retry). Self-applied on this very branch: the empty branch was pushed as this task's first action and the write route confirmed at minute one.
  4. Heavy-verify lock etiquette — premise finding, zero diff. The direction-3 etiquette (bounded flock -w windows sized to fit one foreground call, re-acquire in a loop, lock-free work between attempts, blocked-report past ~20 minutes naming the holder) is already codified in resource-discipline rules 1 and 7, and predates the member card: present at commit bea4443 (2026-08-13 23:54 UTC), before that card was filed on 2026-08-14. Merging therefore closes that card as already-satisfied; if the PM prefers to re-triage it instead, drop its line from the Fixes block before merge.

Ratchet accounting (ceiling 399, untouched; file 399 → 398)

Additions: ground rule 1 preflight +2 net; toolchain trap +4; skip-changeset conditionalization +1. Funded by compression with no semantic loss, English → Chinese per the language ruling: ground rule 2 (8 → 5), resource rule 6 (6 → 4), standard-clauses intro (6 → 4), stash clause (6 → 5), and the scratchpad clause folded inside ground rule 1. Net −1 line; headroom 1. No ceiling raise needed, so the raise authorization quote is not invoked.

Verification

Gate union run AFTER the final commit, at HEAD 82991ad0a (exit read via PIPESTATUS-safe direct $?, not through a pipe): check:pm-skill-ratchet ✓ (os-dev.md 398 lines, ceiling 399, headroom 1) · check:pm-skill-id-lint ✓ (9 files clean) · check:skill-frame-sync ✓ (4 copies isomorphic — the escalation-frame anchors were not touched) · check:skill-frame-freshness ✓ (current with origin/main) · check:agent-model-declared ✓ · check:nul-bytes ✓ (5935 files, no raw control bytes) · check:doc-authoring ✓ · check:doc-formula-expressions ✓ (22 + 9 examples clean). The gate set was re-derived with scripts/pm/dispatch-gates.mjs against the actual changed path; it added check:doc-authoring and check:doc-formula-expressions over the prompt's named families — both run, both green. The doc-formula gate needed the lint package's dependency closure built first (fresh-worktree trap; built, then green).


Generated by Claude Code

…pty-branch publish preflight in os-dev contract
Four-card bundle on the os-dev dev contract, funded by in-file compression
(399 -> 398 lines under the per-file ratchet ceiling of 399):
- skip-changeset step is now repo-conditional: this repo applies + reads back
the label; objectui declares tests/docs-only via an empty-frontmatter
changeset and the label must never be created there (a label add silently
mints a repo label that reads as a real mechanism to the next agent).
- New toolchain trap: a pnpm --filter run matching zero scripts exits 0
(objectui spells it type-check, hyphenated); verify the script name echoed
or read the exit via PIPESTATUS, never through a piped tail.
- Publish-route preflight in ground rule 1: first action after creating the
branch is pushing it empty — claim branch marker + minute-one write-route
probe; 403 is a stop-and-report, not a retry loop.
- Heavy-verify lock etiquette (bounded flock -w windows, lock-free work
between attempts) verified ALREADY codified in resource rules 1+7 since
before the member card was filed — zero diff for that member.
New/reworded clauses in Chinese per the 2026-08-16 language ruling; machine
literals stay English. Funding compressions: ground rule 2, resource rule 6,
standard-clauses intro, stash clause, toolchain-traps header parenthetical.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017TNzEetykdh7ceZGwuAPLq
@vercel

vercelBot commented Aug 16, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
ProjectDeploymentActionsUpdated (UTC)
objectstackIgnoredIgnoredAug 16, 2026 3:20am

Request Review

@os-zhuangos-zhuang left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

同意

@os-zhuang
os-zhuang marked this pull request as ready for review August 16, 2026 04:03
@os-zhuang
os-zhuang added this pull request to the merge queueAug 16, 2026
Merged via the queue into main with commit fdf0fbbAug 16, 2026
29 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-8915-osdev-contract-fixes branch August 16, 2026 04:22
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment