Skip to content

[Ruling A on #22649] docs: the skills install command reads the catalog from the installed @objectstack/skills package; the GitHub path is documented as the next (unreleased main) channel only #22668

Closed

Description

@objectstack-fleet

Blocked-by: #22658

Filing gate ③: a task the maintainer directed by ruling — #22649 letter A, maintainer 「22649 同意 A」, record 6096124407 (skills seat 1, session_01RdnZdPZH9ByduzPRWuH9tN, this seat's session chat, 2026-10-10). Ruling-ref: 6096124407. The devx-lane third of that ruling's execution; filed by the skills seat under the maintainer's direct-dispatch channel; triage may re-grade on first touch. ⛔ Not a claim.

Reader: the domain:devx seat, after #22658 is published and installable. Surface: the five docs pages that give the install command today — content/docs/ai/skills-reference.mdx (:28), content/docs/ai/skills.mdx (:36), content/docs/getting-started/build-with-claude-code.mdx (:60, :425), content/docs/getting-started/your-first-project.mdx (:47, :350) — and skills/README.md's install paragraph (governed Tier H: that hunk needs the maintainer's approval; split it into its own PR so the docs pages land through the queue). ⛔ No change to any SKILL.md.

Done when

Workload (per the ruling): S; precedent PR #22556 (+860/−1696, the per-major docs page).

Dedupe: REST listing labels=domain:skills&state=all&since=2026-08-01 (12 pages, 1,150 cards) grepped for version|compat|bind|npx skills|skills add|catalog|release → 0 cards on the catalog binding before #22649; this card is one third of #22649's execution; open titles grepped for @objectstack/skills → 0. Dedupe words: skills package versioned catalog · @objectstack/skills · skills install from node_modules · compatibility line derived.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 11, 2026

    @objectstack-fleet
    ContributorAuthor

    Seat: pm:blocked → pm:on-hold. #22658 is closed, but the package this card documents is not installable yet

    PM seat domain:devx#1 (seat post #6023) · session_01VQftDB6niKg91LeQANrS7d · 2026-10-11T02:26Z. ⛔ Not a claim.

    Restart-when: npm view @objectstack/skills version answers a version (the package is published and installable from npm)

  2. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Unlock scan: pm:on-hold → pm:queue, grade unchanged. @objectstack/skills is installable

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-13T08:50Z. ⛔ Not a claim, ⛔ not a dispatch.

  3. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 9 · domain:devx seat 1 · 2026-10-13T09:00Z · ruled: #22649 letter A (record 6096124407); unlocked by triage 6141887414 (@objectstack/skills answers 18.0.0-next.0)
    Session: session_012zwsLMxQBwHUYJgPyrpEvx
    Account: zhuangjianguo (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-22668-skills-install-from-package
    Worktree: objectstack-issue-22668
    Domain: domain:devx
    Seat: domain:devx#1
    File surface: content/docs/ai/skills-reference.mdx, content/docs/ai/skills.mdx, content/docs/getting-started/build-with-claude-code.mdx, content/docs/getting-started/your-first-project.mdx (one docs PR, ordinary queue). skills/README.md's install paragraph only as a separate Tier H PR (draft, the maintainer approves). ⛔ No SKILL.md
    Container & model: M, mode:subagent, model: opus (the default judgment tier)
    Clause-②: no (docs)
    Responsibility: the docs tell a released project to install skills from the GitHub path, which serves unreleased main | no platform path covers it: @objectstack/skills first shipped in 18.0.0-next.0 today | an author on a released version gets a catalog for a different spec
    Thread-read: 6141887414
    Serial constraints cleared: no open PR touches the four pages or skills/README.md (all open PRs' file lists read at this act). The earlier cross-lane hold on your-first-project.mdx (PR #22960) merged at 2026-10-12T07:24Z.

  4. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 22668,
      "status": "rework",
      "branch": "claude/issue-22668-skills-install-from-package",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/23220",
      "session": "session_012zwsLMxQBwHUYJgPyrpEvx",
      "premise_still_valid": true,
      "summary": "The docs half is complete; the skills/README.md half is not delivered. PR #23220 (draft, head 7a3bc7f47, Part of #22668, labels documentation + size/s + skip-changeset, assignee zhuangjianguo) rewrites the install text on the four pages (skills-reference.mdx, skills.mdx, build-with-claude-code.mdx, your-first-project.mdx: six sites; the card says 'five docs pages' and lists these four files). The two skills pages give two steps: npm install --save-dev \"@objectstack/skills@$(node -p \"require('@objectstack/spec/package.json').version\")\", then npx skills experimental_sync --agent claude-code -y. The two getting-started pages give the sync command and link to the reference for step 1. Each page states that the catalog's version is then the installed spec's, and gives the update story: bump @objectstack/skills with the other @objectstack/* packages, then re-run the sync. skills-reference.mdx names the GitHub path once, as the next channel (the unreleased main, for trying the next version's skills, not for a released project); after the PR, git grep 'skills add objectstack-ai' over content/docs outside releases/ gives 1 hit. Measured on the claim's day (PM assumptions 1-3 hold; the details are in the PR body). (1) The cli card #22659 has not settled a scaffolder command, so the command is experimental_sync. It works on the published layout: 10 skills, with .agents/skills/SKILL linked into node_modules/@objectstack/skills/dist/skills/SKILL and .claude/skills/SKILL linked to that; --copy writes 64 real files under .claude/skills/ only. (2) The binding is the changeset fixed group: one group of 71 members holds both @objectstack/skills and @objectstack/spec, and every public @objectstack/* package is in it. (3) No 17.x @objectstack/skills exists, so step 1 answers ETARGET on a 17.7.0 project. A bare npm install --save-dev @objectstack/skills on that project installs 18.0.0-next.0, so the pages keep the version in the command. One fact the card did not carry: the published scaffolders 17.7.0 and 18.0.0-next.0 still run skills add from GitHub, and experimental_sync SKIPS every skill skills add installed. The scaffolder's exact sequence gives 10/10 'Skipped ... installed with skills add from objectstack-ai/objectstack'. So the reference page tells scaffolded projects to run npx skills remove --all (or remove by name, since a glob is refused) before the two steps; measured. Why the README half is missing: dispatch-gates --tier over skills/README.md prints 'Model tier — MANDATORY: claude-fable-5-1' (clause ①, 「必须 fable的还包括对外发布的skills」), with no exemption for skills/**. This run is opus, and the claim records no exit. So the Tier H README PR was not authored, a conflict between the dispatch and the tier mandate, reported rather than chosen silently. Hand-off for that PR: the drafted hunk is saved at scratchpad issue-22668/readme-proposed.patch (+12/-13; the generated index block is untouched); the empty branch claude/issue-22668-skills-readme-install, at main 150da61aa, is on the remote. That PR also owes a patch changeset for @objectstack/skills, because skills/README.md ships in the tarball as dist/skills/README.md, and it carries the card's closing keyword. Its branch is not on the claim's Branch: line, so the closing-target claim guard needs a claim extension from the PM, as #22658 did.",
      "tests": "All at head 7a3bc7f47 (worktree objectstack-issue-22668, base 150da61aa), each exit code captured before any pipe. node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 42 commands for the 4 paths, and all 42 exit 0. --ran with the exit codes recorded reads: '42 derived, 42 run, 0 NOT-MEASURED, 0 UNRUN (a DERIVED zero — all 42 recorded an exit code and none of them is 3)'. The card's named gates are among them: pnpm check:corpus-claim-drift 0; pnpm check:doc-authoring 0; pnpm --filter @objectstack/spec run check:skill-docs 0; node scripts/check-doc-route-spelling.mjs --advisory 0 and --self-test 0, plus enforce mode 0 ('population clean'). Four gates first exited 3 (PREREQUISITE NOT MET, read as NOT MEASURED, not as red): check:doc-formula-expressions, check:doc-security-posture, check:skill-examples, check:docs-transcript-drift. After builds of @objectstack/spec, of @objectstack/formula + @objectstack/lint, and of @objectstack/client + @objectstack/client-react under os-verify-lock (VERDICT command-exit 0 each), all four re-ran to exit 0 ('263 prose examples type-check across 3 surface(s)'; '4 declared transcript value(s) across 414 page(s) ... equal what the registry derives today'). Docs link check, as check-links.yml runs it (lychee 0.24.2 --offline --root-dir content --fallback-extensions mdx,md --config lychee.toml over content/**/*.md, content/**/*.mdx, README.md, ARCHITECTURE.md): exit 0, '2453 Total ... 0 Errors'. MDX compile of the 4 pages with the workspace's @mdx-js/mdx 3.1.1: 4/4 ok; a negative control (a bare less-than tag fragment) fails to compile. pnpm lint, narrowed: eslint --no-inline-config --format json on the 4 files gives 4 results, 0 errors, each 'File ignored because no matching configuration was supplied'. That reading comes from eslint's own config, so these files are outside its population and no untouched file's verdict can move. No package touched: no step ① build owed, no package test or typecheck; skip-changeset applies. No reverse verification or ablation applies to a docs-only diff. Install measurements, in throwaway projects under the scratchpad against the registry and skills CLI 1.7.2: listed in the PR body's 'Measured' section. The bump re-sync was a simulation (node_modules edited in place), labelled as such; a real second version does not exist yet.",
      "mcp_calls": "0 — no MCP GitHub tool was called",
      "api_writes": "3 relay dispatches (POST /repos/objectstack-ai/objectstack/dispatches, each executed as objectstack-fleet[bot]): (1) pr_create, i.e. POST /repos/objectstack-ai/objectstack/pulls (draft) + POST /repos/objectstack-ai/objectstack/issues/23220/assignees, run 38377591021, body read back identical at 9967 bytes; (2) label-write labels_add, i.e. POST /repos/objectstack-ai/objectstack/issues/23220/labels (skip-changeset), run 38377691270, read back MATCHES; (3) this os-dev-report comment, POST /repos/objectstack-ai/objectstack/issues/22668/comments. No PATCH of the PR body. Not REST: git push ×4 — the probe and content pushes of claude/issue-22668-skills-install-from-package, the empty probe push of claude/issue-22668-skills-readme-install, and one refused git push --delete of that branch (HTTP 403 from the proxy, not retried).",
      "deviations": [
        "Dispatch vs tier mandate: the dispatch put the skills/README.md Tier H PR in this opus run's surface; dispatch-gates --tier makes skills/** fable-mandatory with no exemption, so the README PR was not authored. The status is rework for that reason alone.",
        "An extra branch, claude/issue-22668-skills-readme-install, was pushed empty (at 150da61aa) as the README PR's probe before the tier reading. Deleting it from the remote got a 403 from the proxy and was not retried. The PM can reuse it for the at-tier dispatch, or delete it.",
        "The commit trailer pair is the model-free form AGENTS.md requires, not the harness reminder's model-bearing Co-Authored-By line; the PR footer is AGENTS.md's session-URL form."
      ],
      "open_questions": [
        {
          "question": "Who authors the skills/README.md half (the card's closing PR)? Its single path is under skills/**, which dispatch-gates --tier makes MANDATORY claude-fable-5-1, and this run was opus.",
          "options": [
            "A: re-dispatch it at the mandated tier on the existing empty branch claude/issue-22668-skills-readme-install, with a claim extension naming that branch (the closing-target guard reads the Branch: line), the drafted hunk scratchpad issue-22668/readme-proposed.patch as a starting point, and a patch changeset for @objectstack/skills (the README ships as dist/skills/README.md). Work: S.",
            "B: record the measured quota exemption in the claim, if and only if the fable tier is exhausted, and let an opus run land it. Work: S."
          ],
          "recommendation": "A, because the tier mandate is a maintainer ruling on exactly this surface, and the drafted hunk keeps the at-tier run short."
        },
        {
          "question": "What should the docs tell a 17.x project, given that npm latest for @objectstack/spec is 17.7.0 today, about a catalog bound to its version? Measured: no 17.x @objectstack/skills exists (ETARGET). The skills CLI cannot take this repository's tag names: tree/@objectstack/[email protected]/skills clones branch '@objectstack', and the URL-encoded form is not found either. A sparse clone of the tag's skills/ followed by npx skills add ./PATH --skill '*' --agent claude-code -y works (64 files into .claude/skills/).",
          "options": [
            "A: the docs as in PR #23220 state that no 17.x catalog exists, and nothing more. Business: real 17.x users keep their scaffold-time main skills until they move to 18. Long term: zero new surface, and the gap closes at 18.0 GA. AI error: advertises nothing undelivered, but leaves the 17.x mismatch. Startup: zero cost. Work: 0.",
            "B: document the tag sparse-clone plus local skills add path. Business: serves 17.x now. Long term: a second GitHub channel, which ruling A (GitHub path only as next) excludes and which is B-shaped (not taken on #22649). AI error: a manual three-command path with a hand-pinned tag, wrong silently when mistyped. Startup: a docs surface per release line. Work: S.",
            "C: the maintainer publishes a one-time @objectstack/[email protected] built from the 17.7.0 tag's skills/ (a release act, Prime Directive #15), and the docs' 'published from 18.0.0-next.0 on' line widens. Business: a version-bound catalog for today's latest. Long term: ruling A's own mechanism applied backwards once, with no branch process. AI error: structural, because the documented command then works on 17.x as written. Startup: one release act from a tag the package's build never targeted. Work: M, by the maintainer."
          ],
          "recommendation": "A, because it adds nothing the ruling excluded and the gap closes at 18.0 GA. Name C to the maintainer if 17.x will stay npm latest for long: C is the only option that makes the documented command correct on 17.x. B is out (a second GitHub channel the ruling excludes)."
        }
      ],
      "out_of_scope_findings": [
        "class: a · reach: public door — the README of the published @objectstack/[email protected] (npm page; read verbatim from node_modules/@objectstack/skills/README.md) teaches a bare 'npm install --save-dev @objectstack/skills' then 'npx skills experimental_sync'. Measured: on a project depending on @objectstack/[email protected], that bare install exits 0 and installs 18.0.0-next.0 (saves ^18.0.0-next.0), the next major's catalog. Its example 'A project that depends on @objectstack/[email protected]' names a version that was never published (ETARGET). It omits that experimental_sync skips skills a skills add installed, which covers every project scaffolded through 18.0.0-next.0. · evidence: the probe-17 and probe-gh projects in the scratchpad; surface packages/skills/README.md (not governed, outside this claim; ships in the tarball, so a patch changeset for @objectstack/skills) · placement: the same defect class and ruling as this card, so a sub-issue of #22668, or the README follow-up dispatch above · dedupe words: skills package README bare install · @objectstack/skills latest tag mismatch · skills README version pin · experimental_sync skipped skills add",
        "carrier: #22659 (cli card, pm:queue) · two follow-ups noted, not filed. (1) The scaffolder templates packages/create-objectstack/src/templates/AGENTS.md:86 and templates/blank/README.md:167 still write the GitHub npx skills add command into every new project; #22659's Done-when removes it from the scaffolder's output. (2) When #22659 lands, the 'Through 18.0.0-next.0 ...' sentences this PR adds (skills-reference.mdx:39, build-with-claude-code.mdx step-1 bullet, your-first-project.mdx step 3) need that scaffolder's wording; as written they stay true for every scaffolder up to and including 18.0.0-next.0."
      ]
    }

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Review: ACCEPT · PR #23220 (draft, head 7a3bc7f47, Part of #22668) · domain:devx seat 1 · session_012zwsLMxQBwHUYJgPyrpEvx · 2026-10-13T09:43Z

    Checked on GitHub, not on the report's say-so.

    Shape: four docs pages, +49 / −38. Not governed (check-governed-merges --pr 23220). Labels documentation, size/s, skip-changeset; assignee zhuangjianguo. No SKILL.md. Part of #22668 is right, because the skills/README.md half is still open (below).

    Read against the card's Done-when, sentence by sentence on skills-reference.mdx and the three pages it anchors:

    • The command is the package's. Step 1 is npm install --save-dev "@objectstack/skills@$(node -p "require('@objectstack/spec/package.json').version")". Step 2 is npx skills experimental_sync --agent claude-code -y. This was measured on the published 18.0.0-next.0 (10 skills linked from node_modules/@objectstack/skills/dist/skills/).
    • The catalog's version is the installed spec's. It is stated once and anchored in the measured fixed group, where @objectstack/skills and @objectstack/spec are in the same 71-member group. The page warns that a bare install follows latest. That is true today: @objectstack/skills latest is 18.0.0-next.0, read by this seat at 08:56Z.
    • The next channel is named once: "npx skills add objectstack-ai/objectstack/skills … reads the catalog straight from the repository's unreleased main — for trying the next version's skills, not for a released project". There is 1 hit outside releases/.
    • Updating: bump @objectstack/skills with the other @objectstack/* packages, then re-run the sync.
    • The page states what exists: "published from 18.0.0-next.0 on; there is no 17.x release of it … step 1 refuses with ETARGET" (measured).
    • Scaffolded projects (through 18.0.0-next.0) get skills add copies, which experimental_sync skips. The page says so and gives npx skills remove --all or remove-by-name first (measured: 10/10 "Skipped …" without it).

    Gates (report): 42 derived, 42 run, 0 NOT-MEASURED. The card's named gates are all 0: check:corpus-claim-drift, check:doc-authoring, check:skill-docs and check-doc-route-spelling. The lychee link check reports 0 errors over 2,453 links. MDX compiles 4/4.

    CI on 7a3bc7f47: 31 green, 10 skipped, 2 running, none red. The seat arms auto-merge, which waits on the required checks.

    Still open on #22668, routed by this seat:

    • skills/README.md's install paragraph is the card's closing PR. dispatch-gates --tier makes skills/** MANDATORY CONTRACT_REVIEW_TIER, and this run was not at that tier. The dev correctly stopped and did not author it, and this seat's dispatch had not run the tier gate on that path. It is re-dispatched at the mandated tier on the existing branch claude/issue-22668-skills-readme-install, through the claim extension below.
    • Out-of-scope finding (same defect class): the published @objectstack/skills npm README (packages/skills/README.md) teaches a bare npm install --save-dev @objectstack/skills. On a 17.7.0 project that installs 18.0.0-next.0. It also names a never-published @objectstack/[email protected] example and omits the skills add skip. It rides the same at-tier PR, with a patch changeset for @objectstack/skills, since both READMEs ship in the tarball.
    • For the maintainer (not blocking): what the docs owe a 17.x project. This PR implements the dev's A: it states that no 17.x catalog exists, and the gap closes at 18.0 GA. Option C would be a one-time @objectstack/[email protected] publish from the tag, which only the maintainer can do (PD15). That is the only option that makes the documented command work on 17.x, and it is worth naming if 17.x stays latest for long.
  6. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 9 (extension) · domain:devx seat 1 · 2026-10-13T09:44Z · the closing half of #22668 at the mandated tier
    Session: session_012zwsLMxQBwHUYJgPyrpEvx
    Account: zhuangjianguo (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-22668-skills-readme-install
    Worktree: objectstack-issue-22668-readme
    Domain: domain:devx
    Seat: domain:devx#1
    File surface: skills/README.md's install paragraph (governed skills/**, so Tier H: a draft until the maintainer approves; the generated index block stays untouched), packages/skills/README.md (the published npm README: the same defect class, recorded in 6142785498), and one patch changeset for @objectstack/skills. ⛔ No SKILL.md
    Container & model: M, mode:subagent, model: fable. dispatch-gates --tier on skills/README.md + packages/skills/README.md reads "Model tier — MANDATORY: claude-fable-5-1". The first claim's opus run (6142059920) correctly stopped short of this path
    Clause-②: no (docs and README text)
    Responsibility: as in 6142059920. The README a released project and the npm page read still teaches the GitHub path, or a bare install that resolves to the next major | the docs half (PR #23220) does not reach these two files | an author following the npm page installs a catalog for a different spec
    Thread-read: 6142785498
    Serial constraints cleared: no open PR touches skills/README.md or packages/skills/README.md (all open PRs' file lists read at this act). The branch exists empty at 150da61aa5, pushed by the first run as its probe.

  7. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed (docs half): PR #23220 → 01a3421f42 (Part of #22668) · domain:devx seat 1 · session_012zwsLMxQBwHUYJgPyrpEvx · 2026-10-13T10:14Z

  8. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 22668,
      "status": "done",
      "branch": "claude/issue-22668-skills-readme-install",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/23232",
      "session": "session_012zwsLMxQBwHUYJgPyrpEvx",
      "premise_still_valid": true,
      "summary": "The closing half of #22668 at the mandated tier (fable; dispatch-gates --tier on the two paths reads MANDATORY claude-fable-5-1). Draft PR #23232 (head 3f11f00524 on the claim's branch, base 920bc12a24 = origin/main at claim time, Fixes #22668, Clause-②: no, assignee zhuangjianguo, Tier H so it stays a draft with no auto-merge) rewrites the two READMEs the @objectstack/skills package ships and adds a patch changeset (.changeset/22668-skills-readme-install.md). skills/README.md's install paragraph (lines 5-23; the generated index block and everything below are byte-identical to main) now gives the package install at the installed spec's version — npm install --save-dev \"@objectstack/skills@$(node -p \"require('@objectstack/spec/package.json').version\")\" then npx skills experimental_sync --agent claude-code -y — the update story (bump @objectstack/skills with the other @objectstack/* packages, re-run the sync), the versions line (published from 18.0.0-next.0 on, no 17.x), a link to the reference's #installing-skills section for --copy and scaffolded projects, and the GitHub path once as the next channel; the --all paragraph and the subpath sentence are gone. packages/skills/README.md (the npm page) drops the bare install and the never-published @objectstack/[email protected] example, carries the same two numbered commands, the 'keep the version in step 1: a bare install takes the registry's latest' sentence, Updating, Which versions exist (ETARGET on 17.x), the scaffolded-project remedy (the sync skips skills a skills add installed; npx skills remove --all or by name first), and the same next-channel sentence. The wording is the same as PR #23220's four docs pages, which merged during this run (squash 01a3421f42, 10:13Z; the four pages on origin/main are byte-identical to the head 7a3bc7f47 I aligned against). PM assumptions 1-4 all held on measurement: the drafted hunk was the starting point and the versions/next-channel text was aligned to #23220's words; the npm page's three defects are real on the public door today (the published 18.0.0-next.0 tarball's README.md is byte-identical to the pre-change packages/skills/README.md); Fixes #22668 is right — h46ClaimNamesBranch, the predicate check:closing-target-claim imports, answers true for this branch against the claim extension 6142814394 and false for #23220's branch (called offline with the comment body as a string; my first call with comment objects answered false, a calling-shape error on my side, not the claim's); the gates derived as described below. The branch was NOT re-merged onto the main that moved 8 commits while the battery ran (01a3421f42): the diff is disjoint from everything that landed, the queue rebuilds on current main, and the PR body says so. CI on 3f11f00524 is in_progress at report time; not waited for. Labels: the dispatch named none and skip-changeset does not apply (a changeset is present), so zero label writes; the PR read back carries documentation, size/s and tooling, written by the path labeler (another actor), and auto_merge null. PR body read back after the create: 16421 bytes sent, 16421 stored, identical, footer intact, no HTML comment and no tag-shaped fragment in it (the builder asserts both).",
      "tests": "All at head 3f11f00524, worktree objectstack-issue-22668-readme; every exit captured before any pipe (cmd > log 2>&1; EXIT=$?), logs under scratchpad issue-22668/r2-gates/. node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (no paths; change set 3 paths from merge base 920bc12a2) derived 66 commands; pass 1 ran all 66 plus 2 I added for packages/skills/README.md's population (pnpm check:published-readme-links, pnpm check:published-readme-exports): 64 exit 0, 4 exit 3 PREREQUISITE NOT MET (check:doc-formula-expressions, check:dual-build-cjs-loads, check:lean-entry-closure, check:published-readme-exports). Under the verify lock (OS_VERIFY_LOCK_SLOT=issue-22668-readme): pnpm --filter @objectstack/skills build, 'VERDICT command-exit 0 · held the lock 1s' — 'sync-catalog self-test: 9 cases pass', '65 file(s) across 10 skill(s) copied from skills/** into dist/skills and read back byte-identical', and cmp skills/README.md packages/skills/dist/skills/README.md clean; then pnpm turbo run build --filter='@objectstack/lint...' --filter='@objectstack/formula...' --filter='@objectstack/objectql...' --concurrency=2, 'Tasks: 14 successful, 14 total … Time: 4m20.799s', 'VERDICT command-exit 0 · held the lock 262s'. Pass 2 after it: check:doc-formula-expressions exit 0 ('22 record-scoped formula example(s) across 474 files / 1391 TS blocks judged clean by @objectstack/formula'; '9 @example(s) judged clean across 2026 packages/spec/src files'), check:lean-entry-closure exit 0 ('2 published condition(s) measured from a real load'). --ran reconciliation over the 68 recorded codes: '66 derived famil(ies) accounted for — 65 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3)', 0 UNRUN; the one is pnpm check:dual-build-cjs-loads. NOT MEASURED locally, both it and check:published-readme-exports (outside the derivation): each reads every package's built output ('some package has no dist/' / the built type entries), the prerequisite is the full build — turbo --dry=json on this tree: 81 of 82 build tasks cache MISS — on a shared box, and this diff moves no source, exports or type entry (two markdown files and a changeset); Lint & Repo Gates runs both on the PR — a declared narrowing. Named gates all exit 0: pnpm --filter @objectstack/spec run check:skill-docs ('✓ skills/README.md', '✓ content/docs/ai/skills-reference.mdx', 'Skill docs in sync'), check:skill-compatibility, check:skill-frame-sync, check:skill-identifier-liveness, check:corpus-claim-drift, check:doc-authoring, check-doc-route-spelling --advisory and --self-test, check:nul-bytes, check:pm-governed-merges, check:empty-changeset --base origin/main, check:changeset-no-major, check:adr-0087-registration, check:changeset-gate-self-tests, check:pm-changeset-deadline-census, check:published-files; check:published-readme-links exit 0 ('226 outbound link(s) across 103 published markdown file(s): 0 root-relative, 0 non-canonical origin(s), 28 docs-site page(s) resolved (0 via redirect), 2 anchor(s) verified' — the #installing-skills anchor is one; it exists on main at line 15 of skills-reference.mdx). Control-character self-scan (grep -naP over the C0 range, DEL) on the three files: no hits (exit 1). pnpm lint narrowed and proven: eslint --no-inline-config --format json over the three files gives 3 results, 0 errors, each 'File ignored because no matching configuration was supplied' (eslint's own config, so population 0), and eslint.config.mjs enables no type-aware linting (no parserOptions.project; its line 328), so no untouched file's verdict can move. Step ①: @objectstack/skills has no workspace dependencies, closure empty. Step ②: the package declares no test or typecheck script (build and prepublishOnly only), none to run — a zero-match --filter run would exit 0 having run nothing, so it is not cited. No reverse verification or ablation applies to a docs-only diff. Readings for skills/**: skills/README.md 126 → 128 lines, 8,078 → 8,322 bytes (+2 / +244, all in the install paragraph: 10 lines about the GitHub add path removed, 12 added; outside check:skills-token-ratchet's population per its header and outside check:pm-skill-ratchet's map); bundle SKILL.md sum 4,409 → 4,409 lines over 10 files; packages/skills/README.md (not under skills/**) 55 → 74 lines, 2,786 → 4,024 bytes. Measured today (2026-10-13), throwaway projects under scratchpad issue-22668/r2-probes/, npm 10.9.4, node 22.22.0, skills CLI 1.7.2: npm view @objectstack/skills dist-tags → latest and next both 18.0.0-next.0, versions 0.0.0-stage and 18.0.0-next.0; @objectstack/spec latest 17.7.0, next 18.0.0-next.0. (a) on [email protected] the bare npm install --save-dev @objectstack/skills exits 0 and installs 18.0.0-next.0 (saves ^18.0.0-next.0); (b) the pinned step 1 there exits 1, 'npm error code ETARGET … No matching version found for @objectstack/[email protected]'; (c) on spec@next step 1 exits 0, saves ^18.0.0-next.0, the sync exits 0 and links 10 skills (.agents/skills/NAME → ../../node_modules/@objectstack/skills/dist/skills/NAME, .claude/skills/NAME → ../../.agents/skills/NAME; skills-lock.json sourceType node_modules, version 18.0.0-next.0); (d) skills add from GitHub exits 0, the sync after it prints 'Skipped NAME from @objectstack/skills: installed with skills add from objectstack-ai/objectstack' 10 times, npx skills remove --all exits 0 and the next sync installs all 10 from the package. The published tarball's README.md is byte-identical to packages/skills/README.md at 920bc12a24 and its dist/skills/README.md to skills/README.md there. The derivation's STALE TREE note (origin/main 8 commits ahead at 01a3421f42; lint.yml/ci.yml add check:authorable-surface and check:docs steps, packages/spec families; scripts/ci/lane-verdict.mjs replaces report-unmeasured-gate-tail.mjs) names none of these three paths.",
      "mcp_calls": "0 — no MCP GitHub tool was called",
      "api_writes": "2 relay dispatches (POST /repos/objectstack-ai/objectstack/dispatches, each executed as objectstack-fleet[bot]): (1) pr_create, i.e. POST /repos/objectstack-ai/objectstack/pulls (draft) + POST /repos/objectstack-ai/objectstack/issues/23232/assignees, run 38382438029, body read back identical at 16421 bytes; (2) this os-dev-report comment, POST /repos/objectstack-ai/objectstack/issues/22668/comments. No label write (none named by the dispatch; skip-changeset does not apply), no PATCH of the PR body, no PR state change. Not REST: git push ×1 of claude/issue-22668-skills-readme-install (150da61aa5 → 3f11f00524). Reads: single-card REST reads of comments 6142785498 and 6142814394, of PR 23220 and of PR 23232 (gh api), and npm view.",
      "deviations": [
        "Two gates NOT MEASURED locally and declared, not run to green: check:dual-build-cjs-loads (derived) and check:published-readme-exports (added by me); both need the full build (81 of 82 tasks uncached on this tree), which this docs-only diff cannot affect. CI's Lint & Repo Gates covers them on the PR.",
        "The branch was not re-merged onto origin/main after it moved 8 commits during the battery (to 01a3421f42, including #23220's landing); the diff is disjoint from what landed, and re-merging would have moved the head the gates were measured at.",
        "The commit trailer pair is the model-free form AGENTS.md requires (Claude-Session + Co-authored-by: Claude), not the harness reminder's model-bearing Co-Authored-By line; the PR footer is AGENTS.md's session-URL form.",
        "The scratchpad issue-22668/ directory is shared with the first run's files; this run's files carry an r2- prefix (r2-probes/, r2-gates/, r2-pr-body.md, r2-report.json) and overwrote none of the first run's."
      ],
      "open_questions": [
        {
          "question": "None new. The 17.x question stands as routed to the maintainer in 6142785498: both READMEs now state, like the docs, that no 17.x @objectstack/skills exists (step 1 answers ETARGET on a 17.x project), and nothing more.",
          "options": [
            "A: leave it so; the gap closes at 18.0 GA (what the READMEs and docs say today). Work: 0.",
            "C: the maintainer publishes a one-time @objectstack/[email protected] from the 17.7.0 tag's skills/ (a release act, Prime Directive #15); the 'published from 18.0.0-next.0 on' line then widens in the two READMEs and the two docs pages. Work: M, the maintainer's."
          ],
          "recommendation": "A, as in the first report: it adds nothing ruling A excluded; name C to the maintainer only if 17.x stays npm latest for long."
        }
      ],
      "out_of_scope_findings": [
        "carrier: #22659 (the create-objectstack card, open) · noted, not filed. When the scaffolder stops running skills add from GitHub, the 'Projects scaffolded by create-objectstack … Through 18.0.0-next.0' paragraph in packages/skills/README.md and skills/README.md's reference link text go stale together with the two #23220 sentences the first report named; that PR owes the rewording. True as written for every scaffolder version up to and including 18.0.0-next.0 (measured today: the published 18.0.0-next.0 scaffolder's sequence is skills add then a sync that skips all 10)."
      ]
    }

    Generated by Claude Code

  9. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Review: ACCEPT (Tier H terminal) · PR #23232 (draft, head 3f11f00524, Fixes #22668) · domain:devx seat 1 · session_012zwsLMxQBwHUYJgPyrpEvx · 2026-10-13T10:34Z

  10. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed: PR #23232 → 197fbe2c04 (Fixes #22668) · domain:devx seat 1 · session_012zwsLMxQBwHUYJgPyrpEvx · 2026-10-13T10:58Z

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions