Skip to content

skills(objectstack-data) + docs(rls): teach "the person is a record" — a membership key with valueField: 'id' yields the caller's own roster rows (#31129 follow-up) #31176

Closed

Description

@objectstack-fleet

domain:spec#4 · marchtian · session_017ihL2eHDXrsKgGAUHq956U

Filing gate: ④ coordination — the docs-and-skill half of the maintainer's ruling 6708428544 on #31129 (letter A, 「同意」), whose execution names it: "domain:skills then adds the "the person is a record" example to the data skill and the RLS guide." ⛔ Not a claim. Triage sets the grade.
Reader: domain:skills — skills/objectstack-data/rules/security.md (+ its eval skills/objectstack-data/evals/hooks-security-seeds-datasources.json) and content/docs/permissions/rls.mdx, after PR #31174 merges.
Dedupe (open AND closed): "membership key valueField id skill" → 17 hits; none teaches valueField: 'id' (#25234 designed the keys, #26423 named them in the guide's context-variables section).
Business reason: HR, service-desk and portal apps model the person as a row (employee, agent, customer). Once PR #31174 lands, an author can declare my_employee_ids with userField: 'user', valueField: 'id' and write employee in current_user.my_employee_ids. Until the skill and the guide say so, an AI author still reaches for owner_id on every row or a junction table, which is what the ruling set out to end.
Blocked-by: #31129

Owed

  1. skills/objectstack-data/rules/security.md: in the membership-key section, add the "the person is a record" example (roster employee with userField: 'user', valueField: 'id'; a leave_request policy employee in current_user.my_employee_ids), and say what it does not do: it grants nothing by itself, and comparing the set with another object's column is still refused. Add or extend an eval prompt in hooks-security-seeds-datasources.json that exercises it.
  2. content/docs/permissions/rls.mdx: the same example beside the existing membership-key text.

Wording source: the merged packages/spec/src/security/rls.zod.ts membership-key docblock and the lint explanations membership-key-value-field-invalid / rls-predicate-membership-key-target from PR #31174.

Level: docs and skill text; Tier H if skills/** is governed at landing (the dev checks check-governed-merges). Full Fable review per the maintainer's standing skills rule.

Related: #31129, PR #31174, #25234.

Activity

  1. added
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    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
    and removed
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Nov 7, 2026
  2. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor
  3. added
    pm:queueReady for the PM dispatch loop
    and removed
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    on Nov 7, 2026
  4. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#3 · huangyiirene · session_01J8VVAj7CvjkGXvgXzd6RZ7

    Claim: PM loop round 22 · 2026-11-07T20:30Z
    Session: session_01J8VVAj7CvjkGXvgXzd6RZ7
    Account: huangyiirene
    Branch: claude/project-thread-h4z1pw (the card thread's designated branch; dev session session_01J8VVAmphavoevUax9bUVkY)
    Worktree: objectstack-issue-31176
    Domain: domain:skills
    Seat: domain:skills#3
    File surface: skills/objectstack-data/rules/security.md (§ Membership keys: the "the person is a record" example, the correction of the "nor id" claim at ≈L149-L151, and same-file deletions that pay its budget); skills/objectstack-data/evals/hooks-security-seeds-datasources.json (one new or extended case, and any case that rewards the old claim); content/docs/permissions/rls.mdx (the same example beside the membership-key text, folded in by the triage); .changeset/*.md; scripts/check-skills-token-ratchet.mjs only by standing ruling 6513306068 for a measured remainder, and only after the seat rules on the cuts (stop on breach)
    Container & model: M, mode:thread, project-default model, effort: high. dispatch-gates --tier is run by the thread and reported; any mandate above this thread's is waived by the maintainer's standing order in this project (2026-11-03) and said so in the PR body; this seat runs the contract review.
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card (published teaching lags the merged ruling A on #31129, PR #31174; the skill's "nor id" line became false when it merged)
    Thread-read: 6710238236
    Premise: holds on main bdefd49f: rls.zod.ts allows valueField: 'id' (the caller's own roster rows), and security.md ≈L150-L151 still says valueField is never id. Blocker #31129 closed 2026-11-07T16:52Z with PR #31174.
    Serial constraints: none open. The seat runs serially (one card) by the maintainer's word of 2026-11-07.

    Changeset '@objectstack/skills': patch. Fixes #31176. Tier read by check-governed-merges at the PR.

  5. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 7, 2026
  6. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#3 · huangyiirene · session_01J8VVAj7CvjkGXvgXzd6RZ7

    ACCEPT → PR #31266 comment 6713452578, head ebb6bce9. Tier H: pm:awaiting-merge, approval requested from os-zhuang and hotlong. Seat rulings: three same-file cuts, with the remainder +70 raised under ruling 6513306068; the unreleased .changeset/data-skill-optional-master.md clause corrected (Check Changeset stays red by design, confirmed in the ACCEPT).

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

Metadata

Metadata

Assignees

Labels

documentationImprovements or additions to documentationdomain:skillsDomain lane — seat card indexed by label:pm:seatpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions