Skip to content

test(rest): the registrar-file list's length is pinned as toHaveLength(18) in seven test files — drop the seven length pins, the list is the authority #26433

Closed

Description

@objectstack-fleet

Filing gate: ③ maintainer-directed. Maintainer, 2026-10-27, in the director summon chat, to the seat's check-retirement sweep and its offer of three cards, verbatim: 「同意」 (the sweep was ordered by 「排查一下还有哪些检查应该退役」). Filed by the director seat (session_01KrKXQVvgYk2AJ4VkqMobyb, ledger objectstack#12708, sweep record 6433263738). ⛔ Not a claim. Batch-of: 11 (director seat, 2026-10-27). Dedupe: 600 newest open + closed issues grepped for the check's file name → 0 unless stated. Part of #26431. Reader: domain:server (packages/rest tests) and the dogfood owner for the one copy in packages/qa/dogfood.

Measured (origin/main e677770a): packages/rest/src/rest-server-registrar-files.ts:30 exports REST_SERVER_REGISTRAR_FILES (18 names) and its header says "⛔ Not a gate: nothing runs this list on its own, and a reader that imports it stays the authority". Seven readers nonetheless pin the list's length to the literal 18: ui-view-route-identity.measurement.test.ts:403, ui-view-route-tenancy.measurement.test.ts:1180, rest-server-canonical-query-ast.test.ts:428, rest-server-query-number-census.test.ts:358, meta-draft-read-door-census.test.ts:288 (also pins SITES 8), rest-server-docblock-position.test.ts:298, packages/qa/dogfood/test/authz-conformance.test.ts:1642. Moving one route module out of rest-server.ts reds all seven.

Wanted: delete the seven toHaveLength(18) assertions (and the SITES 8 pin) — each file keeps iterating the list it imports; where a test needs an anti-vacuity guard, expect(list.length).toBeGreaterThan(0). No other change. Acceptance: git grep -n "REGISTRAR_FILES).toHaveLength" → 0; the seven files pass. Size: XS. Clause-②: no. Metadata-protocol: none.

Activity

  1. added
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    domain:serverDomain lane — seat card indexed by label:pm:seat
    on Oct 27, 2026
  2. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: audit line · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-27T05:08Z

    ⛔ Not a claim, ⛔ not a dispatch. The filer's labels are read and kept; this is the triage line an execution seat needs before it claims.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 4 · card thread · 18.2.0 wave-2 split with server seat 1
    Session: session_0186vfjHHMsRXC9EUT9hTFMo (the seat); the card thread is session_01FEkQ5nSKhKswuL33xRZZ3g
    Account: os-project-manager (the seat's linked user; the card's assignee)
    Branch: claude/project-thread-wlrxgo (the card thread's harness-pinned branch; it names no issue, so this claim is the identity record)
    Worktree: the card thread's own container checkout
    Domain: domain:server
    Seat: domain:server#2
    Ruling-ref: maintainer-directed 「同意」 (the director's check-retirement sweep, 2026-10-27, record 6433263738) and triage 6434280762; Part of #26431
    File surface: six packages/rest/src/*.test.ts files the card names (the REST_SERVER_REGISTRAR_FILES length pins and meta-draft-read-door-census.test.ts's SITES 8 pin). skip-changeset. ⛔ Not packages/qa/dogfood/** (the seventh copy is domain:devx's; the seat files the child card)
    Container & model: XS, mode:thread, default model and effort (set at thread open)
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — tech-debt card, not a defect
    Thread-read: 6434280762
    Premise: holds (read 2026-10-27T05:42Z at origin/main 45de8c6cba: card open, unassigned, pm:queue with its triage line; the split with server seat 1 gives this card to seat 2); the dev re-measures it first, and a refutation is a premise_still_valid: false hand-back
    Resume-from: none — fresh from origin/main
    Serial constraints cleared: yes — the dev re-measures open PRs on the file surface before the first edit and before pr_create

    State: pm:queue → pm:dispatched, assigned to os-project-manager, in this act.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 26433,
    "status": "done",
    "branch": "claude/project-thread-wlrxgo",
    "pr": "#26518",
    "session": "session_01FEkQ5nSKhKswuL33xRZZ3g",
    "premise_still_valid": true,
    "summary": "Deleted the REST_SERVER_REGISTRAR_FILES toHaveLength(18) pin from the six packages/rest readers the card names, and meta-draft-read-door-census's SITES 8 pin (its first case's exact ledger equality already holds the sum). Only meta-draft's list case went vacuous on an empty list, so it alone gains expect(REST_SERVER_REGISTRAR_FILES.length).toBeGreaterThan(0). Prose the deletion made false (four case titles, header clauses that said a case pins the length) is corrected in place, with one closing [#26433] line per slice-history log. Head 83cff86, one commit, 22+/20-. Premise re-measured at base 45de8c6: the six pins sat where the card says; no open PR touched the six files at start or before pr_create.",
    "tests": "Head 83cff86 after the rest^... closure build (lock VERDICT exit 0). Six files: Test Files 6 passed (6), Tests 223 passed | 18 skipped. pnpm --filter @objectstack/rest test (local): Test Files 324 passed (324), Tests 6483 passed | 326 skipped. test:repo (holds the canonical-query-ast file): Test Files 5 passed (5), 280 passed | 18 skipped. typecheck (tsc + check:test-typecheck over tsconfig.test.json, which includes *.test.ts): exit 0. Acceptance grep git grep -n 'REGISTRAR_FILES).toHaveLength' -- packages/rest: no hit. Ablations, one per file, via scripts/ablation-replace.mjs on moved route modules (src/ read by text or relative import, no dist on the path): identity (delete enforceAuth call in ui-routes.ts) 1 case red; tenancy (delete enforceEnvironmentOwnership line) 11 cases red; canonical (where->filter in data-action-routes.ts) 1 red; query-number (bare Number(req.query.x) in search-routes.ts) 2 red; meta-draft (=== 'draft' in search-routes.ts) 1 red, the ledger-equality case, so SITES 8 was redundant; docblock (stacked TSDoc block in email-routes.ts) 1 red. Each: mutation landed anchor 1->0, restored blob == HEAD, git diff HEAD empty. First pass refused 5 of 6 legs before running (anchor inside its replacement); rerun recorded. Dry move (new zz-dry-move-routes.ts appended, length 19): base test files 6/6 red on toHaveLength(18); head 4 green, canonical + docblock red on their per-file floor tables (no row for the new module); head + the two floor rows: only docblock's toBe(70) floors sum reds. Empty list: 6/6 files red, meta-draft's list case on the new guard (line 291).",
    "gates": "dispatch-gates --commands --repo objectstack-ai/objectstack derived 49; all run, exit codes captured before any pipe; --ran: 49 accounted, 48 exit 0, 1 NOT MEASURED (pnpm check:dual-build-cjs-loads exit 3 PREREQUISITE NOT MET, needs every package's dist). Scoped lint: eslint packages/rest --no-inline-config exit 0. CI families: PR #26518 check-runs in_progress at report time, not re-run locally.",
    "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
    "mcp_calls": "8 — all reads: issue_read x4 (get 26433, get_comments 26433 x2, get 26431), search_pull_requests x1, list_pull_requests x2, pull_request_read get x1 (26518 read-back); no write tool",
    "api_writes": "3 — relay: pr_create (POST pulls, then its assignees leg POST issues/26518/assignees and labels leg POST issues/26518/labels, one dispatch), this os-dev-report comment (POST issues/26433/comments). git push is not counted.",
    "open_questions": [],
    "out_of_scope_findings": [
    "carrier: server seat 2 (child card, domain:devx) · packages/qa/dogfood/test/authz-conformance.test.ts:1646 on origin/main b7f2b0c pins expect(REST_SERVER_REGISTRAR_FILES).toHaveLength(18) (was :1642 before PR #26491 landed in that file) · noted, not filed",
    "carrier: #26436 · packages/rest/src/execctx-consumer-census.test.ts:848 pins expect(SITE_FILES).toHaveLength(18) with SITE_FILES = REST_SERVER_REGISTRAR_FILES (line 149); the card acceptance grep misses this alias spelling · noted, not filed",
    "carrier: #26431 · packages/rest/src/rest-server-docblock-position.test.ts:301 expect(MOVED_FILES.reduce(...)).toBe(70) is a hand sum of MOVED_FILE_FLOORS in the same file; it is the one red left in the dry move once a new module has its floor row; same transcription-pin family · noted, not filed",
    "carrier: whichever of the dogfood child card or #26436 removes the last length pin · packages/rest/src/rest-server-registrar-files.ts:23-25 header still says each reader pins the list length; outside this claim file surface · noted, not filed"
    ]
    }


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed

    2026-10-27T07:07Z · domain:server seat 2 · os-project-manager · session_0186vfjHHMsRXC9EUT9hTFMo. PR #26518 merged at 2026-10-27T07:06:56Z by the merge queue as 347adbdb3b on main (Fixes #26433, Part of #26431; ACCEPT 6435561939; Clause-②: no, so no contract review was owed). The merge closed this card as completed.

    Reading Probe Result
    Queue membership git ls-remote origin 'refs/heads/gh-readonly-queue/main/pr-26518-*' 0 refs (left the queue)
    origin/main by content (the acceptance grep) git grep -n "REGISTRAR_FILES).toHaveLength" origin/main -- packages/rest | wc -l 0
    Ancestry git merge-base --is-ancestor 347adbdb3b origin/main holds
    Card state GET /repos/objectstack-ai/objectstack/issues/26433 closed, completed

    Generated by Claude Code

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

Metadata

Metadata

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain:serverDomain lane — seat card indexed by label:pm:seatpm:dispatchedpriority:p2Medium: important, M3tech-debt

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions