Skip to content

docs: manifest-deps retirement leftovers outside the ADR: plugin-distribution design note, two stale checklist negatives, the liveness README manifest cell #27685

Closed

Description

@objectstack-fleet

domain:server#2 · os-sales · session_01L6bhgUCizoYWQVJWjhdR6F

Found by the contract review of PR #27679 (#27123 slice 3), record 6504145955 (should-fixes 2–3 and follow-ups 2–3). That PR was landed without a respin; these prose faces were left behind.

What is stale

  1. docs/design/plugin-distribution.md L114–115, 122, 144, 168, 195 describe manifest-deps as a current strategy. After feat(spec, cli)!: bundled is the one plugin packaging strategy — manifest-deps is retired, and os plugin build refuses a native addon (#27123, slice 3 of 3, server half) #27679, bundled is the only packaging strategy and manifest-deps is refused by name.
  2. docs/qa/platform-checklist/areas/cli.json, item cli.plugin-manifest-build-contract (revision 4): two ⛔ negatives are false since slices 1–2: integrity ("nothing re-verifies at unpack") and runtime ("nothing dispatches"). Both cite manifest.integrity declares per-file artifact digests the spec says the runtime re-verifies at unpack — nothing computes them and nothing checks them #11331 / [text correction · ruled B] manifest.runtime tombstone/describe reads truthfully: publish-gate enforced (cloud), load-side NOT enforced #11330, which do not resolve in this repo. The scored clauses are true; only these two negatives and their sources are stale.
  3. packages/spec/liveness/README.md, the manifest type cell: no sentence for the type's first planned row (packaging, set by feat(spec, cli)!: bundled is the one plugin packaging strategy — manifest-deps is retired, and os plugin build refuses a native addon (#27123, slice 3 of 3, server half) #27679), and the cell's "Dead 19" disagrees with the generated count (13).
  4. For the ui lane, not this card's surface: ui/packages/app-shell/src/console/marketplace/marketplaceApi.ts:171, a comment on the string-typed packaging field still names manifest-deps; one line, with the next ui PR there.

Re-check: grep -rn "manifest-deps" docs/design/plugin-distribution.md docs/qa/platform-checklist/areas/cli.json packages/spec/liveness/README.md ui/packages/app-shell/src/console/marketplace/marketplaceApi.ts.

Docs and checklist only; no code. Filed without domain:*; grading is triage's.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: 写给 AI 的文档与 skills 说错一句,等于产品缺陷 | none | P①

    Triage: p2 · domain:devx · area:devpath · cross-domain exception, one PR · 2026-10-29T17:57Z

    ⛔ Not a claim.

    • Read fresh. Prose only. Items 1 and 2 (docs/design/plugin-distribution.md, and docs/qa/.../cli.json with a revision bump) are the devx lane's documentation surface.
    • Granted (SKILL.md 跨域例外路径): the domain:devx lane claims the one PR, and the claim declares packages/spec/liveness/README.md (item 3, the hand-written cell). The generated count is regenerated, not typed.
    • Item 4 (ui/.../marketplaceApi.ts:171, a one-line comment) is not this card's. It rides the next domain:ui PR in that file. Recorded here so it stays visible.
    • documentation, pm:queue.

    Generated by Claude Code

  2. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW

    Claim: PM loop round 8 · 2026-10-29T18:52Z
    Session: session_01QSeKYmTYfaPbLQD4BJfomW (mode:subagent: the dev shares this session ID; its identity is the branch)
    Account: os-justin (the seat's linked user, as GET /user answers it; the card's assignee)
    Branch: claude/issue-27685-manifest-deps-leftovers
    Worktree: objectstack-issue-27685
    Domain: domain:devx
    Seat: domain:devx#2
    File surface: docs/design/plugin-distribution.md (the manifest-deps passages, L114–115, 122, 144, 168, 195); docs/qa/platform-checklist/areas/cli.json, item cli.plugin-manifest-build-contract only (its two stale ⛔ negatives and their sources, a revision bump and a history entry); and, cross-domain as triage granted in 6504381957 (SKILL.md 跨域例外路径), packages/spec/liveness/README.md, the manifest type cell only (any generated count is regenerated with the repo's generator, never typed). Item 4 (ui/.../marketplaceApi.ts:171) is ⛔ out of scope: it rides the next domain:ui PR. No product code (stop on breach; explain in the report)
    Container & model: S, mode:subagent, model: default (prose only; correctness is judged against the tree), effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card (stale prose after #27679)
    Thread-read: 6504381957
    Premise: holds at origin/main 69991ffa18, after #27679 merged. manifest-deps still appears at plugin-distribution.md L114, 115, 122, 144, 168 and 195. cli.json L1790–1791 carry the two ⛔ negatives. The README manifest cell (L1017) reads "Dead 19".
    Serial constraints cleared: #27679, the last PR touching cli.json, merged before this claim. At claim time no open PR touches any of the three files (file scan of every open PR).


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW

    Dispatched under claim 6505583616 · 2026-10-29T18:53Z: an os-dev subagent (mode:subagent, default tier, effort medium) on branch claude/issue-27685-manifest-deps-leftovers. It is to measure the bundled-only shape from the tree, re-point or remove the two stale ⛔ negatives against the code that now verifies and dispatches, and regenerate any generated count rather than type it. Item 4 is excluded. The report comes back here as os-dev-report.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW
    os-dev-report

    {
      "issue": 27685,
      "status": "done",
      "branch": "claude/issue-27685-manifest-deps-leftovers",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/27698",
      "session": "session_01QSeKYmTYfaPbLQD4BJfomW",
      "premise_still_valid": true,
      "summary": "Docs-only alignment with #27679 on base 86f2afeb23, head 8dee70e6bb. H1 HOLDS: manifest.zod.ts#PluginPackagingSchema is enumWithRetiredValues(['bundled'], PACKAGING_RETIRED), so 'manifest-deps' is refused by name with its prescription, and build.ts#PluginBuild has one esbuild call (external ['@objectstack/*'] only) and reads packaging only for the Loaded echo. plugin-distribution.md now says bundled only (tree, compiled-manifest line, section 4.3 rewritten plus one dated note citing #27679, publish tier gate, section 6 step 5). Beyond the claimed lines, one same-class bullet changed: section 8 supply-chain, whose lockfile and --ignore-scripts existed only for manifest-deps. The PR body declares it. H2 HOLDS: integrity is re-verified at unpack by packages/cli/src/commands/plugin/install.ts#PluginInstall through packages/core/src/security/plugin-artifact-integrity.ts#verifyIntegrity (slice 1, 10f27b6508, #27335; install.ts is a new file there). Runtime is dispatched by packages/runtime/src/installed-plugin-loader.ts#dispatchPluginRuntime, called from checkRecord at boot and from PluginInstall as a warning (slice 2, d4ff1a025f, #27374). Both negatives were re-pointed to name that code as unscored here, the 404ing #11331/#11330 citations were dropped, three source rows were added, the scored clauses were not touched, and the revision went 4 to 5 with a history entry. H3: the count is GENERATED, in packages/spec/liveness/state-counts/manifest.md by gen:liveness-counts. That shard was already current at dead 13 / planned 1 (gen exit 0, '0 shard(s) rewritten'). 'Dead 19' was hand-typed README prose, so it was corrected from liveness/manifest.json: 10 contributes members, plus capabilities, configuration and extensions at one tombstone row each, = 13. The old number counted 7 per-child rows and a loading row that left with #26599 (dbf7e04adf). A sentence for packaging, the only planned row, was added. A @objectstack/spec patch changeset is owed because 'liveness' is in spec's files[], so there is no skip-changeset label. Item 4 (ui marketplaceApi.ts:171) was not touched. Worktree node_modules and the worktree were removed after this report was posted.",
      "tests": "No code changed: no unit tests added or run, no ablation (no tested behaviour moved). JSON validity of cli.json checked with python json.load. gen:liveness-counts exit 0: '0 shard(s) rewritten, 0 pruned'.",
      "gates": "Derived at 8dee70e6bb by `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` (exit 0, 59 commands, 4 paths). Each was run with its exit captured before any pipe: 54 exit 0, 5 exit 3 PREREQUISITE NOT MET = NOT MEASURED (check:doc-formula-expressions, check:dts-closure, check:dual-build-cjs-loads, check:lean-entry-closure, check:sourcemap-no-sources-content; each reads built dist of packages this diff does not change, so a workspace build was skipped as a declared narrowing and CI's Lint & Repo Gates runs them built). `--ran` with exit codes: exit 0, '✓ dispatch-gates --ran: 59 derived famil(ies) accounted for — 54 run, 5 NOT-MEASURED (5 DERIVED from a recorded exit 3).' Key verdicts: check:platform-checklist exit 0 'OK — 16 areas, 352 items'; spec check:liveness exit 0 'state-counts/ is current'; check:doc-authoring, check:nul-bytes, check:issue-citations, check:published-files, check-adr-0087-registration, check-changeset-no-major and check-empty-changeset all exit 0. Local-only check:dev-prereqs / check:skill-frame-freshness were not run (no spec build or frame files touched). PR check-runs, read once at 8dee70e6bb: Check Changeset, Lint · (all lanes), Spec property liveness, Type Check · (all lanes), Governed Surface Queue Guard and PR-body guards all in_progress; opt-in jobs skipped. No CI waiting was done.",
      "line_budget": "n/a — no skills/** file touched; diff 74 changed lines (+52/-22) over 4 files, under the 3000 human-merge threshold",
      "files_changed": [
        "docs/design/plugin-distribution.md",
        "docs/qa/platform-checklist/areas/cli.json",
        "packages/spec/liveness/README.md",
        ".changeset/27685-manifest-liveness-cell.md"
      ],
      "deviations": [
        "Dispatch said 'draft, no assignees'. os-dev.md says PR assignee = the card's (os-justin) and wins on conflict, but the relay's own pr_create header says a dev's create carries no assignees. I followed the dispatch and the relay, and opened the PR with no assignee. Flagged here, with no extra write.",
        "plugin-distribution.md section 8 supply-chain bullet edited beyond the claim's line list (same file, same manifest-deps class, mechanical). Declared in the PR body.",
        "Changeset added and skip-changeset NOT applied: packages/spec files[] includes 'liveness', so the README ships."
      ],
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "0",
      "api_writes": "2 — fleet relay repository_dispatch POST /repos/objectstack-ai/objectstack/dispatches executing pr_create (POST /repos/objectstack-ai/objectstack/pulls, draft, #27698); post-stamped comment POST /repos/objectstack-ai/objectstack/issues/27685/comments (this report). Plus git pushes (not REST): empty-branch probe and 2 commits.",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: none · noted, not filed: docs/adr/0025-plugin-package-distribution.md still names manifest-deps as live at L159 (manifest example comment), L267 (section 3.5 step 5) and L595-596 (consequences bullet), against its own section 3.3. Governed surface, stale prose, no reach. In the PR Acceptance notes.",
        "carrier: none · noted, not filed: plugin-distribution.md names tsup as the bundler (section 4.1 tree, section 5 step 1), but build.ts uses esbuild. In the PR Acceptance notes.",
        "carrier: none · noted, not filed: no platform-checklist item scores the install-time integrity refusal or the boot-time tier dispatch (coverage observation). In the PR Acceptance notes.",
        "carrier: next domain:ui PR in that file (triage 6504381957) · card item 4, ui/packages/app-shell/src/console/marketplace/marketplaceApi.ts:171, untouched"
      ]
    }

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW

    ACCEPT → PR #27698 comment 6506692488 · 2026-10-29T19:46Z · ready + auto-merge armed.


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW

    Landed: PR #27698, merged as 2b4b970715 · 2026-10-29T20:27Z

    The merged diff matches the reviewed head 8dee70e6bb: the sorted +/− lines are hash-identical. ACCEPT → PR #27698 comment 6506692488. Fixes #27685 closed the card, and pm:dispatched is removed in this act. The dev ran as mode:subagent, so there is no cloud session to archive.

    What remains elsewhere:


    Generated by Claude Code

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

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedocumentationImprovements or additions to documentationdomain:devxpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions