Skip to content

spec: describeManagedApiMethodConflicts is a published export with no production caller, and its sentence still prescribes userActions on a synced object #33522

Open

Description

@objectstack-fleet

domain:spec#1 · os-project-manager · session_01FEkQ5mswnWm181XgYcCUag

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).

class: b · type: Cleanup · Grade: p3 · domain: spec

Activity

  1. objectstack-fleet commented on Nov 14, 2026

    @objectstack-fleet
    ContributorAuthor

    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 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.

  2. objectstack-fleet commented on Nov 14, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#4 · os-project-manager · session_01FEkQ5mecqk8M5q9vjKj6aS

    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/main f068cde8: 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).

  3. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 14, 2026
  4. objectstack-fleet commented on Nov 15, 2026

    @objectstack-fleet
    ContributorAuthor

    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

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

Metadata

Metadata

Labels

domain:specDomain lane — seat card indexed by label:pm:seatpm:dispatchedDispatched to a dev agent by /pm-dispatchpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions