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

Closed

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 2, 2026

    @objectstack-fleet
    ContributorAuthor

    Holder note from the blocked-card audit · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-02T03:06Z. ⛔ Not a claim, ⛔ the state and the assignee are the holder's.

    The blocker has landed. #20639 merged at 2026-10-02T02:29Z, and npm @objectstack/spec is 17.6.0. Its tag commit 617f25f8a4 carries the picklists stack key (stack.zod.ts, read at this write) and #21047's reader (88b484e00). So the condition this card was held on (5931418926) is met. PR #21167 (ACCEPT held at 90d55b1e) can resume: rebase or merge main, then re-run its gates against the published key.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    Unlock re-derived: #20639 merged and 17.6.0 is installable. One gate re-run remains, and the seat cannot trigger it

    domain:cli seat · session_01VvcEokUG1tvVxkceYfR5XB · 2026-10-02T03:10Z

    • The Blocked-by: #20639 condition is met. chore: version packages #20639 merged as 617f25f8a4. The Release publish step completed success, and npm now answers 17.6.0 as latest for:
      • @objectstack/spec, @objectstack/cli, @objectstack/runtime, @objectstack/objectql and @objectstack/core;
      • create-objectstack.
        The blank template's ^17.0.0 ranges resolve to these. That is the cross-repo unlock criterion: the consumer can install the release, not merely see the upstream merged.
    • PR feat(cli,create-objectstack): os generate picklist, the src/picklists starter barrel, and a Picklists count in the metadata summary #21167 at 90d55b1e:
      • 37 check names: 31 success, 5 skipped, and 1 failure.
      • The failure is Scaffold with repo dist, from its 2026-10-01T12:05Z run, when the published spec was still 17.5.0 and refused the picklists key (the Acceptance notes record the cause).
      • git merge-tree against origin/main is clean, 83 commits behind.
    • What remains: one re-run of that failed job (Actions run 36859328546), which now installs 17.6.0. The seat has no sanctioned means to trigger it:
      • the fleet-write relay carries no re-run op;
      • an empty commit and a close-and-reopen are both barred;
      • the work on this card is finished, so a dev is not re-dispatched to push.
        It was asked of the maintainer in this session at the time of this note.
    • Next:
      1. When the re-run reads success, the seat runs the landing from the held ACCEPT 5931418926: ready, auto-merge, then the merge reading.
      2. 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 stays open for item 4, the Tier H skills/objectstack-platform/SKILL.md line, which is then dispatched as its own PR.
      3. If the maintainer does not act, the next patrol moves this card to pm:awaiting-maintainer with that action named.

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    pm:blocked → pm:dispatched: PR #21167 resumes as a landing-window patch round (merge main, re-run the gates against 17.6.0)

    domain:cli seat · session_01VvcEokUG1tvVxkceYfR5XB · 2026-10-02T03:41Z

    • Why now: the unlock condition is met (5944918423), and triage's holder note 5944881137 reads the same.
    • Why a patch round: the seat's previous note waited on a maintainer re-run of the gate job. The landing rules give a direct path instead: a landing-window patch round continues the original dev, whose work on this card is not re-done. That dev merges origin/main into claude/issue-21018-generate-picklist, which is 83 commits behind, re-runs the derived gates, and pushes. The push re-runs every check, Scaffold with repo dist included, against the published 17.6.0. ⛔ No rebase, no force-push, no change to the PR's own diff.
    • The held ACCEPT 5931418926 still governs. If the merge brings no change to the PR's net diff, the seat lands from it once the new head is green: ready, auto-merge, then the merge reading. If the net diff changes, the seat re-reviews it before landing.
    • Afterwards: 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 stays open for item 4, the Tier H skills/objectstack-platform/SKILL.md line.
    • The Blocked-by line: Blocked-by: #20639 leaves the body in the same act, because that blocker is closed.

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT (hold lifted): PR #21167 at cd1910a9, the code half of #21018, readied and armed

    domain:cli seat · session_01VvcEokUG1tvVxkceYfR5XB · 2026-10-02T04:28Z

    • The held ACCEPT 5931418926 governs unchanged.
      • The patch round merged origin/main (393ae878d3, which carries the 17.6.0 version commit 617f25f8a4) into the branch. The resulting merge commit cd1910a947 has parents 90d55b1e13 and 393ae878d3, with no conflict, no rebase and no force-push.
      • The PR's net diff is byte-equivalent before and after: git patch-id --stable is 272474a8b62c… on both sides, the same 14 files, +336 / −11. The seat recomputed this itself.
    • The gate that held it is green: Scaffold with repo dist reads success on cd1910a9. The template's ^17 ranges now resolve to the published @objectstack/spec 17.6.0, which carries the picklists key.
      • The dev's registry run reproduced the same path locally: scaffold, npm install resolving spec 17.6.0, then os validate and os build both exit 0.
    • Checks on cd1910a9: 37 names, 34 success, 3 skipped, 0 red.
      • The skips are Console Pin Gate, Packed-tarball smoke (opt-in) and Registry canary. The canary runs only on schedule or workflow_dispatch (scaffold-e2e.yml:465).
      • git merge-tree against origin/main (1371dc980c) is clean.
      • check-governed-merges --pr 21167: NOT governed, +336 / −11.
    • The patch round's local readings:
      • 96 derived gate families, 96 run, all exit 0;
      • cli unit tests: 244 files / 3460 tests;
      • the related integration and nightly e2e files: 8 + 6 files;
      • create-objectstack: 16 files / 249 tests;
      • both typechecks: exit 0.
    • Next: readied and armed in this act. This is a Part of #21018 landing. At the merge, the seat records it and dispatches item 4, the Tier H skills/objectstack-platform/SKILL.md line, as its own PR with Fixes #21018.

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed: the code half, PR #21167 → bcd68a29f3 (os generate picklist, the src/picklists starter barrel and a Picklists count in the metadata summary). A Part of landing: item 4 remains

    domain:cli seat · session_01VvcEokUG1tvVxkceYfR5XB · 2026-10-02T04:55Z

    • Landing reading: bcd68a29f3 is on origin/main as a single-parent squash, 14 files, +336 / −11. Its git patch-id --stable is 272474a8b62c…, equal to the reviewed net diff at both 90d55b1e and cd1910a9.
    • Closed by this landing: items 1, 2, 3 and 5.
      • os generate picklist;
      • the wired src/picklists barrel in os init and in the blank starter;
      • the CLI docs and README;
      • the Picklists count in os validate, os build and os info.
      • The starter now scaffolds against the published 17.6.0.
    • What remains: item 4, a Tier H change to skills/objectstack-platform/SKILL.md. At origin/main its :194-195 still reads "the seven generator barrels (…)", and since this landing the sentence is false.
    • Release: Part of landing. pm:dispatched → pm:queue and the assignee is cleared, in the same act as this note. The seat re-claims at once for item 4, in the next comment.

    Generated by Claude Code

  6. 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/**.

  7. 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

  8. 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

  9. 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:cliRetired 2026-10-22, alias of domain:server (cli surface); in-flight cards keep it until they landenhancementNew feature or requestpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions