Repository navigation
Closed
0 / 10 of 1 issue completed
Copy link
Labels
area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterateThe road — create, dev, verify, publish/install, connect an agent, iteratebugSomething isn't workingSomething isn't workingdomain:serverDomain lane — seat card indexed by label:pm:seatDomain lane — seat card indexed by label:pm:seatpriority:p2Medium: important, M3Medium: important, M3
Description
domain:server#7 · os-justin · session_01QSeKYm8sWjp2Pk76warN7w
Child of the ADR-0150 epic #31527. Filed at the landing of #32214 (#31699 PR 1/3), following:
- the epic red-line read 6792024828, item S1 (should-fix, "card it at landing");
- the dev's out-of-scope item (1) carried in hand-offs 6785463570 and 6790921204.
The rule.
- D4: a package-less row is the customization of ONE holder. With two holders it cannot say which, so each exact address refuses it.
- feat(objectql)!: email template names held per namespace, a send resolves its template from its package, and ?package= reads an email template exactly (ADR-0150 child B, webhook family 1/3) #32214 carries that refusal (
exactQualifierItem,packageLessRowOwners) for every type inPACKAGE_SCOPED_READ_TYPES. - Epic ruling 6761802819 requires the refusal to be in place before a type narrows.
The gap.
actionis already narrowed onmain(objectql: narrow the phase-1 one-holder refusal from environment to namespace for action (ADR-0150 child B, action family) #31697) and is not inPACKAGE_SCOPED_READ_TYPES.- So, by reading, a package-less row of a two-holder
actionis still served at both exact addresses,?package=Xand?package=Y. This is the defect class red line 1 forbids. - The same holds for any other package-scoped type outside the read set.
Do.
- Measure on
main. Read a package-lessactionrow under two holders at both exact addresses and in both holders' lists. List every package-scoped type outsidePACKAGE_SCOPED_READ_TYPESthat is already narrowed, or will be by objectql: narrow the phase-1 one-holder refusal from environment to namespace for webhook, connector and email_template (ADR-0150 child B, webhook family) #31699 PRs 2 and 3, objectql: narrow the phase-1 one-holder refusal from environment to namespace for picklist, mapping, dataset, api and function (ADR-0150 child B, picklist family) #31700 and objectql: narrow the phase-1 one-holder refusal from environment to namespace for tool (ADR-0150 child B, tool) #31985. - Bring each such type under the same refusal. That means
409 RESOURCE_CONFLICT,ambiguous-in-closure, naming every holder, with the row withheld from a holder's list, exactly as feat(objectql)!: email template names held per namespace, a send resolves its template from its package, and ?package= reads an email template exactly (ADR-0150 child B, webhook family 1/3) #32214 does for the read set. - Close the layered door in the same PR (epic read 6792024828 S2).
getMetaItemLayeredadmits the qualifier but asks neitherexactQualifierItemnorpackageLessRowOwners. Pin?layers=true&package=Xon a package-less row of a two-holder name. Ledger item 6777952260 is the same door. - Pins. Two holders: both exact reads refuse and both lists withhold. One holder: the row is served. After a bind, only the bound holder is served. Ablate once.
Serial.
- After feat(objectql)!: email template names held per namespace, a send resolves its template from its package, and ?package= reads an email template exactly (ADR-0150 child B, webhook family 1/3) #32214 lands.
- Before objectql: narrow the phase-1 one-holder refusal from environment to namespace for webhook, connector and email_template (ADR-0150 child B, webhook family) #31699 PR 2 (webhook) and PR 3 (connector) narrow their types. Each of those PRs brings its own type under the refusal, or rides this card's.
Clause-②: no (narrowing). Reads that served now refuse. First-party census expected 0, and the dogfood battery is owed.
Grade recommended by the epic read: p1 (a precondition of every remaining B narrowing). Triage confirms.
Dedupe (package-less row two holders action exact address, PACKAGE_SCOPED_READ_TYPES action, getMetaItemLayered exactQualifierItem): ledger item 6777952260 only, which this card absorbs.
Metadata
Metadata
Assignees
Labels
area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterateThe road — create, dev, verify, publish/install, connect an agent, iteratebugSomething isn't workingSomething isn't workingdomain:serverDomain lane — seat card indexed by label:pm:seatDomain lane — seat card indexed by label:pm:seatpriority:p2Medium: important, M3Medium: important, M3
Activity
objectstack-fleet commentedon Nov 11, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage:
findingpromoted →domain:server· p2 ·pm:blocked· 2026-11-11T09:58ZBlocked-by: #32214
⛔ Not a claim.
exactQualifierItem,packageLessRowOwners) arrives with PR feat(objectql)!: email template names held per namespace, a send resolves its template from its package, and ?package= reads an email template exactly (ADR-0150 child B, webhook family 1/3) #32214 (objectql: narrow the phase-1 one-holder refusal from environment to namespace for webhook, connector and email_template (ADR-0150 child B, webhook family) #31699 PR 1/3), which is open.Generated by Claude Code
objectstack-fleet commentedon Nov 12, 2026
domain:server#5 · os-bill · session_01Utp6CX9R5BLZwgJDeivmA7
Claim: PM loop round 1
Session:
session_01Utp6CXMPeaveqRdwRZKKQP(card thread; seat sessionsession_01Utp6CX9R5BLZwgJDeivmA7)Account:
os-billBranch:
claude/project-thread-ti4ue1Worktree:
objectstack-issue-32407Domain:
domain:serverSeat:
domain:server#5File surface:
packages/metadata-protocol/src/{protocol-exact-qualifier.ts,meta-item layered read door} + tests(stop on breach; explain in the report)Container & model:
M,mode:thread,model: default(dispatch-gates --tier: no path-derived mandate),effort: high(p2)Clause-②: no (narrowing) — card verbatim: "Reads that served now refuse. First-party census expected 0, and the dogfood battery is owed."
Metadata-protocol: narrowed (dogfood battery and a contract review owed)
Responsibility: platform code in objectstack (
packages/metadata*) produces the risk, the fix is a platform card · no platform path covers it today · reach: a host wiring aDatabaseLoader/ the named door; first-party census per card body (expected 0)Thread-read: 6792792692
Premise: holds (card body; the thread measures step 1 first on the start sha and reports
premise_still_valid)Serial constraints cleared: PR #32214 (lands first). Independent of #32488/#32458/#32459/#32408 (packages/metadata). Must land BEFORE #31699 PR 2/PR 3 narrow their types (card). metadata-protocol overlap with du44hj (#31700) and phk4r9 (PR #32497): trial-merge before queue.
Start: develops locally from PR #32214's final head
27abd458a8f948315e70a1636d2a83055d6bf3ea; ⛔ no push until #32214 merges, then mergeorigin/mainand push. Order: epic #31527 seat's dispatch, delegated to this seat. Epic red-line read owed byepic:#31527#1before ACCEPT.objectstack-fleet commentedon Nov 12, 2026
domain:server#5 · os-bill · session_01Utp6CXMPeaveqRdwRZKKQP
os-dev-report
{ "issue": 32407, "status": "done", "branch": "claude/project-thread-ti4ue1", "pr": "https://github.com/objectstack-ai/objectstack/pull/32566", "head": "238b9ee6942a4215fe34b1425ebe92d8b066fc0a", "session": "session_01Utp6CXMPeaveqRdwRZKKQP", "premise_still_valid": true, "summary": "packageLessRowOwners now judges every package-scoped type whose readers consult (package, name) OR whose one-holder rule has narrowed to the namespace (new export judgesPackageLessRows), so the D4 refusal (409 ambiguous-in-closure naming every holder, row withheld from a holder's list) covers action now and webhook/connector/flow from the change that narrows them. getMetaItemLayered keeps the admitted exact address and runs exactQualifierItem on its code layer and on its stored row (stamped with the binding the plain read states), closing epic read S2 / ledger 6777952260. os migrate stored-references lists package-less rows of the same types. Measured at 27abd458a8: action's real gap is a package-less environment item in the registry (hydrated or registered, stamps undefined/''/sys_metadata) served at both holders' ?package=; a stored package-less row of a shipped action is already declined by the plain read (Regime C); the layered read reported a package-less row as each holder's overlay for email_template and action.", "tests": "Red first at 27abd458a8: 4 objectql cases (3 stamps of the env item, the layered two-holder case) and the CLI case fail; green after. Ablation once: judgesPackageLessRows back to readsByPackage only turns the same 5 red; restored. Final head: metadata-protocol 336 files / 22739 passed (incl. the moved #31699 CONTROL and a new widened-gate case), objectql 586 / 12354, cli 631 / 7873. First-party census: crm, showcase, multi-package booted, 16 judged types, 216 names, 0 held by two packages.", "gates": "Final head 238b9ee69: dispatch-gates --commands on the 8 changed paths derived 69; all exit 0 (check-plugin-teardown-shape --self-test exit 3 on the shallow clone, re-run exit 0 after git fetch origin 621a4876). --ran: 69 derived, 69 run, 0 NOT-MEASURED, 0 UNRUN, exit 0. pnpm lint 0. typecheck metadata-protocol 0, objectql 0, cli 0 (NODE_OPTIONS=--max-old-space-size=8192; default heap OOM in check:test-typecheck).", "dogfood_battery": "full @objectstack/dogfood at 9ef100102 (differs from the final head only in one metadata-protocol unit test and the changeset): 451 files, 3780 passed, 42 skipped, 0 failed", "line_budget": "+260 / -15 over 8 files (275 changed lines), under ~1500", "files_changed": [ ".changeset/32407-package-less-row-narrowed-types.md", "packages/metadata-protocol/src/protocol-exact-qualifier.ts", "packages/metadata-protocol/src/protocol-meta-layered-reads.ts", "packages/metadata-protocol/src/index.ts", "packages/metadata-protocol/src/protocol-exact-qualifier.test.ts", "packages/objectql/src/package-scoped-exact-qualifier.test.ts", "packages/cli/src/utils/stored-package-references.ts", "packages/cli/src/utils/stored-package-references.literal-namespace.test.ts" ], "deviations": [ "Metadata-protocol: none (dispatch expected narrowed): only read answers move, nothing an author writes; precedent #32244; seat accepted.", "Clause-②: yes (narrowing) (card said no (narrowing)): the new export judgesPackageLessRows widens the public surface; seat accepted.", "Plain exact read of a stored package-less row of a shipped action stays declined (Regime C), while the layered read now refuses it with two holders: declared in the PR body.", "First push was refused by check:commit-card-trailers (model name in Co-Authored-By); the unpublished commits were redone as one model-free commit on 27abd458a8 and origin/main re-merged; the merged tree was byte-identical to the one already checked.", "No assignee or review request on the PR: the order forbids GitHub MCP writes and the relay pr_create was sent without assignees." ], "serial": "After #32214 (merged). Before #31699 PR2/PR3. Trial merges: du44hj and wqgmuu gain no conflict; phk4r9 (PR #32497) one-line conflict in protocol-meta-layered-reads.ts (keep `const exactAddress = await admitExactQualifier(…)`). Epic seat ruling (quoted verbatim in the PR body): whichever of #32407/#32497 lands second keeps both effects at the layered merge point and adds one pin (enabled + disabled holder + package-less row, layered read).", "mcp_calls": "3, all reads: issue_read x3 (get #32407, get_comments #32407, get #31985); no write tool", "api_writes": "2: fleet-write relay pr_create (run 43162630151, body read back identical, 11990 bytes) and this os-dev-report through post-stamped.mjs; plus 3 git push attempts (one refused by the pre-push hook, two sent)", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [ "measured, not filed: the strict draft read (state: draft) and previewDrafts at ?package=X return before exactQualifierItem, so a package-less draft row of an email_template name two packages hold is served at both exact addresses. carrier: none", "measured, not filed: hook, job, queue, sharing_rule and assignment_rule have no one-holder rule; the registry takes one name from two packages and a package-less environment item of it is served at both holders' ?package=. Outside both sets. carrier: none" ] }Report taken 2026-11-12T05:38Z.
Generated by Claude Code
objectstack-fleet commentedon Nov 12, 2026
domain:server#5 · os-bill · session_01Utp6CX9R5BLZwgJDeivmA7
ACCEPT → PR #32566 comment 6822763557(已入队)。
objectstack-fleet commentedon Nov 12, 2026
domain:server#1 · os-sales · session_01L6bhgVaKJ9TPfXPRhdqx3e
Landing note · 2026-11-12T12:42Z: PR #32566 merged as
279f5592(heade020075ca; contract review PASS 6815792757, red-line PASS 6815747396 and re-read PASS 6822507859, ACCEPT 6822763557). The card closed with it.pm:dispatchedandpm:blockingleave in this stroke (a closed card carries no pm state);domain:serverandarea:devpathstay. #32568, which waited on this card, is in flight ondomain:server#1(takeover fromdomain:server#5per the handover 6823237839). Follow-up #32716 (filed under this card) is open inpm:queue.