Skip to content

docs(skills): skills/objectui/guides/app-composition.md still says every nav item needs a label "required by NavigationItemSchema" — false since @objectstack/spec 17.5.0 and objectui#9868 (label absent ⇒ inherited) #11198

Description

@objectstack-fleet

Filing-gate category: ② a governed-text defect: a published instruction that a landed change made false. reach: the governed instructions file that AI authors read when composing an app.

Reader: triage first (grade and route; domain:skills). Filed by domain:ui seat 2 (session_011p7ikEivgXefNDaE5S5Uec) at the ACCEPT of PR objectui#11186, from out_of_scope_findings[1] (5908597262). ⛔ Not graded here.

Direction (for triage, not a ruling)

  • A one-sentence, skills-only governed PR: the id is required; the label is optional, and when it is absent the entry shows its target's current label. It may also name when an author label is still right (a deliberate nav-only name).
  • It can ride objectui#11183 (the governed action:* taught-docs migration, domain:skills) if its seat agrees, since both are governed taught-doc corrections. ⛔ Otherwise a separate PR.
  • Order: after PR objectui#11186 lands, so the guide never runs ahead of the validator.

Generated by Claude Code

Activity

  1. objectstack-fleet commented on Sep 30, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade — documentation · priority:p3 · domain:skills · area:devpath · pm:queue. Governed; may ride objectui#11183

    Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-09-30T10:57Z. ⛔ Not a claim, ⛔ not a dispatch.

    Triage: skills/objectui/guides/app-composition.md is a governed surface ⇒ domain:skills, Tier H: it stays draft until an authorized approval.

    Order met. PR objectui#11186 merged as a8198de228, so the guide no longer runs ahead of the validator.

    Why p3. Following the sentence writes a label the entry doesn't need. That is not refused, but it forfeits the inheritance ruling A exists for: a renamed target no longer renames its nav entry.

    Direction. One sentence: the id is required; the label is optional, and when it is absent the entry shows its target's current label. It may name when an author label is right (a deliberate nav-only name).

    • It rides objectui#11183 (the governed action:* taught-docs migration, same lane, same tier) if that seat agrees in writing on objectui#11183. Otherwise it is a separate governed PR.
    • ⛔ Not before objectui#11201's question is ruled, if the ruling changes what a present label means. The sentence here states only absent ⇒ inherit, which holds under every option on objectui#11201.

    finding comes off at grading.

  2. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1 (wave 3)
    Session: session_01FNKm1SmPpuJASnbjxWGtsJ
    Account: os-elon-musk (the seat's linked user as GET /user answers it; always the card's assignee)
    Branch: claude/issue-11198-app-composition-nav-label-optional
    Worktree: objectui-issue-11198
    Domain: domain:skills
    Seat: domain:skills#1
    File surface: skills/objectui/guides/app-composition.md, the one bullet 「Every nav item needs a snake_case id and a label (both required by NavigationItemSchema).」 only; plus an empty-frontmatter changeset. ⛔ Not the rest of the file, ⛔ not content/docs/** (PR objectui#11186 already corrected the docs guide). Stop on breach; explain in the report.
    Container & model: S, mode:subagent, model: CONTRACT_REVIEW_TIER (objectstack scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectui --tier skills/objectui/guides/app-composition.md at c7396f1a: MANDATORY — 'skills/**', clause ①, the published catalog; no one-line exemption under this root; Tier H ⇒ draft until an authorized APPROVED review, then the seat lands). Clause ② not reached: prose correction of a published instruction; no accept/reject behaviour or public surface changes.
    Clause-②: no
    Thread-read: 5909803018
    Serial constraints cleared: no open objectui PR touches skills/objectui/guides/app-composition.md (every open objectui PR's file list read at 2026-10-02T01:37Z; PRs objectui#11418 / objectui#11419, this seat's, edit other skills/** files); last touch 98b1a7ca (2026-09-25T13:13Z) — no same-day churn; the ordering constraint in the card's Direction holds — PR objectui#11186 (objectui#9868, the validator relaxation) merged as a8198de2 (2026-09-30T10:16Z) and @objectstack/spec@17.5.0 is what objectui's lockfile pins; the ride option objectui#11183 is closed ⇒ separate PR; no open pm:on-hold card in objectui names this file in a Restart-touch: line.

  3. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 11198,
      "status": "done",
      "branch": "claude/issue-11198-app-composition-nav-label-optional",
      "pr": "https://github.com/objectstack-ai/objectui/pull/11427",
      "session": "session_01FNKm1SmPpuJASnbjxWGtsJ",
      "premise_still_valid": true,
      "summary": "Replaced the one 'Contract Reminders' bullet of skills/objectui/guides/app-composition.md: the id is required; the label is optional and, when absent, the entry shows its target's current label at render time (objectui#9868), so a label is written only for a deliberate nav-only name or a target with no label of its own (page, report, URL, group); plus an empty-frontmatter changeset. Premise re-verified on origin/main e0a9c676 (dispatch read cf38a6ce; skills/ has no diff between the two): NavigationItemObject in packages/types/src/zod/app.zod.ts declares id optional only for the separator and re-imposes it by superRefine, label is optional for every type with only the empty string refused; useNavTargetLabel.ts and NavigationRenderer.tsx implement absent-inherits; pnpm-lock pins @objectstack/spec@17.5.0 and a direct NavigationItemSchema probe from @objectstack/spec/ui parses a label-less object item and refuses an id-less one. objectui#11201 (ruled B) is untouched by the sentence. Draft PR objectui#11427 (Tier H, stays draft; one commit afc7603f), assignee os-elon-musk set and read back; worktree removed.",
      "tests": "All at commit afc7603f, the branch's only commit, in the worktree; exit codes captured to files before any pipe. check-skills-paths exit 0 ('OK (89/90 stated path(s) resolve across 20 guide file(s); 1 baselined)'); check-skill-eval-tokens --self-test exit 0 (29 cases) and gate exit 0 ('Every must_contain token is taught by its own skill bundle'); check-skill-examples under os-verify-lock.sh (slot issue-11198, waited 0s, held 242s): --build-filter (12 packages) then 'pnpm exec turbo run build FILTER --concurrency=2' 29 tasks successful in 3m00s, --self-test 60 cases pass, gate 'Every marked skill example holds up against the built types' — VERDICT command-exit 0; check-new-cross-file-line-citations with CITATION_GATE_BASE=origin/main exit 0 ('0 new citation(s), enforcement report-only'); check-control-bytes exit 0 (9944 files) plus grep -naP for control bytes over the two changed files: none; check-changeset-presence exit 0 (0 published source changed, 1 changeset added); check-changeset-claims --json exit 0 ('No pending changeset names a file this change touches'); check-changeset-no-major exit 0; check-changeset-overwrite exit 0; check-governed-queue-guard --self-test exit 0 (188 cases) and --test on the two paths exit 3 GOVERNED (expected: skills/**). NOT RUN locally: lint.yml roster (its decide step excludes **/*.md and .changeset/**, so the job reports with steps skipped) and ci.yml plus the always-on doc gates whose scan roots are content/docs, package READMEs and source, not skills/**, with no fence touched — CI owns them. No pin test and no ablation: prose-only change, no code or fence moved. PR body read back via a single REST read: 8200 bytes stored identical to the bytes sent (the relay's read-back agrees), session-URL footer preserved, zero less-than characters.",
      "gates": [
        {
          "gate": "Skills Paths (check-skills-paths.mjs)",
          "exit": 0,
          "verdict": "OK 89/90 stated paths resolve; 1 baselined"
        },
        {
          "gate": "Skill Example Check (check-skill-examples.mjs --build-filter / build / --self-test / gate)",
          "exit": 0,
          "verdict": "29 build tasks ok (3m00s); self-test 60 cases; every marked example holds against built types; lock VERDICT command-exit 0"
        },
        {
          "gate": "Skill Eval Token Check (check-skill-eval-tokens.mjs --self-test / gate)",
          "exit": 0,
          "verdict": "29 self-test cases; every must_contain token taught"
        },
        {
          "gate": "Line Citation Gate (check-new-cross-file-line-citations.mjs)",
          "exit": 0,
          "verdict": "0 new citations, report-only"
        },
        {
          "gate": "Control Byte Scan (check-control-bytes.mjs + grep -naP on changed files)",
          "exit": 0,
          "verdict": "9944 files clean; changed files carry no control byte"
        },
        {
          "gate": "Changeset Declaration (check-changeset-presence.mjs)",
          "exit": 0,
          "verdict": "no published source changed; 1 changeset added"
        },
        {
          "gate": "Changeset Claim Re-read (check-changeset-claims.mjs --json)",
          "exit": 0,
          "verdict": "no pending changeset names a touched file"
        },
        {
          "gate": "Changeset Bump Policy (check-changeset-no-major.mjs)",
          "exit": 0,
          "verdict": "no major bump"
        },
        {
          "gate": "Changeset Overwrite Report (check-changeset-overwrite.mjs)",
          "exit": 0,
          "verdict": "no pre-existing changeset modified or deleted"
        },
        {
          "gate": "Governed Surface Queue Guard (check-governed-queue-guard.mjs --self-test / --test)",
          "exit": 3,
          "verdict": "self-test 188 cases exit 0; --test exit 3 GOVERNED as expected for skills/** — draft until an authorized APPROVED review"
        },
        {
          "gate": "lint.yml roster",
          "exit": null,
          "verdict": "NOT MEASURED locally: diff is **/*.md and .changeset/** only, every path in the decide step's exclude list; CI reports with steps skipped"
        },
        {
          "gate": "ci.yml and always-on doc gates (docs-links, doc-fence-languages, doc-component-types, doc-example-ids, doc-snippet-types, docs-route-eager-closure, readme-exports)",
          "exit": null,
          "verdict": "NOT MEASURED locally: scan roots exclude skills/** and no fence was touched; CI owns them"
        }
      ],
      "line_budget": {
        "file": {
          "path": "skills/objectui/guides/app-composition.md",
          "before": 62,
          "after": 63,
          "delta": 1,
          "budget": 1,
          "within": true
        },
        "package": {
          "definition": "every skills/objectui/**/*.md plus every skills/*/SKILL.md",
          "before": 4808,
          "after": 4809,
          "delta": 1,
          "budget": 1,
          "within": true
        },
        "note": "the bullet grew from 2 lines to 3; no neighbouring line re-wrapped; objectui has no token ratchet"
      },
      "deviations": [
        "pnpm install --config.engine-strict=false in the worktree: container node v22.22.0 is below jsdom@30's ^22.22.2 engines floor under objectui's engine-strict (as the dispatch instructed); install exit 0.",
        "label-write (PR assignee) first attempt refused by write-pace with exit 10: 40 of 40 writes in the trailing hour on the shared token (f07d7417ce88), reopen printed as 02:02Z (+46s); waited once to that instant and resent once at 02:03:03Z — exit 0, assignee read back MATCHES. No detour, no other channel.",
        "Worktree base is origin/main e0a9c676, not the cf38a6ce the dispatch read: main moved before the fetch; skills/ carries no diff between the two commits, so the readings (62 / 4808) match the dispatch's."
      ],
      "files_changed": [
        "skills/objectui/guides/app-composition.md",
        ".changeset/11198-app-composition-nav-label-optional.md"
      ],
      "mcp_calls": "0 — no MCP GitHub calls (reads: two zero-quota issue-page payload fetches for objectui#11198 and objectui#11201; two single-card REST reads of PR objectui#11427 via gh api; the tools' own read-backs)",
      "api_writes": "3 REST writes, all through the fleet-write relay as objectstack-fleet[bot]: POST /repos/objectstack-ai/objectui/pulls (pr_create, draft; relay run 36953649848); POST /repos/objectstack-ai/objectui/issues/11427/assignees (label-write --assign os-elon-musk; relay run 36953813107, after one refused-then-resent attempt that wrote nothing); POST /repos/objectstack-ai/objectui/issues/11198/comments (this report, via post-stamped). Zero label writes. Plus 2 git pushes to the branch (not REST): the empty-branch probe and commit afc7603f.",
      "open_questions": [],
      "out_of_scope_findings": [
        "observation, not a filing class · skills/objectui/evals/app-composition.json eval id 3: its expected_output prose still lists 'a snake_case id, and a label' for the rewritten item; its must_contain tokens are objectName, type, id (no label) and the prompt's item already carries label Projects, so keeping it is the present-renders-as-authored half of the ruling · reach: none (grader prose, no runtime or gate reads it) · dedupe words: app-composition eval expected_output label Projects · carrier: none · noted in the PR's Acceptance notes, not filed"
      ]
    }

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    ✅ ACCEPT: PR #11427 at afc7603f — Tier H, awaiting an authorized APPROVED review

    Skills seat 1 (domain:skills#1), session_01FNKm1SmPpuJASnbjxWGtsJ (os-elon-musk), 2026-10-02T02:17Z. Checked against the PR's patch, objectui main (app.zod.ts, useNavTargetLabel.ts, the docs guide) and the head's check-runs, not against the report's narrative. Claim 5944024007 · report 5944250186 · contract review PASS on this head, rendered in-seat at CONTRACT_REVIEW_TIER on the PR.

    item reading
    PR shape draft, base main, Fixes #11198 first line, Clause-②: no at line start, 2 files (+7 / −2), assignee os-elon-musk, zero labels, 速读(草稿) five sections, session-URL footer, no model identifier
    scope the one 「Contract Reminders」 bullet; empty-frontmatter changeset; nothing else in the guide moved
    the text id required; label optional — absent ⇒ the target's current label at render time (objectui#9868); a label is written only for a deliberate nav-only name or a target with no label of its own (page, report, URL, group)
    premise re-verified on e0a9c676: NavigationItemObject re-imposes id by refinement for every type but the separator; label optional for all (empty string refused); useNavTargetLabel.ts / NavigationRenderer.tsx implement absent-inherits; lockfile pins @objectstack/spec@17.5.0; PR objectui#11186 merged first (a8198de2)
    budget +1 of +1: 62 → 63; bundle 4808 → 4809; no re-wrap
    gates skills-paths 89/90 (1 baselined), skill-examples (build 29 tasks + 60 self-test cases + gate) under the verify lock, eval-tokens, line-citation (0 new), control bytes, changeset presence / claims / no-major / overwrite, governed --test exit 3 GOVERNED; lint/ci rosters NOT MEASURED locally by their own filters; CI: 36 success, 3 skipped, 1 in progress, 0 failure
    writes mcp_calls 0; api_writes 3 (pr_create, assignee, report) + 2 git pushes; one pace refusal, nothing written

    Deviations accepted: base at e0a9c676 (no skills/ diff from cf38a6ce); the pace refusal and single re-send; pnpm install --config.engine-strict=false under the container's Node floor.

    Noted, not filed: skills/objectui/evals/app-composition.json eval 3's grader prose still lists 「a snake_case id, and a label」 for an item whose prompt carries label: "Projects" (present ⇒ rendered as authored; no runtime or gate reads it). Acceptance notes.

    Landing (Tier H, skills/**): the four-piece goes on the PR in this stroke — needs-user-decision, the final 维护者速读, review requested from os-zhuang and hotlong, assignee already set. After an APPROVED review by either and every check green on the landing head, the seat relays pr_ready + automerge_enable with --repo objectstack-ai/objectui, confirms MERGED, and Fixes closes this card.

  5. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed — skills seat 1, session_01FNKm1SmPpuJASnbjxWGtsJ (os-elon-musk), 2026-10-02T02:56Z.

    PR #11427 MERGED through the queue at 2026-10-02T02:35Z as 47e956de — Tier H: os-zhuang's APPROVED review (2026-10-02T02:20Z) and his own ready / auto-merge / enqueue, so the seat's landing stroke was not needed; in-seat contract review PASS 5944373809 and ACCEPT 5944378795 on afc7603f are the record. Confirmed on objectui origin/main by content: the 「Contract Reminders」 bullet of guides/app-composition.md reads 「label is optional — when absent, the entry shows its target's current label at render time (objectui#9868)」 (1 hit). Fixes #11198 closed this card; pm:dispatched, the assignee and the PR's needs-user-decision are stripped in this stroke.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedocumentationImprovements or additions to documentationdomain:skillspriority:p3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions