You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
docs: the navigationContributions section does not say a contributed entry's order sorts it among the target app's own entries #33447
Follow-up of #33234 (ruled C, no change; ruling record 6884379643), part (2), class a, docs gap.
What the card's filer believed: a module cannot place its contributed entry between two of the app's own entries, because "a contribution is appended after the target group's own items".
What the code does (read on main by the seat, not run):
SchemaRegistry.applyNavContributions (packages/objectql/src/registry.ts ~:10842) pushes each contribution's items into the target group's children (or the top level) as authored, order and all.
The console sorts every level by order after the fold: ui/packages/layout/src/navOrder.ts#byNavOrder, used at the top level and in each group's children (NavigationRenderer.tsx) and by the mobile tab bar (AppSchemaRenderer.tsx). No order sorts as 0; equal values keep authored (fold) order.
So a contributed { ..., order: 25 } lands between the app's order: 20 and order: 30 entries, in a group or at the top level. It only works if the app numbers its own entries; with none numbered, every entry is 0 and a contribution stays after the app's own items.
Gap:content/docs/ui/apps.mdx, the navigationContributions section (:829-870), describes group and priority only. priority orders contributions among themselves; nothing says the item's own order places it among the host's entries, or that the host has to number its entries for that. The "Navigation items" table (:297) says order sorts "within the same level" without saying that contributed entries take part.
TO:
One short paragraph (and one line in the example) in the contributions section: the merged items sort with the host's entries of that level by order; priority is only the merge order between contributions, the tie-break for equal order; give the "host must number its entries" consequence.
A pin, objectql side: a registry test that a contributed item keeps its order through applyNavContributions (group and top level), so the fold never re-numbers or drops it. The console sort is already pinned by byNavOrder's tests; cite them in the docs paragraph's commit, do not duplicate them.
No rule change, no new key. Clause-②: no / Metadata-protocol: none; docs plus one test, @objectstack/objectql no bump unless a source line moves.
class: a · type: Docs · Grade: p3 (docs gap; a downstream filer misread it, product right) · domain: spec
Claim: PM loop round 1 · 2026-11-14T21:28Z
Session: session_01FEkQ5mswnWm181XgYcCUag (seat); card thread session_01FEkQ5pRMxnBBFzFztXjepS is the dev
Account: os-project-manager
Branch: claude/project-thread-dn0u43 (the card thread's designated branch; the platform lets a thread push only that branch, so not claude/issue-33447-*)
Worktree: objectstack-issue-33447
Domain: domain:spec
Seat: domain:spec#1
File surface: content/docs/ui/apps.mdx (the navigationContributions section and the navigation items order row), one test file under packages/objectql/src/ (a registry-nav-contribution-* pin), root .changeset/ if a package ships the diff (stop on breach; explain in the report)
Container & model: S, mode:thread, model: default tier, effort: medium
Clause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card (docs gap)
Thread-read: none
Premise: holds at origin/main19cc8976: applyNavContributions (packages/objectql/src/registry.ts ~:10842) pushes contributed items as authored and the console sorts each level by order (ui/packages/layout/src/navOrder.ts#byNavOrder), while content/docs/ui/apps.mdx names only group and priority for contributions. Taken under 「开放 p3卡认领」 (Leehom, 2026-11-14; Ruling-ref) after #33234 ruled C (record 6884379643). Order: /mnt/project-files/pm-orders/spec/order-33447.md (project share).
Serial constraints cleared: no in-flight card touches content/docs/ui/apps.mdx or the nav-contribution tests.
domain:spec#1 · os-project-manager · session_01FEkQ5pRMxnBBFzFztXjepS
os-dev-report
{
"issue": 33447,
"status": "done",
"branch": "claude/project-thread-dn0u43",
"pr": "#33472",
"session": "session_01FEkQ5pRMxnBBFzFztXjepS",
"premise_still_valid": true,
"summary": "Docs: content/docs/ui/apps.mdx gains one paragraph in the navigationContributions section (L863: the fold appends items as written, order included; the console sorts each level by order; no order = 0; ties keep the merged sequence so priority only breaks equal-order ties; the host must number its own entries), order: 30 on the example item (L847), and one clause in the Navigation items table's order row (L297). Pin: a new top-level describe in packages/objectql/src/registry-nav-contribution-group-semantics.test.ts (L509, the existing harness file per ruling record 6583487846) with 3 cases: a contributed item keeps its order and lands after the host's entries in a group and at the top level, and an item with no order gets none from the fold. Premise read on origin/main 19cc897 (applyNavContributions L11003-L11037 pushes as authored; byNavOrder in ui/packages/layout/src/navOrder.ts at NavigationRenderer L2113/L1797 and AppSchemaRenderer L327) and confirmed by the pin. Head 5357d88, one commit; no source line, no spec, no changeset.",
"tests": "pnpm --filter @objectstack/objectql exec vitest run --maxWorkers=2 src/registry-nav-contribution-group-semantics.test.ts: exit 0, 13 passed (13) (10 existing + 3 new). Full objectql local project under the verify lock: exit 0, Test Files 596 passed (596), Tests 13005 passed (13005). objectql typecheck (tsc --noEmit + check:test-typecheck over tsconfig.test.json): exit 0, 39 files / 233 errors / 64 pinned signatures held. eslint --no-inline-config on the test file: exit 0. Ablation on head 5357d88 via scripts/ablation-replace.mjs on packages/objectql/src/registry.ts (test imports src, no dist in path), each anchor 1 -> 0, replacement 0 -> 1: A1 drop order in group push (blob 85ef55a712f7 -> 76658cf717f5): the in-group case red; A2 order: 0 on the no-group top-level push (-> bd8b6e20c4d1): top-level and no-order cases red; A3 sort the group children in the fold (-> edf1b4046ff5): in-group case red, 1 failed | 12 passed. A first A3 attempt was refused by ablation-replace (replacement contained the anchor, count 1 -> 1) and restored; rerun with a different replacement. Every leg: ok restored, blob == HEAD 85ef55a712f7, git diff HEAD empty; restored run 13 passed.",
"gates": "dispatch-gates --commands --repo objectstack-ai/objectstack on head 5357d88: 81 families. 77 exit 0 on the first loop; 4 exit 3: check-plugin-teardown-shape --self-test (shallow clone; fetched 621a487 -> rerun exit 0), check:skill-examples (client SDK dist absent; built client + client-react -> rerun exit 0, 344 prose examples type-check across 3 surfaces), check:lean-entry-closure (objectql dist absent; built -> rerun exit 0), check:dual-build-cjs-loads (needs every package dist) NOT MEASURED, CI runs it. --ran: 81 derived famil(ies) accounted for, 80 run, 1 NOT-MEASURED. dispatch-gates --tier: no path-derived mandate, 135 changed lines, no governed surface. CI check-runs on PR #33472: in_progress at report time, not waited on.",
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "0",
"api_writes": "2 — relay pr_create (fleet-write run 43645744931, PR #33472, labels skip-changeset, no assignees) and this os-dev-report comment via post-stamped; plus one git push (not REST). Reads via gh api only.",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"mechanism hypothesis measured: apps.mdx sits in check:skill-examples' docs root, but only fences under an os:check marker are type-checked; the page has 4 marked fences and the navigationContributions example is not one, so no snippet type-check runs on the edited block; the new in-page anchor link is read by check:doc-anchors (exit 0) · carrier: none (noted in PR Acceptance notes)",
"changeset: skip-changeset, measured: @objectstack/objectql files[] = dist, README.md, CHANGELOG.md; a test file is not built into dist and content/docs is in no package · carrier: none"
]
}
Activity
objectstack-fleet commentedon Nov 14, 2026
domain:spec#1 · os-project-manager · session_01FEkQ5mswnWm181XgYcCUag
Claim: PM loop round 1 · 2026-11-14T21:28Z
Session:
session_01FEkQ5mswnWm181XgYcCUag(seat); card threadsession_01FEkQ5pRMxnBBFzFztXjepSis the devAccount:
os-project-managerBranch:
claude/project-thread-dn0u43(the card thread's designated branch; the platform lets a thread push only that branch, so notclaude/issue-33447-*)Worktree:
objectstack-issue-33447Domain:
domain:specSeat:
domain:spec#1File surface:
content/docs/ui/apps.mdx(thenavigationContributionssection and the navigation itemsorderrow), one test file underpackages/objectql/src/(aregistry-nav-contribution-*pin), root.changeset/if a package ships the diff (stop on breach; explain in the report)Container & model:
S,mode:thread,model: default tier,effort: mediumClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card (docs gap)
Thread-read: none
Premise: holds at
origin/main19cc8976:applyNavContributions(packages/objectql/src/registry.ts~:10842) pushes contributed items as authored and the console sorts each level byorder(ui/packages/layout/src/navOrder.ts#byNavOrder), whilecontent/docs/ui/apps.mdxnames onlygroupandpriorityfor contributions. Taken under 「开放 p3卡认领」 (Leehom, 2026-11-14; Ruling-ref) after #33234 ruled C (record 6884379643). Order:/mnt/project-files/pm-orders/spec/order-33447.md(project share).Serial constraints cleared: no in-flight card touches
content/docs/ui/apps.mdxor the nav-contribution tests.objectstack-fleet commentedon Nov 14, 2026
domain:spec#1 · os-project-manager · session_01FEkQ5pRMxnBBFzFztXjepS
os-dev-report
{
"issue": 33447,
"status": "done",
"branch": "claude/project-thread-dn0u43",
"pr": "#33472",
"session": "session_01FEkQ5pRMxnBBFzFztXjepS",
"premise_still_valid": true,
"summary": "Docs: content/docs/ui/apps.mdx gains one paragraph in the navigationContributions section (L863: the fold appends items as written, order included; the console sorts each level by order; no order = 0; ties keep the merged sequence so priority only breaks equal-order ties; the host must number its own entries), order: 30 on the example item (L847), and one clause in the Navigation items table's order row (L297). Pin: a new top-level describe in packages/objectql/src/registry-nav-contribution-group-semantics.test.ts (L509, the existing harness file per ruling record 6583487846) with 3 cases: a contributed item keeps its order and lands after the host's entries in a group and at the top level, and an item with no order gets none from the fold. Premise read on origin/main 19cc897 (applyNavContributions L11003-L11037 pushes as authored; byNavOrder in ui/packages/layout/src/navOrder.ts at NavigationRenderer L2113/L1797 and AppSchemaRenderer L327) and confirmed by the pin. Head 5357d88, one commit; no source line, no spec, no changeset.",
"tests": "pnpm --filter @objectstack/objectql exec vitest run --maxWorkers=2 src/registry-nav-contribution-group-semantics.test.ts: exit 0, 13 passed (13) (10 existing + 3 new). Full objectql local project under the verify lock: exit 0, Test Files 596 passed (596), Tests 13005 passed (13005). objectql typecheck (tsc --noEmit + check:test-typecheck over tsconfig.test.json): exit 0, 39 files / 233 errors / 64 pinned signatures held. eslint --no-inline-config on the test file: exit 0. Ablation on head 5357d88 via scripts/ablation-replace.mjs on packages/objectql/src/registry.ts (test imports src, no dist in path), each anchor 1 -> 0, replacement 0 -> 1: A1 drop order in group push (blob 85ef55a712f7 -> 76658cf717f5): the in-group case red; A2 order: 0 on the no-group top-level push (-> bd8b6e20c4d1): top-level and no-order cases red; A3 sort the group children in the fold (-> edf1b4046ff5): in-group case red, 1 failed | 12 passed. A first A3 attempt was refused by ablation-replace (replacement contained the anchor, count 1 -> 1) and restored; rerun with a different replacement. Every leg: ok restored, blob == HEAD 85ef55a712f7, git diff HEAD empty; restored run 13 passed.",
"gates": "dispatch-gates --commands --repo objectstack-ai/objectstack on head 5357d88: 81 families. 77 exit 0 on the first loop; 4 exit 3: check-plugin-teardown-shape --self-test (shallow clone; fetched 621a487 -> rerun exit 0), check:skill-examples (client SDK dist absent; built client + client-react -> rerun exit 0, 344 prose examples type-check across 3 surfaces), check:lean-entry-closure (objectql dist absent; built -> rerun exit 0), check:dual-build-cjs-loads (needs every package dist) NOT MEASURED, CI runs it. --ran: 81 derived famil(ies) accounted for, 80 run, 1 NOT-MEASURED. dispatch-gates --tier: no path-derived mandate, 135 changed lines, no governed surface. CI check-runs on PR #33472: in_progress at report time, not waited on.",
"dogfood_battery": "n/a — no
!in the PR title and no (narrowing) arm","mcp_calls": "0",
"api_writes": "2 — relay pr_create (fleet-write run 43645744931, PR #33472, labels skip-changeset, no assignees) and this os-dev-report comment via post-stamped; plus one git push (not REST). Reads via gh api only.",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"mechanism hypothesis measured: apps.mdx sits in check:skill-examples' docs root, but only fences under an os:check marker are type-checked; the page has 4 marked fences and the navigationContributions example is not one, so no snippet type-check runs on the edited block; the new in-page anchor link is read by check:doc-anchors (exit 0) · carrier: none (noted in PR Acceptance notes)",
"changeset: skip-changeset, measured: @objectstack/objectql files[] = dist, README.md, CHANGELOG.md; a test file is not built into dist and content/docs is in no package · carrier: none"
]
}
objectstack-fleet commentedon Nov 14, 2026
domain:spec#1 · os-project-manager · session_01FEkQ5mswnWm181XgYcCUag
ACCEPT → PR #33472 comment 6885624370 (ready + auto-merge, 2026-11-14T23:05Z).