You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
managedBy 'synced': the stripped-apiMethods warning and the lint sentence tell the author to open a verb through userActions, which a synced object refuses (after #32061) #32134
Filing gate: ① a measured gap with file:line, owed by landed work. The contract review of PR #32118 (card #32061, record 6762969887, nit ④ "follow-up card") found two remedy sentences that become false once #32118 lands. ⛔ Not a claim.
On a managedBy: 'synced' object, #32118 refuses at parse a userActions entry that opens create, import, edit or delete. This is ADR-0153 D4's named exception to ADR-0103 D1. Two messages that fire on such an object still prescribe exactly that:
packages/objectql/src/registry.tsreconcileManagedApiMethods (~L1993–2000) strips generic write verbs from enable.apiMethods and warns: "Declare userActions to open a verb the object legitimately takes from a user context."
packages/spec/src/data/managed-api-affordance.tsdescribeManagedApiMethodConflicts (~L143–153), read by the lint rule object/managed-api-method-unaffordable, says "(needs userActions …)".
For a synced author both sentences point at a key the parse refuses. The fix the platform intends is to drop the write verbs from apiMethods, and to write through a declared action (ADR-0153 D5).
Ask
Branch both sentences on the bucket. On synced, say that the bucket cannot be opened, name the verbs to remove from enable.apiMethods, and point at a declared action for writes (D5). Every other bucket keeps today's sentence. Pin each message on a synced fixture and on a control from another bucket.
Business reason
An author or AI agent following the warning edits userActions, the build refuses it, and they are left with two contradicting messages and no path forward.
Reader
Triage routes it. The two files sit in packages/objectql and packages/spec, and the change is message text only (Clause-②: no, Metadata-protocol: none expected).
Dedupe: searched open and closed issues for describeManagedApiMethodConflicts and for reconcileManagedApiMethods synced. There are no hits beyond #32061 and #32118. New.
Claim: PM loop round 1 · 2026-11-14T22:46Z
Session: session_01FEkQ5mswnWm181XgYcCUag (seat); card thread session_01FEkQ5p6qE7Nt8wpjSGLqiC is the dev
Account: os-project-manager
Branch: claude/project-thread-88rfao (the card thread's designated branch; the platform lets a thread push only that branch, so not claude/issue-32134-*)
Worktree: objectstack-issue-32134
Domain: domain:spec
Seat: domain:spec#1
File surface: packages/objectql/src/registry.ts (the reconcileManagedApiMethods warning text only), packages/spec/src/data/managed-api-affordance.ts (describeManagedApiMethodConflicts text only), their test files (existing or one new beside each), root .changeset/, a regenerated reference only if the lint message renders there (stop on breach; explain in the report)
Container & model: S, mode:thread, model: default tier, effort: medium
Clause-②: no
Metadata-protocol: none
Responsibility: n/a — message text owed by PR #32118 (record 6762969887 nit ④)
Thread-read: 6885096771
Premise: holds at origin/mainf068cde8: registry.ts ~:2018 still says "Declare userActions to open a verb" and managed-api-affordance.ts ~:149 still says "(needs userActions …)", while a synced object refuses such a userActions entry at parse (PR #32118). Restarted by triage 6885096771 (「外部数据同步,可以继续了」); taken under 「开放 p3卡认领」 (Leehom, 2026-11-14; Ruling-ref). Order: /mnt/project-files/pm-orders/spec/order-32134.md (project share).
Serial constraints cleared: Blocked-by: #32061 closed; no in-flight card touches these two files.
Seat: surface amendment on the claim (6885403175) · 2026-11-14T22:47Z
⛔ Not a new claim. Answers the dev's two premise readings on origin/mainf068cde8.
Reading 1 holds:object/managed-api-method-unaffordable builds its own message and hint in packages/lint/src/validate-managed-api-methods.ts (~:110-114) and no longer reads the spec sentence; os explain's paragraph (packages/lint/src/rule-explanations.ts ~:5515) says the same. That is the text a synced author sees.
Ruling: the surface addspackages/lint/src/validate-managed-api-methods.ts (message and hint branch on the write-locked bucket, test via MANAGED_BY_WRITE_LOCKED_BUCKETS), its test file, the explain paragraph in rule-explanations.ts, and an @objectstack/lint patch changeset. Every other bucket keeps today's text byte for byte; pin a synced case and a control.
The spec helper stays untouched:describeManagedApiMethodConflicts has no production caller, so a new parameter on a published export would widen surface nobody reads. ⛔ No signature change. Report it in out_of_scope_findings (retire or align a zero-caller export); the seat carries it.
Unchanged: Clause-②: no / Metadata-protocol: none; the registry.ts warning as ordered; @objectstack/spec changeset only if a spec file still moves (it should not now).
domain:spec#1 · os-project-manager · session_01FEkQ5p6qE7Nt8wpjSGLqiC
os-dev-report
{
"issue": 32134,
"status": "done",
"branch": "claude/project-thread-88rfao",
"pr": "#33517",
"session": "session_01FEkQ5p6qE7Nt8wpjSGLqiC",
"premise_still_valid": true,
"summary": "On a write-locked bucket (MANAGED_BY_WRITE_LOCKED_BUCKETS, today synced), objectql reconcileManagedApiMethods' warning and the lint rule object/managed-api-method-unaffordable (message and fix line) no longer prescribe userActions; they name the verbs to remove from enable.apiMethods and point writes at a declared action (ADR-0153 D4/D5). os explain gains one paragraph. Every other bucket keeps today's text byte for byte. Premise partly moved: the lint rule no longer reads spec describeManagedApiMethodConflicts (it builds its own text), so the seat amended the surface to the lint rule (claim amendment 6885418970) and ruled the spec helper out of scope; no packages/spec file changed, so the changesets are objectql patch + lint patch.",
"tests": "head f127667. objectql src/registry.test.ts: new synced exact-line pin + engine-owned control exact-line pin; lint src/validate-managed-api-methods.test.ts: synced verdict and fix-line exact pins (existing platform verdict / better-auth fix-line exact pins are the controls), explain facts +ADR-0153 D4/D5. Package suites under lock: lint 210 files / 8973 tests passed, objectql 595 files / 13013 tests passed (exit 0); typecheck both exit 0 (no new debt signature). Ablation via scripts/ablation-replace.mjs, subjects imported from src/ (no dist in path): registry remedy branch forced false -> 1 failed | 106 passed, restored blob eb3b6f1d1036 == HEAD; lint writeLocked forced false -> 2 failed | 13 passed, restored blob 682b98ae055e == HEAD; git diff HEAD empty after each. Control leg: base f068cde registry.ts with the new test file, -t reconcileManagedApiMethods -> only the synced pin fails (1 failed | 17 passed), so the control pins main's current line.",
"gates": "dispatch-gates --commands --repo objectstack-ai/objectstack: 73 families; 72 exit 0; pnpm check:dual-build-cjs-loads exit 3 PREREQUISITE NOT MET (needs every package dist) = NOT MEASURED, CI runs it. --ran: 73 derived famil(ies) accounted for, 72 run, 1 NOT-MEASURED. eslint --no-inline-config on the 5 changed files exit 0. --tier: no path-derived mandate, 121 changed lines, no governed surface. CI check-runs on PR #33517: in_progress at report time (not awaited, per os-dev.md). Record: /mnt/project-files/pm-orders/spec/32134-gates-ran.txt.",
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "0 — card, comments and claim read through anonymous public REST",
"api_writes": "2 relay writes — pr_create (fleet-write fw-20261114T232234Z-ff71fc, PR #33517, labels domain:spec, no assignees) and this os-dev-report comment (post-stamped on #32134); plus 1 git push",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"class: c (borderline: a remedy sentence, not authorable metadata) · reach: none today, no production caller · packages/spec/src/data/managed-api-affordance.ts describeManagedApiMethodConflicts (L142-150) still says '(needs userActions …)' and cannot branch on the bucket since ManagedApiMethodConflict carries no managedBy; its only caller is its own test (the lint rule stopped reading it, see lint CHANGELOG). Seat ruled it out of this PR and will card it. Dedupe words: describeManagedApiMethodConflicts, needs userActions, synced, managed-api-affordance",
"carrier: domain:spec#1 seat (per its 2026-11-14 surface ruling) · noted, not filed"
]
}
Activity
objectstack-fleet commentedon Nov 10, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: lands in
domain:spec· p3 ·pm:blocked· 2026-11-10T11:00Z⛔ Not a claim.
domain:spec. Two remedy sentences tell asyncedobject's author to open a verb throughuserActions, which feat(spec)!: one-way sync-in, the spec half — datasource source, paging and delete policy keys, the pull refusals, and the synced bucket (ADR-0153) #32118 refuses. They aremanaged-api-affordance.tsand objectqlreconcileManagedApiMethods. The objectql sentence rides with this card. p3, a review nit (record 6762969887 ④).Blocked-by: #32061. Epic: linked under [Epic] One-way sync-in beside federation: external data becomes ordinary objects with a provenance marker, read-only by default, write-back only through declared actions (ruled A, 2026-11-09) #31763 this round.Generated by Claude Code
objectstack-fleet commentedon Nov 10, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: unblocked →
pm:queue·domain:spec· p3 · 2026-11-10T11:54Z⛔ Not a claim.
Generated by Claude Code
objectstack-fleet commentedon Nov 14, 2026
triage#1 · hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH
Path: none
Triage: restart ·
pm:on-hold→pm:queue· 2026-11-14T22:20Z⛔ Not a claim.
Ruling (maintainer, triage seat session, 2026-11-14T22:20Z): 「外部数据同步,可以继续了」. This lifts the hold of 2026-11-11T12:23Z (「31763 比如这个,我现在不着急开发」).
Its
Blocked-by: #32061is closed. Spec wording, p3 unchanged.objectstack-fleet commentedon Nov 14, 2026
domain:spec#1 · os-project-manager · session_01FEkQ5mswnWm181XgYcCUag
Claim: PM loop round 1 · 2026-11-14T22:46Z
Session:
session_01FEkQ5mswnWm181XgYcCUag(seat); card threadsession_01FEkQ5p6qE7Nt8wpjSGLqiCis the devAccount:
os-project-managerBranch:
claude/project-thread-88rfao(the card thread's designated branch; the platform lets a thread push only that branch, so notclaude/issue-32134-*)Worktree:
objectstack-issue-32134Domain:
domain:specSeat:
domain:spec#1File surface:
packages/objectql/src/registry.ts(thereconcileManagedApiMethodswarning text only),packages/spec/src/data/managed-api-affordance.ts(describeManagedApiMethodConflictstext only), their test files (existing or one new beside each), root.changeset/, a regenerated reference only if the lint message renders there (stop on breach; explain in the report)Container & model:
S,mode:thread,model: default tier,effort: mediumClause-②: no
Metadata-protocol: none
Responsibility: n/a — message text owed by PR #32118 (record 6762969887 nit ④)
Thread-read: 6885096771
Premise: holds at
origin/mainf068cde8:registry.ts~:2018 still says "Declare userActions to open a verb" andmanaged-api-affordance.ts~:149 still says "(needs userActions …)", while asyncedobject refuses such auserActionsentry at parse (PR #32118). Restarted by triage 6885096771 (「外部数据同步,可以继续了」); taken under 「开放 p3卡认领」 (Leehom, 2026-11-14; Ruling-ref). Order:/mnt/project-files/pm-orders/spec/order-32134.md(project share).Serial constraints cleared:
Blocked-by: #32061closed; no in-flight card touches these two files.objectstack-fleet commentedon Nov 14, 2026
domain:spec#1 · os-project-manager · session_01FEkQ5mswnWm181XgYcCUag
Seat: surface amendment on the claim (6885403175) · 2026-11-14T22:47Z
⛔ Not a new claim. Answers the dev's two premise readings on
origin/mainf068cde8.object/managed-api-method-unaffordablebuilds its own message and hint inpackages/lint/src/validate-managed-api-methods.ts(~:110-114) and no longer reads the spec sentence;os explain's paragraph (packages/lint/src/rule-explanations.ts~:5515) says the same. That is the text asyncedauthor sees.packages/lint/src/validate-managed-api-methods.ts(message and hint branch on the write-locked bucket, test viaMANAGED_BY_WRITE_LOCKED_BUCKETS), its test file, the explain paragraph inrule-explanations.ts, and an@objectstack/lintpatch changeset. Every other bucket keeps today's text byte for byte; pin asyncedcase and a control.describeManagedApiMethodConflictshas no production caller, so a new parameter on a published export would widen surface nobody reads. ⛔ No signature change. Report it inout_of_scope_findings(retire or align a zero-caller export); the seat carries it.Clause-②: no/Metadata-protocol: none; theregistry.tswarning as ordered;@objectstack/specchangeset only if a spec file still moves (it should not now).objectstack-fleet commentedon Nov 14, 2026
domain:spec#1 · os-project-manager · session_01FEkQ5p6qE7Nt8wpjSGLqiC
os-dev-report
{
"issue": 32134,
"status": "done",
"branch": "claude/project-thread-88rfao",
"pr": "#33517",
"session": "session_01FEkQ5p6qE7Nt8wpjSGLqiC",
"premise_still_valid": true,
"summary": "On a write-locked bucket (MANAGED_BY_WRITE_LOCKED_BUCKETS, today synced), objectql reconcileManagedApiMethods' warning and the lint rule object/managed-api-method-unaffordable (message and fix line) no longer prescribe userActions; they name the verbs to remove from enable.apiMethods and point writes at a declared action (ADR-0153 D4/D5). os explain gains one paragraph. Every other bucket keeps today's text byte for byte. Premise partly moved: the lint rule no longer reads spec describeManagedApiMethodConflicts (it builds its own text), so the seat amended the surface to the lint rule (claim amendment 6885418970) and ruled the spec helper out of scope; no packages/spec file changed, so the changesets are objectql patch + lint patch.",
"tests": "head f127667. objectql src/registry.test.ts: new synced exact-line pin + engine-owned control exact-line pin; lint src/validate-managed-api-methods.test.ts: synced verdict and fix-line exact pins (existing platform verdict / better-auth fix-line exact pins are the controls), explain facts +ADR-0153 D4/D5. Package suites under lock: lint 210 files / 8973 tests passed, objectql 595 files / 13013 tests passed (exit 0); typecheck both exit 0 (no new debt signature). Ablation via scripts/ablation-replace.mjs, subjects imported from src/ (no dist in path): registry remedy branch forced false -> 1 failed | 106 passed, restored blob eb3b6f1d1036 == HEAD; lint writeLocked forced false -> 2 failed | 13 passed, restored blob 682b98ae055e == HEAD; git diff HEAD empty after each. Control leg: base f068cde registry.ts with the new test file, -t reconcileManagedApiMethods -> only the synced pin fails (1 failed | 17 passed), so the control pins main's current line.",
"gates": "dispatch-gates --commands --repo objectstack-ai/objectstack: 73 families; 72 exit 0; pnpm check:dual-build-cjs-loads exit 3 PREREQUISITE NOT MET (needs every package dist) = NOT MEASURED, CI runs it. --ran: 73 derived famil(ies) accounted for, 72 run, 1 NOT-MEASURED. eslint --no-inline-config on the 5 changed files exit 0. --tier: no path-derived mandate, 121 changed lines, no governed surface. CI check-runs on PR #33517: in_progress at report time (not awaited, per os-dev.md). Record: /mnt/project-files/pm-orders/spec/32134-gates-ran.txt.",
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "0 — card, comments and claim read through anonymous public REST",
"api_writes": "2 relay writes — pr_create (fleet-write fw-20261114T232234Z-ff71fc, PR #33517, labels domain:spec, no assignees) and this os-dev-report comment (post-stamped on #32134); plus 1 git push",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"class: c (borderline: a remedy sentence, not authorable metadata) · reach: none today, no production caller · packages/spec/src/data/managed-api-affordance.ts describeManagedApiMethodConflicts (L142-150) still says '(needs userActions …)' and cannot branch on the bucket since ManagedApiMethodConflict carries no managedBy; its only caller is its own test (the lint rule stopped reading it, see lint CHANGELOG). Seat ruled it out of this PR and will card it. Dedupe words: describeManagedApiMethodConflicts, needs userActions, synced, managed-api-affordance",
"carrier: domain:spec#1 seat (per its 2026-11-14 surface ruling) · noted, not filed"
]
}
Generated by Claude Code
objectstack-fleet commentedon Nov 14, 2026
domain:spec#1 · os-project-manager · session_01FEkQ5mswnWm181XgYcCUag
ACCEPT → PR #33517 comment 6886175829 (ready + auto-merge, 2026-11-14T23:53Z).