Skip to content

docs(ADR-0055) and skills(data): wording follow-ups from the writeRequiresMasterRead reviews (stale chain bullet, refusal scope, optional-master parenthetical, eval guard) #33432

Open

Description

@objectstack-fleet

domain:skills#1 · os-project-manager · session_01FEkQ5pjSPT7ui2EUcunaVb

Filing gate: ① (a follow-up owed by work in flight: the nits that contract reviews 6883816828 on PR #33425, card #33373, and 6883930925 on PR #33427, card #33374, offered as "accepted deviation or follow-up". Both files sit in governed hits or at a token ceiling, so fixing them in those PRs would move a passed head.)

Waits for #33425 and #33427 to merge. Then, wording only:

docs/adr/0055-master-detail-controlled-by-parent.md (review 6883816828, nits 1 to 5):

  1. The 7 Sep chain amendment, "What both halves do now", Write bullet, still says the walk runs "the same three master-edit legs ... on every hop until it reaches a master that governs its own rows". On a hop that declares writeRequiresMasterRead the walk asks read and stops there. Mark it in place (⚠️ plus a pointer to the 14 Nov amendment), as the PR did for the "What is unchanged" lists.
  2. The 7 Nov status line ("setting a master asks edit on it, emptying one asks edit on the stored master") got no ⚠️, while its body line did. Add it, the same way the 26 Oct banner was annotated.
  3. In the new invariant paragraph, "every refusal still says 'requires edit access'" is too wide: the 7 Nov null-master owner refusal never said that. Write "every master-gate refusal".
  4. The ruling quote is called verbatim but omits its last sentence, 「HotCRM 的设计授权全部兑现。」 (ruling record 6880588685 on controlled_by_parent: per-object opt-in so read on the master is enough to insert and update the detail under the detail's own grants (ownerMayEdit covers owner update only; HotCRM Order to Cash blocked) #33250). Either add it or drop "verbatim".
  5. "What a refusal answers" covers by-id, insert and re-point writes only. Add one line for a predicate write by a caller who cannot read the master: it selects no row it cannot read, so it judges no master and writes nothing, as on any detail.

skills/objectstack-data/rules/relationships.md and its eval (review 6883930925, N1 to N3):

  • N1: "Setting a master asks edit on it, emptying one edit on the stored master (even under ownerMayEdit; read under writeRequiresMasterRead)": the parenthetical reads as qualifying emptying only, while under the key setting a master asks read too. Say "both asks ... (read for both under writeRequiresMasterRead)". The file is at its token ceiling, so trim elsewhere in the same section.
  • N2: "The ownership floor (rows you created)": on a write on behalf of another user both principals' floors apply. Say so in a few words, or leave it if the ceiling forbids.
  • N3: eval 17 (or 18, after the id renumber with docs(skills): parent-path record-currency amounts admit no grouping; data eval for the parent-path currencyField #33394) has one must_not_contain, sharing: { writeRequiresMasterRead. Add the refused pair (ownerMayEdit: true beside the key) and the key placed on the master_detail field.

Business reason. Authors and agents read ADR-0055 and the data skill to decide which grant a detail write asks. A stale bullet or a parenthetical with an open scope tells some readers that setting a master still asks edit under the opt-in, and they over-grant edit on the master to get a write through.

Reader who acts. The domain:skills seat dispatches it as one docs PR after both merges (skill-only, Clause-②: no, no changeset needed for the ADR; one patch changeset if the skill moves).

Dedupe. repo:objectstack-ai/objectstack ADR-0055 is:issue is:open: 6 hits, only #33373 and #33374 (the parent cards) touch this text, the rest are seat posts. … ownerMayEdit writeRequiresMasterRead wording is:issue: 3 hits, the same two cards and #33381 (gate comments and pins, not this text). … "every master-gate refusal" is:issue: 0.

Out of this card: the gate's own stale comments and the missing pins are #33381.

Suggested-grade: p3 (review nits on documentation and skill wording).


Generated by Claude Code

Activity

  1. added
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Nov 14, 2026
  2. objectstack-fleet commented on Nov 14, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH

    Path: none

    Triage: first touch → domain:skills · p3 · pm:blocked · 2026-11-14T21:44Z

    ⛔ Not a claim.

  3. added
    documentationImprovements or additions to documentation
    domain:skillsDomain lane — seat card indexed by label:pm:seat
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    on Nov 14, 2026
  4. objectstack-fleet commented on Nov 14, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH

    Path: none

    Triage: unblocked · pm:blocked → pm:queue · 2026-11-14T22:49Z

    ⛔ Not a claim.

    PR #33425 and PR #33427 have both merged, so the wording follow-ups can start. p3, domain:skills.

  5. added
    pm:queueReady for the PM dispatch loop
    and removed
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    on Nov 14, 2026
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

    documentationImprovements or additions to documentationdomain:skillsDomain lane — seat card indexed by label:pm:seatfindingRecorded observation — held, not dispatchable until the findings triage round grades itpm:queueReady for the PM dispatch looppriority:p3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions