Skip to content

cli + create-objectstack: os generate picklist and the src/picklists scaffold wiring (os init / npm create), after the picklist runtime reader #19519 lands (split from #20825 item 1) #21018

Description

@objectstack-fleet

Filed by the triage seat (objectstack-wide, seat post #6015, session_01AavokzJ5DndAwitDXvKy4U) as the carrier for #20825 item 1's generator half under answer B. ⛔ Not a claim, ⛔ not a dispatch. Graded here: enhancement · priority:p3 · domain:cli · area:devpath · pm:blocked.

Why it waits

A scaffolded, wired picklist validates and builds, and then serves nothing at runtime until #19519 (the runtime reader: resolving picklist into options) lands. Wiring every new os init / npm-create project to a kind with no runtime reader would be a declared capability the runtime does not honour. The generator row was written and reverted on #20825's branch (6ef78d3f29, then e16359a9fa), and that diff is the starting point.

Scope (measured by #20825's dev, os-dev-report 5922744843)

  1. os generate picklist: the generator row in packages/cli.
  2. Scaffold wiring: packages/create-objectstack's blank starter gets src/picklists/index.ts and its objectstack.config.ts entry, with a changeset. create-objectstack-wiring-parity.test.ts is the pin; it went 4 red with the row alone.
  3. Docs: the generator rows in content/docs/deployment/cli.mdx and packages/cli/README.md.
  4. Tier H: the "seven generator barrels" line in skills/objectstack-platform/SKILL.md. It is governed, so it needs the maintainer's approval on the PR.
  5. The metadata summary (picklist kind: the os CLI compile / validate / lint path accepts *.picklist.ts, picklists and picklistExtensions, and os validate refuses a picklist that names no picklist (Scope 6 of #19518) #20825 addendum 5922965902): collectMetadataStats (packages/cli/src/utils/format.ts), which os validate / os build / os info print, gains a picklist row.

Not carried here

Activity

  1. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1 of the domain:cli seat's session session_01VvcEokUG1tvVxkceYfR5XB (batch 3): priority:p3, the triage filing graded in the card body (answer B of #20825), unblocked by #19519's close (PR #21047), filling a free slot under the maintainer's 「并发保持3」. This claim is the code half, landed as Part of #21018
    Session: session_01VvcEokUG1tvVxkceYfR5XB
    Account: huangyiirene
    Branch: claude/issue-21018-generate-picklist
    Worktree: objectstack-issue-21018
    Domain: domain:cli
    Seat: domain:cli#1
    File surface (scope items 1, 2, 3 and 5 of the card body; item 4 is excluded, see below):

    • Item 1: packages/cli/src/commands/generate.ts, the picklist generator row, plus a pin beside the existing generate-*.pin.test.ts files.
    • Item 2: packages/create-objectstack/src/templates/blank/, the blank starter's src/picklists/index.ts and its objectstack.config.ts entry. packages/cli/test/create-objectstack-wiring-parity.test.ts is the pin.
    • Item 3: the generator rows in content/docs/deployment/cli.mdx and packages/cli/README.md.
    • Item 5: collectMetadataStats (packages/cli/src/utils/format.ts) gains a picklist row, printed by os validate / os build / os info, with a pin beside the existing format.*.test.ts files.
    • Changesets for @objectstack/cli and create-objectstack, at the level the real diff takes.
    • ⛔ Item 4 is not in this PR: the "seven generator barrels" line in skills/objectstack-platform/SKILL.md (:194 on db48028f1a) is a Tier H governed path, and a mixed diff is not split by proportion.
      • It follows as its own PR under a second claim, with Fixes #21018, after this half lands.
      • This PR's first line is Part of #21018.
    • ⛔ Not here, per the card: the picklist-reference-unverified trigger, and the dangling picklistExtensions[].extend (folded into picklist kind: the os CLI compile / validate / lint path accepts *.picklist.ts, picklists and picklistExtensions, and os validate refuses a picklist that names no picklist (Scope 6 of #19518) #20825).
      (stop on a breach outside these; explain in the report)
      Container & model: M, mode:subagent, model: opus (dispatch-gates --tier: no path-derived mandate, floor sonnet · default opus · ceiling fable).
      Clause-②: yes (widening). os generate accepts a new kind, picklist. The dev re-reads it against the real diff.
      Thread-read: none
      Serial constraints cleared: #19519 is closed (PR #21047 merged). No open PR touches packages/cli/src/commands/generate.ts, packages/create-objectstack/src/**, packages/cli/src/utils/format.ts, content/docs/deployment/cli.mdx, packages/cli/README.md, packages/cli/test/create-objectstack-wiring-parity.test.ts or skills/objectstack-platform/SKILL.md (the file lists of all 14 open PRs were read in this act, main db48028f1a). The one hit is the Version Packages PR #20639 (packages/create-objectstack/CHANGELOG.md and package.json), which is release-owned and not touched here. In flight on this seat: #21114 (packages/cli/src/commands/start.ts, dev-restart.ts) and #21059 (packages/metadata-protocol/src/protocol.ts). Both are disjoint. area:devpath: #21114 is in flight on a disjoint surface.

    Generated by Claude Code

  2. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 21018,
      "status": "done",
      "branch": "claude/issue-21018-generate-picklist",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/21167",
      "session": "session_01VvcEokUG1tvVxkceYfR5XB",
      "premise_still_valid": true,
      "summary": "Code half of #21018 (scope items 1, 2, 3, 5), opened as draft PR #21167 with Part of #21018. os generate picklist NAME writes src/picklists/NAME.picklist.ts via definePicklist, collected under the picklists stack key; os init derives the wiring from the roster, and the create-objectstack blank starter gains a byte-identical empty src/picklists barrel plus the config import and key. collectMetadataStats counts picklists and the Data: row of os validate / os build / os info prints it (stats.picklists also appears in the three --json payloads); cli.mdx and the cli README carry the generator row; minor changesets for @objectstack/cli and create-objectstack. Premise held: the runtime reader is on main as 88b484e00c (#21047), and a scaffold -> os g picklist -> select field -> os dev chain served the field with the list options and refused an off-list write (400 invalid_option naming the picklist). Item 4 (Tier H SKILL.md line) is not touched; its replacement text is in item4_line. Worktree and its node_modules removed after the PR opened.",
      "tests": "All on HEAD 5a535158c7 unless noted. (1) pnpm --filter @objectstack/cli exec vitest run --project unit --maxWorkers=2: 241 files passed + 2 failed at collection with \"packages/cli is not built\" (prerequisite, not a verdict); after pnpm --filter @objectstack/cli build those 2 files passed (29 tests). Total 243 files, 3456 passed, 29 skipped. (2) --project integration over the 8 integration files among the related tests (generate-picklist.pin, create-objectstack-stack-reach, generate-stack-reach, info-detail-package-fold, generate-refuses-name-outside-charset, generate-refuses-namespace-prefix, generate-refuses-retired-generator, schema-migrate.host-composition.integration): 8 files, 66 tests passed. (3) OS_TEST_TIERS=nightly over 6 related e2e files (generate-scaffolds-reach-stack, init-created-files-summary, scaffold-emission-policy, build-json-advisory-parity, build-json-undeclared-key-parity, validate-json-warning-parity): 6 files, 42 tests passed, incl. \"os g picklist exits 0 and reports no wiring to add\". (4) pnpm --filter create-objectstack exec vitest run: 16 files, 249 tests passed. (5) pnpm --filter @objectstack/cli typecheck exit 0 (tsc --noEmit and check:test-typecheck OK, ledger unchanged 3 files / 28 errors); pnpm --filter create-objectstack typecheck exit 0. (6) Pre-merge targeted run on e63b1dbd13: 10 files / 197 tests passed. Ablation on committed e63b1dbd13, each leg through scripts/ablation-replace.mjs (anchor x1 -> x0 proven on disk, restore proven blob == HEAD and git diff HEAD empty), relative src imports so no dist rebuild applies: generator row deleted (53-line anchor) -> generate-picklist.pin 3/5 red, wiring-parity 2 red (imports, stack keys), control generate-scaffold-validates 19/19 green; blank config picklists key deleted -> wiring-parity 1/22 red; collect line deleted -> metadata-stats-picklists 5 red + package-fold 4 red, controls green; print row deleted -> 2 red (Data: row pin, zero-row \"every metric collectMetadataStats counts is rendered\"), 27 green. Lint as proven narrowing on 5a535158c7: population read from eslint config (isPathIgnored/calculateConfigForFile) = all 8 touched .ts files linted, 4 md/mdx outside; eslint --no-inline-config --format json = 8 files, 0 errors, 0 warnings; invariance = no resolved config is type-aware (no parserOptions.project / projectService) and no lint config or baseline touched.",
      "mcp_calls": "0 — no MCP GitHub tool was called",
      "api_writes": "3 — all through the fleet-write relay (POST /repos/objectstack-ai/objectstack/dispatches, executed as objectstack-fleet[bot]): (1) pr_create -> POST /repos/objectstack-ai/objectstack/pulls (draft #21167, body read back 11264 bytes identical); (2) label-write assign -> POST /repos/objectstack-ai/objectstack/issues/21167/assignees (huangyiirene, read back matches); (3) this os-dev-report comment -> POST /repos/objectstack-ai/objectstack/issues/21018/comments. git push (6 pushes of the branch) is not a REST write.",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: the item-4 follow-up PR (second claim, Tier H) · noted, not filed — two prose listings of the starter barrels now omit src/picklists: the Layout bullet in packages/create-objectstack/src/templates/blank/README.md (ships into every new project) and the tree in packages/create-objectstack/README.md; neither is pinned, both outside this claim's file surface; same roster sentence as the SKILL.md line"
      ],
      "gates": "dispatch-gates --repo objectstack-ai/objectstack --commands (no paths) on 5a535158c7 derived 96 families; all 96 run with exit codes captured before any pipe; final all 96 exit 0. Five first refused PREREQUISITE NOT MET (exit 3): spec check:skill-examples, check:dual-build-cjs-loads, check:i18n, check:i18n-coverage, check:i18n-walk-parity; rerun once their build inputs existed -> exit 0. --ran reconcile: \"96 derived famil(ies) accounted for — 96 run, 0 NOT-MEASURED\" (exit 0). CI on 5a535158c7 at report time: 34 check runs, 9 success, 3 skipped, 22 in_progress (not waited on).",
      "deviations": [
        "turbo 2.11.5 agent guidance: a turbo invocation inside pnpm check:type-check-debt wrote an 11-line block (an HTML comment marker pair) into the worktree AGENTS.md; reproduced once with pnpm exec turbo run build --filter=@objectstack/types --dry=json. Both times restored with git checkout HEAD -- AGENTS.md, git diff HEAD empty, never committed. Already fixed on main by fde553c509 (#21151, after this branch's merge base), so no finding.",
        "Two existing test fixtures that spell out every MetadataStats member (src/utils/format.metadata-stats-package-fold.test.ts, test/print-metadata-stats-zero-row.test.ts) gained picklists: 0; the interface change forces it (typecheck and toEqual). Two comments in generate.ts that counted the roster were reworded. Both inside item 1 / item 5 files or their direct fixtures.",
        "Item 2 measurement: the card's \"4 red with the row alone\" (row present, template absent) was not re-measured; measured instead row-absent (wiring-parity 2 red) and template-key-absent (1 red).",
        "origin/main merged once (70dae533c5, as instructed). origin/main has since moved to fde553c509 (4 commits, none touching this diff's surfaces); not re-merged.",
        "pnpm lint covered by the proven narrowing (three pieces of evidence in tests), not a full run.",
        "Commit trailers use the model-free pair from the dispatch, not the harness reminder's model-named Co-Authored-By line.",
        "Clause-② re-read against the real diff: unchanged, yes (widening) — a new os generate kind and a new stats.picklists key on three --json payloads; nothing narrowed."
      ],
      "files_changed": [
        ".changeset/21018-cli-generate-picklist.md",
        ".changeset/21018-create-objectstack-picklists-barrel.md",
        "content/docs/deployment/cli.mdx",
        "packages/cli/README.md",
        "packages/cli/src/commands/generate.ts",
        "packages/cli/src/commands/generate-picklist.pin.test.ts",
        "packages/cli/src/utils/format.ts",
        "packages/cli/src/utils/format.metadata-stats-picklists.test.ts",
        "packages/cli/src/utils/format.metadata-stats-package-fold.test.ts",
        "packages/cli/test/print-metadata-stats-zero-row.test.ts",
        "packages/create-objectstack/src/templates/blank/objectstack.config.ts",
        "packages/create-objectstack/src/templates/blank/src/picklists/index.ts"
      ],
      "repro": {
        "before": "origin/main 58a77dbde2: os generate picklist industry -> exit 1, \"Unknown type: picklist\", roster of 7; blank starter src = actions apps dashboards flows objects skills views (no picklists); hand-wired picklist + Field.select({ picklist }) -> os validate exit 0, \"Data: 1 Objects  3 Fields\" (no picklist count).",
        "after": "blank starter src gains picklists; os g picklist industry -> exit 0, \"Reaches the stack: objectstack.config.ts carries it in picklists as industry\"; with the field added os validate / os build / os info exit 0, \"Data: 1 Objects  3 Fields  1 Picklists\"; os info --json stats.picklists = 1; artifact carries picklists and the field picklist; os dev --fresh: GET /api/v1/meta/object/my_app_note 200 with fields.industry.options = [option_a, option_b] and picklist kept; GET /api/v1/meta/picklist/industry 200; POST valid 201; POST option_z 400 VALIDATION_FAILED invalid_option naming picklist industry; pre-change project: os g picklist region exit 0, \"Not wired\", prints the import and the defineStack key. collectMetadataStats line before/after: \"Data: 1 Objects  3 Fields\" -> \"Data: 1 Objects  3 Fields  1 Picklists\"."
      },
      "item4_line": {
        "file": "skills/objectstack-platform/SKILL.md (lines 194-195 on db48028f1a)",
        "current": [
          "  generic connector executors in `plugins:`; and the seven generator barrels",
          "  (`objects`, `views`, `actions`, `flows`, `dashboards`, `apps`, `skills`),"
        ],
        "proposed": [
          "  generic connector executors in `plugins:`; and the eight generator barrels",
          "  (`objects`, `views`, `actions`, `flows`, `dashboards`, `apps`, `skills`, `picklists`),"
        ],
        "note": "net zero lines; the same follow-up PR is the natural carrier for the two create-objectstack README listings"
      }
    }

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT (held): PR #21167 at 90d55b1e (the code half: os generate picklist, the blank starter's picklists barrel, the metadata-stats row). State change: pm:dispatched → pm:blocked on #20639, the release that publishes the picklists stack key

    domain:cli seat · session_01VvcEokUG1tvVxkceYfR5XB · 2026-10-01T12:25Z

    Blocked-by: #20639

    • Contract review of record: 5931398995 on the PR, CONTRACT_REVIEW_TIER, head 90d55b1e, PASS. It succeeds the FAIL 5930680827 on 5a535158.
      • What the records found:
        • Item 1: the generator emits a schema-valid definePicklist file under the registry's file pattern, reaches the picklists key the runtime reader (feat(objectql): resolve picklist references at runtime — served options, additive extensions, write validation, load-time refusal #21047) reads, and every enumeration of generator kinds derives from the one roster.
        • Item 2: the starter's empty barrel is byte-identical to os init's own rendering, and the wiring-parity pin holds the template and the roster together.
        • Item 3: the docs rows are accurate.
        • Item 5: the stats row counts picklist declarations, and a stack with none prints as before.
        • Semver: minor for both packages with Clause-②: yes (widening) is right.
      • The FAIL's three remedies are met:
        1. the PR body's Acceptance notes name the scaffold red and the repo-build scope of the repro;
        2. the hold is on record (5931049852);
        3. the two starter README listings now name src/picklists, in this PR (90d55b1e), not on the Tier H item-4 PR.
    • Why it is held, not queued:
      • The non-required check Scaffold with repo dist is red. The scaffolded project installs the published @objectstack/spec 17.5.0, which predates the picklists stack key.
      • The key's changeset (addbbf0, .changeset/19518-picklist-kind.md) is still pending on main.
      • The gate is not red-by-design in its workflow's own terms, so the queue rule does not let the PR carry it. Landing now would leave it red on every later create-objectstack PR.
      • The record judges the PR landable as it stands once that one check turns green. All seven required contexts are green, and the merge-tree against main is clean.
    • What unblocks it: the Version Packages PR chore: version packages #20639. Its head 718e74c744 has addbbf02ab as an ancestor and its @objectstack/spec 17.6.0 changelog lists it.
    • State: pm:dispatched → pm:blocked, in one label write with this comment.
    • Still owed after this PR lands: scope item 4, the Tier H skills/objectstack-platform/SKILL.md:194-195 line ("the eight generator barrels … picklists"). It goes in its own PR under a second claim, with Fixes #21018 and a human approval.

    Generated by Claude Code

  4. 7 remaining items

  5. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1 of the domain:cli seat's session session_01VvcEokUG1tvVxkceYfR5XB (batch 3): priority:p3, the card's item 4. This is the second claim, which PR #21167's body and the held ACCEPT 5931418926 reserved for it. Landed as Fixes #21018
    Session: session_01VvcEokUG1tvVxkceYfR5XB
    Account: huangyiirene
    Branch: claude/issue-21018-skill-generator-barrels
    Worktree: objectstack-issue-21018-item4
    Domain: domain:cli
    Seat: domain:cli#1
    File surface: skills/objectstack-platform/SKILL.md only. This is a Tier H governed path, skills/**.

  6. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 21018,
      "status": "done",
      "branch": "claude/issue-21018-skill-generator-barrels",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/21337",
      "session": "session_01VvcEokUG1tvVxkceYfR5XB",
      "premise_still_valid": true,
      "summary": "Item 4 of #21018, the Tier H line, opened as draft PR #21337 with Fixes #21018 and Clause-②: no. skills/objectstack-platform/SKILL.md:194-195 now reads 'the eight generator barrels (objects, views, actions, flows, dashboards, apps, skills, picklists)', the text PR #21167's 'Not in this PR' section proposed, net zero lines. Premise held on origin/main: the blank template's objectstack.config.ts imports those eight barrels in that order and hands each to its stack key, os init derives the same eight from SCAFFOLD_WIRED_BARRELS (GENERATOR_SCAFFOLD_TARGETS = Object.entries(GENERATORS): object, view, action, flow, dashboard, app, skill, picklist), and create-objectstack-wiring-parity.test.ts holds template and roster equal. The sweep of skills/** found no other count or list that #21167 made false. The PR stays draft (Tier H); its body carries the 维护者速读(草稿) section; assignee huangyiirene and skip-changeset were set in one label-write; the worktree is removed after this report.",
      "tests": "No test suite owes a run: the diff is one prose edit in a governed Markdown file, outside every package and outside eslint's population. Verification is the derived gate union, run twice. Pre-merge head 84fc471b7f: 25 derived families, 24 exit 0 + 1 exit 3 (PREREQUISITE NOT MET: @objectstack/lint check:doc-formula-expressions, package not built); after 'pnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lint' under os-verify-lock (VERDICT command-exit 0, held 118s) it exited 0. Final merged head 82e06107cf (origin/main 222ecc27f9 merged, clean, nothing incoming under skills/ or the derived gates): all 25 re-run, 25 exit 0, captured before any pipe; '✓ dispatch-gates --ran: 25 derived famil(ies) accounted for — 25 run, 0 NOT-MEASURED'. Token ratchet on 82e06107cf: 'skills/objectstack-platform/SKILL.md is 5830 tokens (ceiling 5833; headroom 3)'. Readings (lines are the unit; tokens = ceil(utf8 bytes/4), the ratchet's convention): file 489 → 489 lines, 5827 → 5830 tokens; whole catalog (10 SKILL.md) 4397 → 4397 lines, 52132 → 52135 tokens. No ablation: a prose count has no runtime consumer to ablate; the pin that holds the fact itself is the wiring-parity test, unchanged. No pnpm lint run: the one touched file is .md, outside eslint.config.mjs's ts/tsx/js/mjs population, so no lint verdict can move (a declared narrowing, not a measurement).",
      "mcp_calls": "0 — no MCP GitHub tool was called; reads were single-object REST GETs (issue 21018, its comments, PR 21167, PR 21337, check-runs on 82e06107cf)",
      "api_writes": "3 relay dispatches, 4 endpoints, all through fleet-write (POST /repos/objectstack-ai/objectstack/dispatches, executed as objectstack-fleet[bot]): (1) pr_create → POST /repos/objectstack-ai/objectstack/pulls (draft #21337; read-back 8388 bytes sent, 8388 stored, identical); (2) label-write, one dispatch carrying POST /repos/objectstack-ai/objectstack/issues/21337/labels (skip-changeset) and POST /repos/objectstack-ai/objectstack/issues/21337/assignees (huangyiirene); read-back matches the target (documentation and size/xs were the labeler's, preserved); (3) this os-dev-report comment → POST /repos/objectstack-ai/objectstack/issues/21018/comments. git push x3 (empty-branch probe, the edit, the merge) is not a REST write. No PATCH anywhere.",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: none · noted, not filed — skills/objectstack-platform/references/operations.md:26 lists 'os generate KIND | Scaffold an object / view / flow / agent from a template' while skills/objectstack-ai/SKILL.md:344 says 'os g agent' is retired; pre-existing, not a count or list #21167 touched, so outside this claim's purpose. dedupe: operations.md generate agent retired roster",
        "carrier: none · noted, not filed — skills/objectstack-platform/SKILL.md:210-235 'Project Structure Conventions' tree lists neither skills/ nor picklists/; a generic optional-directory convention with no count, already not the template roster before #21167, so not false. dedupe: project structure conventions tree picklists skills"
      ],
      "gates": "Derived with 'node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands' (no paths; change set from git, 1 path) at 84fc471b7f and again at 82e06107cf: identical 25 commands (17 pnpm, 8 node). Final run on 82e06107cf, every exit captured before any pipe: check-ci-filter-parity 0; check-closing-keyword-parity 0 (+ --self-test 0); check-comment-mask-corpus 0; check-doc-route-spelling --advisory 0 (+ --self-test 0); check-skills-token-ratchet 0 (+ --self-test 0); lint check:doc-formula-expressions 0; spec check:skill-docs 0; check:agent-test-spelling 0; check:corpus-claim-drift 0; check:cross-package-test-inputs 0; check:doc-authoring 0; check:driver-memory-census 0; check:gitlink-declared 0; check:nul-bytes 0; check:pm-governed-merges 0; check:refd-timer-probe 0; check:role-word 0; check:skill-compatibility 0; check:skill-frame-sync 0; check:skill-identifier-liveness 0; check:skill-top-level-keys 0; check:watch-hint-literal 0. --ran reconcile: 25 run, 0 NOT-MEASURED, 0 UNRUN. Outside the derived 25 and attempted: spec check:skill-examples → exit 3 PREREQUISITE NOT MET (packages/client-react/dist has no declarations); NOT MEASURED locally, declared to CI; the diff changes no ts/tsx fence, the only surface it reads. Not applicable: scripts/pm/check-skill-line-ratchet.mjs excludes the published skills/ catalog by its own header. The derivation's NOT-MEASURED tail (the shard attestation, the Test Core steps, the four type-check lanes, 11 wide-population families, 14 pending-changeset families, 56 artifact rosters) is CI's.",
      "checks_after_push": "Read at report time on 82e06107cf: 33 check runs — 10 success, 11 skipped, 12 in_progress, 0 red. Governed Surface Queue Guard success; Dogfood Regression Gate success; Lint & Repo Gates in_progress; Test Core 6 shards in_progress; Check Changeset in_progress (skip-changeset is on the PR, read live by that job); TypeScript Type Check not yet listed. Not waited on.",
      "deviations": [
        "Changeset: none, declared with skip-changeset via label-write (the dispatch allowed it). Evidence: no packages/** or apps/** package.json names a skills path in files[] (positive control: @objectstack/spec files[] = dist, json-schema, ...), and create-objectstack installs the catalog at scaffold time with 'npx skills add objectstack-ai/objectstack/skills' (src/skills-install.ts), not a bundled copy. The Check Changeset job has no path exemption, so the label is the only green path for this diff.",
        "origin/main merged once before the PR (222ecc27f9; 2 commits, touching scripts/pm/fleet-write/dispatch.mjs, execute.mjs, issue-create.mjs, issue-transfer.mjs and one changeset; nothing under skills/). Net PR diff vs origin/main is 1 file +2/-2; the gate union was re-run on the merged head and cited from it.",
        "The build under the lock was the gate's own Fix line (turbo build of formula + lint, which pulled spec); no AGENTS.md change appeared afterwards (tree clean), so the earlier turbo-agent-guidance deviation did not recur.",
        "Commit trailers are the model-free pair (Claude-Session URL + Co-authored-by: Claude), not the harness reminder's model-named line; the pre-push check:commit-card-trailers passed on each push.",
        "The PR body was sent with the session-URL footer block at its tail (per platform-readings: the create side sends the whole block); stored byte-identical, one footer, no angle brackets.",
        "The claim's model clause is honoured; no model name is written in any GitHub artefact."
      ],
      "files_changed": [
        "skills/objectstack-platform/SKILL.md"
      ],
      "before_after": {
        "file": "skills/objectstack-platform/SKILL.md:194-195",
        "before": [
          "  generic connector executors in `plugins:`; and the seven generator barrels",
          "  (`objects`, `views`, `actions`, `flows`, `dashboards`, `apps`, `skills`),"
        ],
        "after": [
          "  generic connector executors in `plugins:`; and the eight generator barrels",
          "  (`objects`, `views`, `actions`, `flows`, `dashboards`, `apps`, `skills`, `picklists`),"
        ],
        "lines": "489 → 489 (file), 4397 → 4397 (catalog)",
        "tokens": "5827 → 5830 (file; ceiling 5833), 52132 → 52135 (catalog)"
      },
      "grep_results": "Patterns over skills/**: count words six..nine or 6..9 near barrel|generator|template|stack key|kinds|directories|scaffold → 1 hit (SKILL.md:194, the target); 'barrel' → 12 hits: 9 generated _index.md 'root barrel re-exports' lines, bootstrap.md:55 'Barrel Import Pattern' (a 4-barrel example), SKILL.md:221 tree comment, evals/config-plugins-ops.json:7 (a CRM eval's expected output) — none a template roster; 'picklist' → SKILL.md:44-45 stack-key list (already names picklists, correct) and ui/rules/dashboards.md:352 (unrelated); 'src/(objects|views|actions|flows|dashboards|apps|skills|picklists)' → per-skill file-path tables and examples (ui, automation, ai, data, platform bootstrap/operations), none enumerating the template's barrels; 'os generate|os g' → operations.md:26 (names agent, retired; pre-existing) and ai/SKILL.md:344. Verdict: only SKILL.md:194-195 states a number or list that #21167 made false; nothing else was added to the surface."
    }

    Generated by Claude Code

  7. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT (Tier H): PR #21337 at 82e06107 (item 4: the platform skill's blank-template sentence names eight generator barrels, picklists included). Fixes #21018, held for an authorized approval

    domain:cli seat · session_01VvcEokUG1tvVxkceYfR5XB · 2026-10-02T05:43Z


    Generated by Claude Code

  8. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed: item 4, PR #21337 → 1911d7cd1b (the platform skill names eight generator barrels, picklists included). Fixes #21018: the card is complete

    domain:cli seat · session_01VvcEokUG1tvVxkceYfR5XB · 2026-10-02T06:13Z

    • Approval and landing:
      • os-zhuang approved at 2026-10-02T05:46:07Z, an account in GOVERNED_APPROVERS.
      • The same account then marked the PR ready, enabled auto-merge and queued it. The seat took no landing action.
      • The merge queue merged it at 2026-10-02T06:12:37Z.
    • Landing reading: 1911d7cd1b is on origin/main as a single-parent squash on 97239c3c8a: 1 file, +2 / −2. Its git patch-id --stable is 44753ce88da1…, equal to the reviewed net diff at the head 82e06107cf.
    • The card: items 1, 2, 3 and 5 landed in bcd68a29f3 (PR feat(cli,create-objectstack): os generate picklist, the src/picklists starter barrel, and a Picklists count in the metadata summary #21167) and item 4 in 1911d7cd1b. The card closed as completed with this merge, and pm:dispatched is removed in the same act as this note.
    • A loose end, for the maintainer: PR docs(skills): the platform skill counts the eight generator barrels, picklists included #21337 still carries needs-user-decision. The seat's removal (scripts/pm/label-write.mjs --issue 21337 --remove needs-user-decision) was refused by this session's permission classifier, which judged it a merge action. The seat did not retry. The label has no effect on a merged PR, and removing it is one click.

    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, iteratedomain:clienhancementNew feature or requestpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions