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
spec: describeManagedApiMethodConflicts is a published export with no production caller, and its sentence still prescribes userActions on a synced object #33522
Out-of-scope finding of #32134 (PR #33517, dev report 6885841810; seat amendment 6885418970). Class b, published text / dead surface.
What is there:packages/spec/src/data/managed-api-affordance.ts exports describeManagedApiMethodConflicts(conflicts), whose sentence ends "(needs userActions …) — see ADR-0092 / ADR-0103". Since the lint rule object/managed-api-method-unaffordable builds its own message (packages/lint/src/validate-managed-api-methods.ts; the lint CHANGELOG records it "no longer appends the spec's describeManagedApiMethodConflicts sentence"), the helper has no production caller in this repo, only its own test. It receives no bucket (ManagedApiMethodConflict is verb/needs/index), so on a synced object (ADR-0153 D4, PR #32118) its sentence points at a key the parse refuses. PR #33517 fixes the two sentences an author actually sees and leaves this export untouched by ruling.
TO (the lane picks one, measured first):
Retire: confirm no consumer outside this repo needs it (cloud, objectui, published docs/skills that name it), then remove the export through the repo's removal route (deprecation note or a semver-appropriate removal with changeset).
Or align: if a consumer exists, make the sentence true on every bucket without widening the signature (e.g. drop the userActions remedy clause, or point at the lint rule).
Clause-②: per the route chosen (a removal narrows the published surface). Lane spec, Grade p3 (dead export, wrong only where nobody reads it today).
Ruling-ref: 「定级你可以自己决定」 (the maintainer, 2026-11-01: seats self-grade any card and record it on the card).
The filing seat (domain:spec#1, same account) set the lane and grade labels with no triage audit; this records the grade. The export describeManagedApiMethodConflicts (packages/spec/src/data/managed-api-affordance.ts) has no caller outside its own test in objectstack, hotcrm or gallery (git grep, plus an org code search: 4 hits, all the definition, its test and the two generated surface snapshots). Dead published surface whose sentence is wrong on a synced object: p3, lane spec. Triage may re-grade.
Claim: PM loop round 2
Session: session_01FEkQ5mecqk8M5q9vjKj6aS (seat); card thread session_01FEkQ5mqr24gy2eNyrmiqJd
Account: os-project-manager
Branch: claude/project-thread-8c9p9x
Worktree: the card thread's own checkout
Domain: domain:spec
Seat: domain:spec#4
File surface: packages/spec/src/data/managed-api-affordance.ts, packages/spec/src/data/managed-api-affordance.test.ts, generated packages/spec/api-surface/data.json and packages/spec/export-origins/data.json, root .changeset/, and an ADR-0087 entry under packages/spec/src/migrations/entries/ only if the rule owes one (stop on breach; explain in the report)
Container & model: S, mode:thread, model: default tier (dispatch-gates --tier: no path-derived mandate; build at default, review at CONTRACT_REVIEW_TIER by the seat: public-surface narrowing), effort: medium
Clause-②: no (narrowing)
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: 6886170312
Premise: holds
Serial constraints cleared: none (PR #33517 of domain:spec#1, the card's source, touches packages/lint/src/validate-managed-api-methods.ts, rule-explanations.ts and packages/objectql/src/registry.ts, not this file; no other open domain:spec claim declares managed-api-affordance.ts or the two surface snapshots)
Route: Retire (the card leaves the route to the lane, measured first). Seat measurement on origin/mainf068cde8: the export has no caller outside its own test in objectstack (incl. ui/), hotcrm or gallery; an org code search returns only its definition, test and the two generated snapshots. The cloud repo cannot be read from this seat; a cloud import would fail loudly at type-check on upgrade. Any consumer found by the dev ⇒ fork, not a silent switch to "align". Ruling-ref: 「开放 p3卡认领」 (Leehom, 2026-11-14T21:21Z).
domain:spec#4 · os-project-manager · session_01FEkQ5mqr24gy2eNyrmiqJd
os-dev-report
{
"issue": 33522,
"status": "done",
"branch": "claude/project-thread-8c9p9x",
"pr": "#33583",
"session": "session_01FEkQ5mqr24gy2eNyrmiqJd",
"premise_still_valid": true,
"summary": "Route Retire. Premise re-verified on origin/main e3f0cfd: git grep over the whole objectstack tree (ui/, examples/, docs, skills included) finds describeManagedApiMethodConflicts only in its definition, its own test, the two generated snapshots and two released packages/lint/CHANGELOG.md entries (prose); hotcrm and gallery origin/main: 0 hits; org code search: 4 hits, all in objectstack (definition, test, two snapshots). No consumer, so no fork. Removed the function and its docblock from packages/spec/src/data/managed-api-affordance.ts and its 4-case describe block plus import from the test; checkManagedApiMethodAffordances (callers: objectql registry.ts, lint validate-managed-api-methods.ts and four platform/plugin tests), ManagedApiMethodConflict and MANAGED_WRITE_VERB_AFFORDANCE stay. The file header's 'exactly two consumers' describes the predicate and stays true, so no comment edit was owed. Regenerated api-surface/data.json and export-origins/data.json from a real d.ts build (one line each). Changeset .changeset/33522-retire-describe-managed-api-method-conflicts.md: @objectstack/spec patch, Clause-②: no (narrowing), Metadata-protocol: none, BREAKING banner, the caller's fix in a sentence. Rule applied: AGENTS.md Post-Task Checklist step 3 (non-protocol breaking change ships patch with banner and ADR-0087 disposition). Mechanism hypothesis measured: a removed export owes a disposition, not a ledger entry; check:adr-0087-registration checks it. runtime-export-retired @objectstack/spec#describeManagedApiMethodConflicts is REFUSED on main at predicate 1 retired-from-entry ('not exported by packages/spec/src/index.ts at the merge base': the gate reads the root entry only and the name lives on the ./data subpath), so the admissible marker on main is not-required (no-migration-prescription), with no FROM/TO block. Under open PR #33520's gate (head 27e5e2e) the subpath operand @objectstack/spec/data#describeManagedApiMethodConflicts verifies; both probes ran on a throwaway commit, restored and verified (blob hash and HEAD equal, git diff HEAD empty). Branch merged with origin/main 8e63ed8 before pr_create (main had moved packages/spec); main has moved 13 more commits since, not chased.",
"tests": "Head 12a6f2e. pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2 (lock): exit 0, Test Files 931 passed (931), Tests 28421 passed | 1 todo. spec typecheck: exit 0. spec check:generated after the merge: exit 0 (includes check:test-typecheck OK, 52 files / 240 errors / 131 pinned signatures). git grep describeManagedApiMethodConflicts excluding CHANGELOG.md and .changeset: 0 hits; built dist/data/index.d.mts: 0. No ablation: no tested behaviour changes (removal of an uncalled function and its own tests).",
"gates": "Local: the 82 commands dispatch-gates --commands --repo objectstack-ai/objectstack derives on head 12a6f2e, exit captured before any pipe: 82 exit 0. --ran: 'Run reconciliation — 82 derived, 82 run, 0 NOT-MEASURED, 0 UNRUN.' check-platform-checklist --changed-from origin/main: exit 0 (0 anchored files). First pass at 5516b68 (pre-merge): 81 exit 0, check:dual-build-cjs-loads exit 3 PREREQUISITE NOT MET (35 packages without dist); exit 0 on the merged head after the wider build. check:adr-0087-registration: exit 0, not-required (no-migration-prescription) accepted. PR check-runs on 12a6f2e: 67 runs, 56 success, 11 skipped, 0 failure; required: Lint & Repo Gates success, TypeScript Type Check success, Test Core success (8/8 shards), Build Core success, Governed Surface Queue Guard success, Lint UI skipped, Type Check UI success, Test UI success (16/16), Build & E2E UI success, Live E2E UI success, Dogfood Regression Gate success; Check Changeset success. Log: project files pm-orders/spec/33522-gates-ran.txt.",
"dogfood_battery": "12a6f2e1 · os-verify-lock: VERDICT command-exit 0 · held the lock 1851s · Test Files 467 passed | 3 skipped (470) · Tests 3950 passed | 42 skipped (3992) · no failure",
"mcp_calls": "0 — reads went through the public REST API (curl, gh api GET)",
"api_writes": "2 — fleet-write relay: pr_create (PR #33583, read back identical, 7822 bytes; no assignees, no labels sent) and this os-dev-report comment (post-stamped). git push is not a REST write.",
"open_questions": [
{
"question": "ADR-0087 marker: land on not-required (no-migration-prescription) now, or hold behind PR #33520 and switch to runtime-export-retired @objectstack/spec/data#describeManagedApiMethodConflicts with a FROM/TO line?",
"options": [
"A land as is: the only disposition main's gate admits for a subpath export retirement; the why names that runtime-export-retired cannot verify a subpath at this revision",
"B mark Blocked-by #33520 (Tier H, awaiting the maintainer) and, once it lands, rewrite the marker and add the FROM/TO line (measured green under #33520's gate)"
],
"recommendation": "A, because it is the honest disposition on main today, the card is p3 dead surface, and B parks it behind a Tier H PR for a marker swap only; if #33520 happens to land first, the seat can swap the marker in one commit (Acceptance notes say so)."
}
],
"security_findings": "none",
"out_of_scope_findings": [
"carrier: none · noted, not filed — packages/lint/CHANGELOG.md (two released entries) names 'the spec's describeManagedApiMethodConflicts sentence'; release-owned history, true of its release, not edited (Acceptance notes)."
]
}
Activity
objectstack-fleet commentedon Nov 14, 2026
domain:spec#4 · os-project-manager · session_01FEkQ5mecqk8M5q9vjKj6aS
Path: none
Triage: first touch (lane self-triage) →
domain:spec· p3 ·pm:queue· 2026-11-14T23:52Z⛔ Not a claim.
Ruling-ref: 「定级你可以自己决定」 (the maintainer, 2026-11-01: seats self-grade any card and record it on the card).
The filing seat (
domain:spec#1, same account) set the lane and grade labels with no triage audit; this records the grade. The exportdescribeManagedApiMethodConflicts(packages/spec/src/data/managed-api-affordance.ts) has no caller outside its own test in objectstack, hotcrm or gallery (git grep, plus an org code search: 4 hits, all the definition, its test and the two generated surface snapshots). Dead published surface whose sentence is wrong on asyncedobject: p3, lane spec. Triage may re-grade.objectstack-fleet commentedon Nov 14, 2026
domain:spec#4 · os-project-manager · session_01FEkQ5mecqk8M5q9vjKj6aS
Claim: PM loop round 2
Session:
session_01FEkQ5mecqk8M5q9vjKj6aS(seat); card threadsession_01FEkQ5mqr24gy2eNyrmiqJdAccount:
os-project-managerBranch:
claude/project-thread-8c9p9xWorktree: the card thread's own checkout
Domain:
domain:specSeat:
domain:spec#4File surface:
packages/spec/src/data/managed-api-affordance.ts,packages/spec/src/data/managed-api-affordance.test.ts, generatedpackages/spec/api-surface/data.jsonandpackages/spec/export-origins/data.json, root.changeset/, and an ADR-0087 entry underpackages/spec/src/migrations/entries/only if the rule owes one (stop on breach; explain in the report)Container & model:
S,mode:thread,model: default tier (dispatch-gates --tier: no path-derived mandate; build at default, review at CONTRACT_REVIEW_TIER by the seat: public-surface narrowing),effort: mediumClause-②: no (narrowing)
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: 6886170312
Premise: holds
Serial constraints cleared: none (PR #33517 of
domain:spec#1, the card's source, touchespackages/lint/src/validate-managed-api-methods.ts,rule-explanations.tsandpackages/objectql/src/registry.ts, not this file; no other opendomain:specclaim declaresmanaged-api-affordance.tsor the two surface snapshots)Route: Retire (the card leaves the route to the lane, measured first). Seat measurement on
origin/mainf068cde8: the export has no caller outside its own test in objectstack (incl.ui/), hotcrm or gallery; an org code search returns only its definition, test and the two generated snapshots. The cloud repo cannot be read from this seat; a cloud import would fail loudly at type-check on upgrade. Any consumer found by the dev ⇒ fork, not a silent switch to "align". Ruling-ref: 「开放 p3卡认领」 (Leehom, 2026-11-14T21:21Z).objectstack-fleet commentedon Nov 15, 2026
domain:spec#4 · os-project-manager · session_01FEkQ5mqr24gy2eNyrmiqJd
os-dev-report
{
"issue": 33522,
"status": "done",
"branch": "claude/project-thread-8c9p9x",
"pr": "#33583",
"session": "session_01FEkQ5mqr24gy2eNyrmiqJd",
"premise_still_valid": true,
"summary": "Route Retire. Premise re-verified on origin/main e3f0cfd: git grep over the whole objectstack tree (ui/, examples/, docs, skills included) finds describeManagedApiMethodConflicts only in its definition, its own test, the two generated snapshots and two released packages/lint/CHANGELOG.md entries (prose); hotcrm and gallery origin/main: 0 hits; org code search: 4 hits, all in objectstack (definition, test, two snapshots). No consumer, so no fork. Removed the function and its docblock from packages/spec/src/data/managed-api-affordance.ts and its 4-case describe block plus import from the test; checkManagedApiMethodAffordances (callers: objectql registry.ts, lint validate-managed-api-methods.ts and four platform/plugin tests), ManagedApiMethodConflict and MANAGED_WRITE_VERB_AFFORDANCE stay. The file header's 'exactly two consumers' describes the predicate and stays true, so no comment edit was owed. Regenerated api-surface/data.json and export-origins/data.json from a real d.ts build (one line each). Changeset .changeset/33522-retire-describe-managed-api-method-conflicts.md: @objectstack/spec patch, Clause-②: no (narrowing), Metadata-protocol: none, BREAKING banner, the caller's fix in a sentence. Rule applied: AGENTS.md Post-Task Checklist step 3 (non-protocol breaking change ships patch with banner and ADR-0087 disposition). Mechanism hypothesis measured: a removed export owes a disposition, not a ledger entry; check:adr-0087-registration checks it. runtime-export-retired @objectstack/spec#describeManagedApiMethodConflicts is REFUSED on main at predicate 1 retired-from-entry ('not exported by packages/spec/src/index.ts at the merge base': the gate reads the root entry only and the name lives on the ./data subpath), so the admissible marker on main is not-required (no-migration-prescription), with no FROM/TO block. Under open PR #33520's gate (head 27e5e2e) the subpath operand @objectstack/spec/data#describeManagedApiMethodConflicts verifies; both probes ran on a throwaway commit, restored and verified (blob hash and HEAD equal, git diff HEAD empty). Branch merged with origin/main 8e63ed8 before pr_create (main had moved packages/spec); main has moved 13 more commits since, not chased.",
"tests": "Head 12a6f2e. pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2 (lock): exit 0, Test Files 931 passed (931), Tests 28421 passed | 1 todo. spec typecheck: exit 0. spec check:generated after the merge: exit 0 (includes check:test-typecheck OK, 52 files / 240 errors / 131 pinned signatures). git grep describeManagedApiMethodConflicts excluding CHANGELOG.md and .changeset: 0 hits; built dist/data/index.d.mts: 0. No ablation: no tested behaviour changes (removal of an uncalled function and its own tests).",
"gates": "Local: the 82 commands dispatch-gates --commands --repo objectstack-ai/objectstack derives on head 12a6f2e, exit captured before any pipe: 82 exit 0. --ran: 'Run reconciliation — 82 derived, 82 run, 0 NOT-MEASURED, 0 UNRUN.' check-platform-checklist --changed-from origin/main: exit 0 (0 anchored files). First pass at 5516b68 (pre-merge): 81 exit 0, check:dual-build-cjs-loads exit 3 PREREQUISITE NOT MET (35 packages without dist); exit 0 on the merged head after the wider build. check:adr-0087-registration: exit 0, not-required (no-migration-prescription) accepted. PR check-runs on 12a6f2e: 67 runs, 56 success, 11 skipped, 0 failure; required: Lint & Repo Gates success, TypeScript Type Check success, Test Core success (8/8 shards), Build Core success, Governed Surface Queue Guard success, Lint UI skipped, Type Check UI success, Test UI success (16/16), Build & E2E UI success, Live E2E UI success, Dogfood Regression Gate success; Check Changeset success. Log: project files pm-orders/spec/33522-gates-ran.txt.",
"dogfood_battery": "12a6f2e1 · os-verify-lock: VERDICT command-exit 0 · held the lock 1851s · Test Files 467 passed | 3 skipped (470) · Tests 3950 passed | 42 skipped (3992) · no failure",
"mcp_calls": "0 — reads went through the public REST API (curl, gh api GET)",
"api_writes": "2 — fleet-write relay: pr_create (PR #33583, read back identical, 7822 bytes; no assignees, no labels sent) and this os-dev-report comment (post-stamped). git push is not a REST write.",
"open_questions": [
{
"question": "ADR-0087 marker: land on not-required (no-migration-prescription) now, or hold behind PR #33520 and switch to runtime-export-retired @objectstack/spec/data#describeManagedApiMethodConflicts with a FROM/TO line?",
"options": [
"A land as is: the only disposition main's gate admits for a subpath export retirement; the why names that runtime-export-retired cannot verify a subpath at this revision",
"B mark Blocked-by #33520 (Tier H, awaiting the maintainer) and, once it lands, rewrite the marker and add the FROM/TO line (measured green under #33520's gate)"
],
"recommendation": "A, because it is the honest disposition on main today, the card is p3 dead surface, and B parks it behind a Tier H PR for a marker swap only; if #33520 happens to land first, the seat can swap the marker in one commit (Acceptance notes say so)."
}
],
"security_findings": "none",
"out_of_scope_findings": [
"carrier: none · noted, not filed — packages/lint/CHANGELOG.md (two released entries) names 'the spec's describeManagedApiMethodConflicts sentence'; release-owned history, true of its release, not edited (Acceptance notes)."
]
}
Generated by Claude Code