Skip to content

[finding] docs/adr/0055 item 5 states a recordId → filters → viewName precedence within type:'object' that the spec's objectNavTargetExclusivity refuses — amend, annotate, or leave is a maintainer's call on a decision record #9223

Closed

Description

@claude

Filed by the skills seat (session session_01MCLBsUgfykL74aU716rzVK, GitHub os-sales) at 2026-09-12T01:16Z as the sibling of objectui#9059 (whose PR corrects only the published skill line; an ADR is a decision record and is deliberately outside that PR). ⛔ Not graded; ⛔ no domain:*; ⛔ no priority — the triage seat routes, and the maintainer's pending answer on whether ADR text belongs to the spec seat decides the lane.

The site

docs/adr/0055-parameterized-bare-data-surface.md line 52 on b775500af: 「Precedence within type:'object': recordId → filters → viewName.」

@objectstack/spec's objectNavTargetExclusivity (17.4.0, verified on the installed tarball by objectui#9059's filer) refuses filters combined with recordId or viewName, and runAction with recordId; recordId + viewName is tolerated. Since objectui#8563, NavigationItemSchema.safeParse refuses the taught shape in this repo too. So the ADR's item 5 records a precedence no implementation applies and the spec rejects.

The options (⛔ not decided here)

  1. Amend item 5 in place to the exclusivity rule (the ADR then matches the spec).
  2. Leave item 5 and add a dated amendment note under it recording that the spec superseded the precedence.
  3. Leave it as history.

Governing text: objectstack AGENTS.md Prime Directive #13 (an accepted ADR binds until a superseding ADR says otherwise; reversing a recorded decision is itself a decision) and the maintainer's base adjudication principle (protocol first — objectstack#17389). The correction direction is spec-first either way; what is asked is the FORM of the record's correction.

Refs: objectui#9059 (the skill line) · objectui#8563 (the schema-side refusal) · objectstack#17389.


Generated by Claude Code

Activity

  1. os-tesla commented on Sep 13, 2026

    @os-tesla
    Collaborator

    Ruling recorded — 2: ADR-0055 item 5 keeps its text and gains a dated amendment note recording that objectNavTargetExclusivity (spec 17.4.0, objectui#8563) superseded the precedence (director seat class-one adjudication, 2026-09-13)

    Class-one self-adjudication by the summoned director seat (SKILL.md:400-403), recorded for the maintainer's 追认表; overturned rows execute the new ruling. Applied per the maintainer's calibration of 2026-09-13 (「你是项目总监,9306 这种为什么你不直接决策呢?」).

    ① Authority. Prime Directive #13 (an accepted ADR binds until superseded; reversing a recorded decision is itself a decision) plus the maintainer's protocol-first principle (objectstack#17389): the protocol has decided, so the record notes the supersession — the ADR convention (an amendment / "superseded by" note), the only form that keeps both the history and the binding text honest. Option 1 rewrites history; option 3 leaves a binding false rule in force.
    ② Failure direction. A documentation note, one revert away.
    ③ Floors. None moved: the ADR's decision is not rewritten, the spec already supersedes it, no contract changes.

    What is ruled

    Under item 5 of docs/adr/0055-parameterized-bare-data-surface.md, a dated note: 「Amended 2026-09-13: superseded by @objectstack/spec's objectNavTargetExclusivity (17.4.0; objectui#8563 chains it on NavigationItemSchema): filters is refused with recordId or viewName, runAction with recordId; recordId + viewName is tolerated. The precedence above no longer applies.」 The skill line is already corrected by objectui#9059's PR.

    This is also recorded as the general rule for every "ADR item superseded by the protocol" case — objectstack#17748 item 4 carries the charter wording.

    State

    needs-user-decision → pm:queue; domain:skills / priority:p2 kept (governed surface docs/adr/**, hand-merged by the maintainer).


    Generated by Claude Code

  2. claude commented on Sep 13, 2026

    @claude
    ContributorAuthor

    Claim: PM loop round 1
    Session: session_01DAcomhvR9kKizeYgg89Vo8 (GitHub os-project-manager, skills seat), claimed at 2026-09-13T08:20Z
    Branch: claude/issue-9223-adr-0055-item-5-amendment
    Worktree: objectui-issue-9223
    Domain: domain:skills (governed docs/adr/**; graded p2 Bug by triage 5651189889; ruled by the director seat, class-one, option 2)
    Ruling-ref: 5651818470
    File surface: docs/adr/0055-parameterized-bare-data-surface.md only — item 5 keeps its text byte-for-byte; a dated amendment note lands directly under it carrying the ruling's wording (superseded by @objectstack/spec's objectNavTargetExclusivity, 17.4.0, objectui#8563 chains it on NavigationItemSchema; filters refused with recordId or viewName, runAction with recordId; recordId + viewName tolerated; the precedence no longer applies). Plus the changeset declaration this repository's gate wants for a docs-only change (the shape PR #9374 used: .changeset/9223-adr-0055-item-5-amendment.md). ⛔ Nothing else: the skill line is already corrected by objectui#9059's PR.
    Container & model: S, mode:subagent, model: opus (default tier — docs/adr/** carries no path mandate); seat review at the contract-review tier; governed ⇒ draft PR at the human terminal with the four-piece, ⛔ never flipped ready by the seat
    Clause-②: no
    Thread-read: 5651818470 (the director's ruling, 2026-09-13T07:00Z — the newest comment at this claim)
    Serial constraints cleared: no open objectui PR touches docs/adr/0055-parameterized-bare-data-surface.md (22 open-PR file lists read at 2026-09-13T08:16Z); H17 index ∩ this face = ∅; origin/main 69aa9c01 still carries the precedence sentence at :52 and no amendment note under item 5 (measured 2026-09-13T08:16Z).


    Generated by Claude Code

  3. claude commented on Sep 13, 2026

    @claude
    ContributorAuthor

    os-dev-report

    {
      "issue": 9223,
      "status": "done",
      "branch": "claude/issue-9223-adr-0055-item-5-amendment",
      "pr": "https://github.com/objectstack-ai/objectui/pull/9377",
      "premise_still_valid": true,
      "summary": "Implements the director-seat ruling 5651818470 (class-one, option 2) on objectui#9223: item 5 of docs/adr/0055-parameterized-bare-data-surface.md keeps its text byte-for-byte and gains a dated amendment note recording that @objectstack/spec's objectNavTargetExclusivity (17.4.0; objectui#8563 chains it on NavigationItemSchema) superseded the recordId → filters → viewName precedence. The diff is two paths and 14 insertions with 0 deletions: the ADR (+6) and an empty-frontmatter changeset (+8) declaring no release. Every fact the note asserts was re-measured on origin/main 69aa9c01 before it was written — the named import, the chain site, the spec version in the lockfile, and the refusal/tolerance matrix in the pin test. Draft PR #9377 is parked at the human terminal per the governed-surface rule for docs/adr/**.",
      "tests": "Gates run in the worktree, each exit code captured from the command with output redirected to a file first, never through a pipe. GREEN (exit 0): check-doc-links.mjs ('Links are valid across 17 scan roots.'); check-doc-fence-languages.mjs; check-control-bytes.mjs (7539 tracked text files); check-changeset-presence.mjs; check-changeset-no-major.mjs; check-changeset-fixed.mjs; check-changeset-overwrite.mjs; check-changeset-claims.mjs (report-only); check-new-cross-file-line-citations.mjs (report-only, 0 new citations); check-upstream-port-parity.mjs. MAIN'S RED, NOT MINE (exit 1): check-doc-snippet-types.mjs. It first exited 2 = PRECONDITION NOT MET (read as NOT MEASURED, not red); after the scoped build it names (turbo run build with its own --build-filter, 35 tasks, run through the container's shared verify lock, VERDICT command-exit 0) it exits 1 with three TS2740 sites: content/docs/guide/schema-rendering.md:99:29, :434:29, packages/react/README.md:73:29. CONTROL: a detached worktree at clean origin/main 69aa9c01 was installed, built through the same filter and run through the same gate — exit 1, same three sites, same '649 of 649 block(s) judged, 3 failed'; path-normalized, the control's output and the branch's are BYTE-IDENTICAL. That is main's red since edea22a5 (objectui#9346); none of the three files is touched here. Structural non-impact: the gate judges fenced ts/tsx blocks and the ADR holds 0 code fences before and 0 after. Control worktree removed after the reading. Acceptance greps on the ADR, before (origin/main) → after: 'Amended 2026-09-13' 0 → 1; 'objectNavTargetExclusivity' 0 → 1; 'Precedence within' 1 → 1 (item 5 unchanged); 'resolveHref' 3 → 3 (unchanged). No ablation applies: this change adds no guard and no test.",
      "mcp_calls": "0 — every GitHub read and write went through repo-scoped REST with curl; no MCP GitHub tool was called",
      "gates": {
        "check-doc-links": 0,
        "check-doc-fence-languages": 0,
        "check-control-bytes": 0,
        "check-changeset-presence": 0,
        "check-changeset-no-major": 0,
        "check-changeset-fixed": 0,
        "check-changeset-overwrite": 0,
        "check-changeset-claims": 0,
        "check-new-cross-file-line-citations": 0,
        "check-upstream-port-parity": 0,
        "check-doc-snippet-types": 1,
        "check-doc-snippet-types_verdict": "main's own red, reproduced byte-identically on a clean origin/main control worktree (objectui#9346); not caused by this diff",
        "ci_status_at_report_time": "in_progress — CI convergence is the PM's read, not waited on here"
      },
      "files_changed": [
        "docs/adr/0055-parameterized-bare-data-surface.md (+6 -0)",
        ".changeset/9223-adr-0055-item-5-amendment.md (+8 -0, empty frontmatter, declares no release)"
      ],
      "premise_checks": {
        "P1_adr_content": "HOLDS — 87 lines on origin/main 69aa9c01; item 5 runs from NavigationItem.filters to the app-composition-guide reference; the precedence sentence is verbatim at :52; no amendment note existed under it (grep -i amend hit only the :6 Amends header)",
        "P2_superseding_fact": "HOLDS — objectNavTargetExclusivity is imported by name from @objectstack/spec/ui in packages/types/src/__tests__/nav-target-exclusivity-8563.test.ts:45 and called at packages/types/src/zod/app.zod.ts:188 inside the item.type === 'object' arm of NavigationItemSchema; .changeset/8563-nav-target-exclusivity-chained.md says so in the same words; the refusal/tolerance matrix is pinned in that test file and restated in the comment beside the chain site",
        "P2_spec_version": "HOLDS — packages/types/package.json declares @objectstack/spec ^17.4.0 and pnpm-lock.yaml resolves every importer to 17.4.0",
        "P3_convention": "FALSIFIED IN THE DIRECTION THE DISPATCH ANTICIPATED — the ADR corpus has NO dated in-item amendment-note form. git grep over docs/adr returns only header-level metadata rows (0053:6 Supersedes, 0055:6 Amends, 0058:6 Supersedes) plus one prose use of 'supersedes' at 0001:252. No file was copied; this note is the corpus's first instance and follows the ruling's wording",
        "P4_skill_line": "HOLDS, MERGED — objectui#9059 was closed as completed 2026-09-12T06:24:39Z by PR #9227, merged 2026-09-12T06:24:38Z; skills/objectui/guides/app-composition.md:35-36 now teaches the exclusivity by name. 'already corrected' is written in the PR body. Nothing in skills/** is touched here",
        "P5_serial": "HOLDS — 22 open pull requests, the newest created 2026-09-13T07:58:09Z, i.e. all at or before the dispatch's 08:16Z reading; no PR opened after it and none touches this ADR",
        "identity": "HOLDS — the newest comment on objectui#9223 is the PM claim 5652181028, which names this branch and worktree"
      },
      "deviations": [
        "resolveHref control measured 3 → 3, not the dispatch's predicted 1 → 1. The file carries three occurrences (the Consumers header row, item 5, and the rejected-alternatives section). The direction the control tests — unchanged — holds; the predicted cardinal did not, and the measured one is what the PR body reports.",
        "The changeset is NOT owed by the gate, measured both ways. With the ADR edit alone in the tree, check-changeset-presence.mjs exits 0 with 'No source or published contract of a released package changed in this range, so no changeset is owed' — its guarded population is PKG/src/** (PKG = each package in the fixed group) of the fixed group, and docs/adr/** is in none of it. The file is added anyway because Zone 1 and the public claim comment both name it in this change's file surface; it is the empty-frontmatter 'declare once, no release' shape AGENTS.md treats as a first-class pass and PR #9374 used. It cannot move a version: the frontmatter lists no package. Reported rather than silently dropped or silently added.",
        "Register adjustment inside the ruled wording: the lead marker is bolded as '**Amended 2026-09-13:**' to match the file's own bold lead-ins. Zone 1 permits punctuation/register adjustment; no fact, number, name or clause was altered.",
        "PR body footer. At creation the session-URL footer stored byte-for-byte. On the first UPDATE the platform APPENDED its own bare footer, leaving two. Settled at the fixpoint in one corrective patch rather than a re-posting loop: the body now ends with the platform's bare footer (one only) and carries the durable session attribution as body prose one line above it. Verified by read-back: stored body is byte-identical to sent except a trailing newline the platform adds.",
        "A second, detached worktree at origin/main was created solely to produce the doc-snippet control reading, and removed (node_modules deleted first, git worktree remove exit 0) once the comparison was taken. No branch was created for it and nothing was edited in it.",
        "No label was applied. Clause-② is 'no' per the claim, so no needs:contract-review; skip-changeset is never applied in this repository. The 'documentation' label on the PR was placed by the repository's own labeler, not by this seat."
      ],
      "open_questions": [],
      "out_of_scope_findings": [
        "noted, not filed: packages/app-shell/src/views/metadata-admin/inspectors/nav-target.ts:10 still describes 'recordId → filters → viewName → bare default' as resolveHref's precedence. Checked and deliberately NOT filed under any of the three filing classes: it is a READ-side derivation over an already-valid item, the inspector clears the sibling target fields when the mode changes so it cannot emit a refused combination, and recordId + viewName is a pair the spec TOLERATES — so a precedence to resolve that pair is exactly what that layer still needs. It does not lead an author to write metadata the runtime refuses. Carrier: none needed; nothing is owed."
      ]
    }
    

    Generated by Claude Code

  4. claude commented on Sep 13, 2026

    @claude
    ContributorAuthor

    ACCEPT — skills seat (session session_01DAcomhvR9kKizeYgg89Vo8, GitHub os-project-manager), contract-review tier, read on objectui PR #9377 head 39e2851a at 2026-09-13T08:38Z (report 5652246903 read after the head).

    Scope against the claim (5652181028): the ADR only plus the changeset — docs/adr/0055-parameterized-bare-data-surface.md +6 (item 5 byte-for-byte, the ruled note under it, 87 → 93 lines) and .changeset/9223-adr-0055-item-5-amendment.md +8 (empty frontmatter, no release). Nothing in skills/** (objectui#9059 → PR #9227 already MERGED). Ruling-ref 5651818470 executed as written (option 2), with the lead marker bolded to the file's register.

    Read on the head, not the report: Amended 2026-09-13 0 → 1; objectNavTargetExclusivity 0 → 1; objectui#8563 0 → 1; 17.4.0 0 → 1; controls Precedence within 1 → 1 and resolveHref 3 → 3 (the dispatch's predicted 1 → 1 was wrong on the cardinal, the dev measured it — a seat correction, not a dev deviation); the import at packages/types/src/__tests__/nav-target-exclusivity-8563.test.ts :45 on origin/main; control-character scan clean; single commit; Fixes #9223 once; one footer with the session attribution in prose; ## 维护者速读(草稿) present; merge-base = origin/main 69aa9c01. Dev gates: 10 exit 0 (doc links, fence languages, control bytes, the five changeset gates, cross-file citations, upstream-port parity); check-doc-snippet-types exit 1 = main's own red reproduced byte-identically on a clean origin/main control worktree (objectui#9346) — matched by this seat against the CI job signature (note 5652245096 on the PR). Premise checks all HOLD; P3 falsified in the anticipated direction (no prior in-item amendment form in the corpus — this is the first instance and the general rule per #17748 item 4). CI on 39e2851a at review time: 26 success / 3 skipped / 4 test shards running / the one main red.

    Contract review of record: PASS, comment 5652256813 on the PR (head 39e2851a).

    Out-of-scope note (carrier as the dev judged): packages/app-shell/src/views/metadata-admin/inspectors/nav-target.ts :10 names the old precedence for a read-side derivation over a pair the spec tolerates — not a filing class, no card.

    Governed ⇒ human terminal: needs-user-decision on PR #9377 (read back), 速读终稿 5652256943 posted there, reviews requested from os-zhuang and hotlong (read back). ⛔ Not flipped ready, queued or approved by this seat. The card stays pm:dispatched + assigned until MERGED.


    Generated by Claude Code

  5. claude commented on Sep 13, 2026

    @claude
    ContributorAuthor

    LANDED — skills seat (session session_01DAcomhvR9kKizeYgg89Vo8), 2026-09-13T13:34Z. objectui PR #9377 merged through the merge queue at 2026-09-13T13:34Z as dfb58505 (merged_by os-zhuang; ruling C: os-zhuang's approval 5190797130 on head 9afd58f8 at 13:15Z was the authorization; the maintainer flipped ready and enqueued, the seat did the four readings, cleared the label and armed auto-merge — 5653516087). Two readings at 2026-09-13T13:34Z: the queue ref gh-readonly-queue/main/pr-9377-* is gone, and objectui origin/main carries the content — git log origin/main --oneline -60 has (#9377) 1 with control (#9374) 1. Card closed by the PR's Fixes line; pm:dispatched residue and the assignee stripped in this pass and read back. Contract review of record 5652256813 (head 39e2851a), re-issued as 5653416249 for 9afd58f8 after this seat's base merge (12:57Z) cleared the main-inherited Doc Snippet Type Check red — content unchanged across the two heads; 速读 5652256943; ACCEPT 5652259816. ADR-0055 now carries the dated item-5 amendment note (option 2 of ruling 5651818470).


    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

No one assigned

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions