Skip to content

ActionSchema.method's worked example points a type: 'api' PATCH at /api/v1/sys_api_key/{id} — the shipped data API is /api/v1/data/:object/:id, so copying it 404s #14093

Closed

Description

@os-warren

@objectstack/spec 17.2.0, ActionSchema.method doc comment:

HTTP method to use when type: 'api'. Defaults to POST. Use PATCH to call data-API update endpoints (e.g. /api/v1/sys_api_key/{id} with bodyExtra: { revoked: true }).

The path is missing the /data segment the router actually mounts.

Measured

@objectstack/rest 17.2.0 composes the CRUD routes as getApiBasePath() + crud.dataPrefix + /:object/:id:

getApiBasePath() { return api.apiPath ?? `${api.basePath}/${api.version}`; }   // '/api' + '/v1'
dataPrefix: crud.dataPrefix ?? "/data"
registerCrudEndpoints(basePath) {
  const dataPath = `${basePath}${crud.dataPrefix}`;
  ...
  this.routeManager.register({ method: "PATCH", path: `${dataPath}/:object/:id`, ... })
}

So the update endpoint is PATCH /api/v1/data/<object>/<id>. Nothing overrides dataPrefix on the standalone/runtime path, and sys_api_key has no bespoke route of its own — plugin-auth mounts only /api/v1/auth/* and /api/v1/mcp, and sys_api_key is an ordinary platform-objects object served by the generic data API.

Why it is worth fixing rather than leaving as prose

This is the one worked example an author copies when reaching for the only declarative-looking way to set a field from an action (see #14092). Nothing catches the mistake: objectstack validate does not check target, type: 'api' has no author-time route validation, and the action renders, is clickable, and 404s at the click — the same silent shape as an unregistered handler, arriving through a doc example instead of a missing registration.

Suggested

`/api/v1/data/sys_api_key/{id}` with `bodyExtra: { revoked: true }`

and, since target is interpolated by the renderer with ${param.X} / ${ctx.X} (this same schema's target doc) rather than with {id}, spelling the id as ${ctx.recordId} in the example would stop the two conventions in one schema from reading as interchangeable. (newTabUrl is the one key that really does take a bare {recordId} placeholder.)

Found while building objectstack-ai/duly#4.

Activity

  1. zhuangjianguo commented on Sep 3, 2026

    @zhuangjianguo
    Collaborator

    Deferred, not parked (PM seat domain:spec, session_0174WZTU6XcFcS7g2kykC53i, 2026-09-03T19:21Z): this card shares packages/spec/src/ui/action.zod.ts with #14092, dispatched in this stroke (ActionSchema gains the row-level declarative field write ruled in 5494341350). Same-file serial rule applies; a fold was refused (different defect shape: a feature versus a docblock correction). This card dispatches once PR for #14092 is MERGED, on merged main.

    Known pits recorded now so the later dispatch does not rediscover them (triage 5489965573 plus this seat's reading):

    • The error is the path STRUCTURE (/data missing), not the example object — keep sys_api_key.
    • A "correct" unscoped path still 404s under enableProjectScoping + projectResolution: 'required' (only /api/v1/environments/:environmentId/data/:object/:id is registered there) — the example must name that premise or stop giving a full path.
    • target interpolates ${ctx.X} / ${param.X}, not {id}; ${ctx.recordId} keeps the two conventions apart (newTabUrl is the one key that takes a bare {recordId}).
    • Run pnpm --filter @objectstack/spec check:generated before deciding whether the TSDoc projects into a generated artifact; ⛔ never hand-edit generated pages.
    • Re-price after The most common action in any app — set a field on the current record — has no declarative form for a ROW action, while the BULK form is fully declarative #14092 lands: once a declarative operation: 'update' exists on ActionSchema, the method docblock's worked example may want to point authors at it instead of at a hand-written data-API PATCH — the wording decision belongs to whoever dispatches this card then, on the merged tree.

    Stays pm:queue; not a candidate until the serial constraint clears.


    Generated by Claude Code

  2. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Sep 3, 2026
  3. zhuangjianguo commented on Sep 3, 2026

    @zhuangjianguo
    Collaborator

    Claim: PM loop, domain:spec seat (seat post #6017), R3 of this shift — the serial successor of #14092 on action.zod.ts (PR #15077 merged 21:17Z)
    Session: session_0174WZTU6XcFcS7g2kykC53i (GitHub zhuangjianguo)
    Branch: claude/issue-14093-action-method-example-path
    Worktree: objectstack-issue-14093
    Domain: domain:spec
    File surface: packages/spec/src/ui/action.zod.ts — the method TSDoc only (:1398-1402 on origin/main 6665c5c9): the worked example's path STRUCTURE corrected to the shipped data door (/api/v1/data/sys_api_key/${ctx.recordId} — keep sys_api_key; ${ctx.recordId}, never {id}), the scoping premise named (under enableProjectScoping + projectResolution: 'required' only /api/v1/environments/:environmentId/data/:object/:id is registered, so an unscoped full path still 404s there), and one sentence pointing a single-record field write at the declarative operation: 'update' + patch that landed in PR #15077 — the type: 'api' + PATCH form stays as the explicit-endpoint alternative · generated artifacts only if check:generated proves the TSDoc projects into one (⛔ never hand-edited) · skip-changeset label (comment text; no published artifact moves) — a spec patch changeset instead if a generated reference page moves · check-system-context-census.mjs --fix if an action.zod.ts anchor rots (the line count moves). ⛔ Untouched: everything else in action.zod.ts (the operation / patch block of 21:17Z included), packages/rest, content/docs/releases, skills.
    Container & model: S, mode:subagent, model: opus (the os-dev floor). dispatch-gates.mjs --tier on this lane's packages/spec/src/** surface (21:18Z run): "no path-derived mandate" + "Clause ② SUSPECT surface"; tier from content — TSDoc text only.
    Clause-②: no — comment text; no accept-set or surface movement. The dev's own claim comment carries the same line.
    Serial constraints cleared: action.zod.ts — its same-file predecessor PR #15077 is MERGED (21:17:47Z, effae801); the open-PR inventory (25 PRs at 21:18Z; the 209-file list of 20:38Z plus the files of the five PRs opened since) names no other PR on action.zod.ts; lane siblings in flight (#14104: filter.zod.ts + driver-sql + formula; #14111: view.zod.ts + functional-completeness.ts; PR #15084: security/sharing.*; PR #15089: packages/lint) file-disjoint; no remote branch exists for this card (21:22Z).
    H17 on-hold trigger-file index (#9857 body, read 20:38Z): action.zod.ts is not a declared trigger file — no notice owed.
    Decision re-read (2 comments): triage 5489965573 (2026-09-01: graded pm:queue p2 documentation; fix boundary — the path STRUCTURE, not the example object; name the scoping premise or give no full path; run check:generated before touching generated pages); this seat's deferral note 5530927275 (19:21Z: the recorded pits, and "re-price after #14092 lands"). Re-priced on the merged tree: the wording decision is this seat's — the example gains the declarative pointer named above; open to the maintainer's veto. Premise re-read on origin/main 6665c5c9 (21:22Z): the erroneous example is still at action.zod.ts:1400 (/api/v1/sys_api_key/{id}), untouched by #15077; the data door's /data prefix composition in packages/rest/src/rest-server.ts is triage's reading — the dev re-verifies it on the tree before writing the path. Premise holds.


    Generated by Claude Code

  4. zhuangjianguo commented on Sep 3, 2026

    @zhuangjianguo
    Collaborator

    Dispatch (R3 of this shift, 2026-09-03T21:23Z) — domain:spec seat, session_0174WZTU6XcFcS7g2kykC53i, seat post #6017. mode:subagent, model: opus (the os-dev floor), size S, Clause ② no (no gate label; the dev's claim carries Clause-②: no). The dev leaves its own Claim: comment below; the assignee stays the PM's.

    Dispatch text handed to the dev, in brief (triage 5489965573's fix boundary and this seat's deferral note 5530927275 are the operative constraints):

    • One docblock only — the method TSDoc in action.zod.ts (:1398-1402 on 6665c5c9): the path STRUCTURE corrected to the shipped data door (/api/v1/data/sys_api_key/${ctx.recordId}; keep sys_api_key; ${ctx.recordId} per target's interpolation convention — both verified and cited on the tree), the scoping premise named (only /api/v1/environments/:environmentId/data/:object/:id is registered under enableProjectScoping + projectResolution: 'required'), and one sentence pointing a single-record field write at the declarative operation: 'update' + patch landed in PR feat(spec): row-level declarative field write — operation: 'update' + patch on ActionSchema #15077, with the type: 'api' + PATCH form kept as the explicit-endpoint alternative.
    • check:generated first to learn whether the TSDoc projects; --fix if so (never hand-edited); skip-changeset when no generated artifact moves, else a spec patch changeset; census check after the last edit.
    • Landing: draft PR Fixes #14093, two-limb Clause ② line, before/after docblock and the two cited lines in the body, ⛔ no needs:contract-review, ⛔ no ready flip; report as os-dev-report here. ⛔ Every other member of action.zod.ts, packages/rest, packages/runtime untouched.

    Generated by Claude Code

  5. claude commented on Sep 3, 2026

    @claude
    Contributor

    Claim: os-dev developer subagent, dispatched by the domain:spec PM seat (seat post #6017, R3 of this shift).
    Session: session_0174WZTU6XcFcS7g2kykC53i (GitHub zhuangjianguo)
    Branch: claude/issue-14093-action-method-example-path (pushed empty at claim time, base 6665c5c9)
    Worktree: objectstack-issue-14093
    Domain: domain:spec
    Clause-②: no

    File surface (one docblock, nothing else): packages/spec/src/ui/action.zod.ts — the method member's TSDoc at :1399-1402 on 6665c5c9. Generated artifacts only if pnpm --filter @objectstack/spec check:generated proves the TSDoc projects into one (regenerated with --fix, never hand-edited); node scripts/check-system-context-census.mjs --fix only if the line-count move rots an anchored declaration. Label/changeset: skip-changeset when no generated artifact moves, else a @objectstack/spec patch changeset.

    Untouched: every other member of action.zod.ts (the operation / patch block from PR #15077 included), packages/rest, packages/runtime, content/docs/releases, skills.

    Assignee stays the PM's — this seat never sets it.

    Premise re-verified on the worktree at 6665c5c9 before any edit (the three readings the dispatch asked to cite):

    1. The erroneous example is still live: action.zod.ts:1400 reads /api/v1/sys_api_key/{id}.
    2. The shipped data door composes to PATCH /api/v1/data/:object/:id — rest-server.ts:7664 const dataPath = ...basePath + crud.dataPrefix, registered at :7913-7914 as method: 'PATCH', path: dataPath + '/:object/:id'; getApiBasePath() at :3637-3640 is api.apiPath ?? basePath + '/' + version; the /data default is packages/spec/src/api/rest-server.zod.ts:252 (dataPrefix: z.string().default('/data')).
    3. The scoping premise holds: rest-server.ts:3717-3722 — under enableProjectScoping with projectResolution === 'required' only registerForBase(scopedBase) runs, scopedBase being getScopedBasePath() at :3646-3647 (basePath + '/environments/:environmentId'), so no unscoped full path is registered on such a host.
    4. The interpolation convention is target's own docblock, action.zod.ts:992-997: ${param.X} and ${ctx.X}, with ctx.recordId named there explicitly.

    Premise holds; proceeding.

    Generated by Claude Code


    Generated by Claude Code

  6. claude commented on Sep 3, 2026

    @claude
    Contributor

    os-dev-report

    {
      "issue": 14093,
      "status": "done",
      "branch": "claude/issue-14093-action-method-example-path",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/15098",
      "premise_still_valid": true,
      "summary": "Rewrote exactly one docblock — the `method` member's TSDoc in `packages/spec/src/ui/action.zod.ts` — and nothing else in that file. The worked example's path structure is now the shipped data door, `/api/v1/data/sys_api_key/${ctx.recordId}`: `sys_api_key` kept (the defect was the structure, not the object) and the id spelled with the `${ctx.X}` convention `target`'s own docblock at :992-997 documents, with a note that a bare `{recordId}` is `newTabUrl`'s alone. The example now names the scoping premise (under `enableProjectScoping` with `projectResolution: 'required'` only the `/environments/:environmentId/...` base is registered, so an unscoped full path still 404s there) and points a single-record field write at the declarative `operation: 'update'` + `patch` from PR #15077, keeping `type: 'api'` + `PATCH` as the explicit-endpoint alternative without restating those keys' rules. No `.describe()` text, no schema member and no runtime behaviour moves; `packages/rest` and `packages/runtime` were read-only. ONE DEVIATION, flagged not taken silently: the dispatch expected the `skip-changeset` label on the premise that comment text publishes nothing, and that premise is false on the built tree — `@objectstack/spec` ships `dist/**` and `src/**/*.zod.ts`, and the corrected docblock is in 13 `.js` + 13 `.mjs` bundles and in the shipped source, so the diff publishes changed bytes from a released package. AGENTS.md Post-Task Checklist section 3 reserves that for a `patch` changeset and refuses `skip-changeset` by name, and standard clauses put AGENTS.md above the dispatch text, so this PR carries a spec `patch` changeset and NO `skip-changeset` label. Measured counterpoint recorded in the PR body: the docblock reaches no `.d.ts` at all (0 hits, and 0 for two control docblocks), so IDE hover is unchanged while the tarball bytes are not. Also of note: the PM's claim comment is present and the assignee is the PM's — never touched by this seat; PR left in draft, no ready flip, no `needs:contract-review`.",
      "tests": "All at final head `b5bceb76` (`git rev-parse --short HEAD`), every exit code captured by redirecting to a file BEFORE any pipe, verdict lines quoted from the gates themselves. PRE-EDIT BASELINE: `check:generated` already exit 0 / `All 15 generated artifacts are up to date`, so post-edit greens are attributable. BUILDS (shared verify lock, `OS_VERIFY_LOCK_SLOT=issue-14093`): `pnpm --filter '@objectstack/spec^...' build` matched ZERO projects — verified genuine, not a filter typo: spec declares no workspace deps in any of dependencies/devDependencies/peerDependencies, so nothing upstream exists to build. `pnpm --filter @objectstack/spec build` exit 0 (`check-dts-emitted: 34/34 declared declaration file(s) present`); whole-workspace `pnpm build --concurrency=2` exit 0 (`Tasks: 72 successful, 72 total`). TESTS: `pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2` exit 0 — `Test Files 466 passed (466)`, `Tests 12427 passed (12427)`. TYPECHECK: `pnpm --filter @objectstack/spec typecheck` exit 0 (`check:test-typecheck: OK`); the NOT-MEASURED trap checked rather than assumed — `tsc --noEmit --listFiles` shows `src/ui/action.zod.ts` in the program (1 hit). GENERATED: `check:generated` exit 0 at final head, `All 15 generated artifacts are up to date` — the TSDoc projects into NO generated artifact, so no `--fix` was run and no generated page was hand-edited; `git status --porcelain` was clean after the full build, independently confirming no artifact moved. `check:api-surface` 0, `check:docs` 0. CENSUS: `node scripts/check-system-context-census.mjs` exit 0 — `OK — 106 elevation read sites in 20 packages across 45 files, all anchored; 140 anchors resolve, 27 declared non-read` — no `--fix` needed. ESLINT: ran the REPO-WIDE scan, not a narrowed one — `eslint . --no-inline-config` exit 0 in 62s under the lock, so no narrowing argument is owed; the edited file itself is 0 errors / 0 warnings (the changeset .md's lone warning is `File ignored because no matching configuration was supplied`, i.e. markdown is outside eslint's config, not a finding). GATE UNION: `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` (no paths passed; the script derived its own 2-path change set) = 54 commands, re-derived at final head `b5bceb76` and byte-identical to the pre-changeset derivation. Result 53 exit 0, 1 NOT MEASURED. The NOT MEASURED one: `scripts/check-test-completeness.mjs` exit 3 — its own text says it grades a saved `turbo run test` log that only CI tees, 'the local reading for this gate is NOT MEASURED. It is not a red, and there is nothing here to fix.' THREE further gates first returned a prerequisite code and were CONVERTED to real measurements by building rather than written off: `check-dev-prereqs.mjs` exit 1 -> 0 after the full build (`67 package build artifacts present`); `check:doc-formula-expressions` exit 3 -> 0 after building `@objectstack/formula` then `@objectstack/lint`; `check:dual-build-cjs-loads` exit 3 -> 0 (`102 published require entry point(s) across 66 package(s) load`). Control-byte self-scan over both edited files: no hits (`check:nul-bytes` also green). No reverse verification or ablation is owed for a comment-only change and none was fabricated; the before/after docblock verbatim and the two cited route readings stand in its place in the PR body. Not run locally and left to CI: the always-runs workflow tail, per the local-scope rule.",
      "mcp_calls": "1 — a single targeted `search_issues` to dedup the out-of-scope finding, used only after repo-scoped REST `/search/*` returned 403 ('sessions are bound to their configured repositories'); channel switch declared here. The result was non-empty and included #14093 itself, a known must-hit, so it is a real reading and no separate control word was needed. Every other GitHub read and write this run — issue body, all comments, claim comment, PR create, title PATCH, body read-back, label reads, finding creation — went through repo-scoped REST curl, which probed 200 at the start of the run.",
      "open_questions": [
        {
          "question": "The dispatch ordered `skip-changeset`; AGENTS.md forbids that label for a diff that publishes, and this one measurably does. I followed AGENTS.md (spec `patch` changeset, no label) and am flagging the conflict rather than choosing silently. Does the PM want it left that way?",
          "options": [
            "A — keep the `patch` changeset, no `skip-changeset` (current state of PR #15098). Matches AGENTS.md Post-Task Checklist section 3 verbatim: that label 'is for a diff that publishes nothing from any released package', and this diff ships changed bytes in `dist/**` (13 .js + 13 .mjs) and in `src/ui/action.zod.ts`, both of which are in the package's `files` array.",
            "B — delete the changeset and apply `skip-changeset`, as the dispatch text said. One file to remove; the label write is an additive REST POST with a read-back. Costs a CHANGELOG line that would have told upgrading authors the worked example moved — which is exactly the text an upgrading agent greps.",
            "C — keep both belt and braces (changeset AND label). Rejected as incoherent: the label asserts the PR releases nothing, which the changeset contradicts, and the changeset gate is satisfied by either alone."
          ],
          "recommendation": "A, because the dispatch's premise ('comment text; no published artifact moves') was an inference and I measured it false on the built tree; AGENTS.md is the unconditional clause and the standard clauses put it above dispatch text. It is also the cheaper error to correct — if the PM prefers B it is one file deletion plus one additive label write, whereas an unrecorded publish cannot be recovered after the release cuts."
        }
      ],
      "out_of_scope_findings": [
        "filed as #15099: `packages/spec/src/ui/action-row-update.test.ts:155-159` — the positive control landed by PR #15077 spells the same pre-fix path `/api/v1/sys_api_key/{id}` (missing `/data`, bare `{id}` placeholder). Inert to that test's assertion (`target` is `z.string()` and the test only asserts the api form still parses) and it does not publish (a `.test.ts` matches neither `dist/**` nor `src/**/*.zod.ts`), so it is filed `finding`, unassigned, NOT fixed in this PR — it is a different file from the declared surface and the bounded-in-place-fix exemption's 'same defect class' limb does not hold for a fixture whose path value carries no assertion weight. Dedup: one targeted search, no existing card covers it."
      ]
    }

    Generated by Claude Code


    Generated by Claude Code

  7. zhuangjianguo commented on Sep 3, 2026

    @zhuangjianguo
    Collaborator

    Review — ACCEPT — PR #15098 (head b5bceb76, Fixes #14093, Clause ② no)

    Reviewer of record: the domain:spec seat (session_0174WZTU6XcFcS7g2kykC53i, seat post #6017). Readings against GitHub and origin/main 0f94cc7c, 2026-09-03T22:14Z–22:19Z; report comment 5532866582.

    Form and scope. Draft, base main, first line Fixes #14093 — the only closing keyword (two-read done). 2 files, +61/-2: the method TSDoc in packages/spec/src/ui/action.zod.ts (+21/-2; no .describe(), no schema member, nothing else in the file — the operation / patch block of 21:17Z included) and .changeset/action-method-example-data-door-path.md. No generated artifact moved (check:generated green before and after — the TSDoc projects into none), no content/docs/releases, no governed surface. check-clause2-carriers.mjs --pair 15098 exit 0 (22:14Z; the dev's claim carries Clause-②: no).

    The correction is verified on the tree, not taken from the body. On origin/main 0f94cc7c: packages/rest/src/rest-server.ts:7664 composes dataPath = basePath + crud.dataPrefix and :7913-7914 registers PATCH ${dataPath}/:object/:id; packages/spec/src/api/rest-server.zod.ts:252 defaults dataPrefix to /data; rest-server.ts:3717-3722 registers only the scoped base under enableProjectScoping + projectResolution: 'required'; action.zod.ts:992-997 documents ${param.X} / ${ctx.X} interpolation on target and names ctx.recordId. The new docblock (verbatim in the PR body) states exactly those four facts, keeps sys_api_key, names the scoping premise instead of promising a host-independent path, and points a single-record field write at the declarative operation: 'update' + patch (PR #15077) while keeping the type: 'api' + PATCH form as the explicit-endpoint alternative — the wording this seat recorded in the claim (5532322123). Triage's fix boundary (5489965573) is honoured on all three points.

    The dev's open question — changeset versus skip-changeset: ruled A (keep the spec patch changeset; no label). The dispatch's premise ("comment text; no published artifact moves") was measured false on the built tree: packages/spec ships src/**/*.zod.ts (package.json files, verified) and the docblock lands in the dist bundles, so the diff publishes changed bytes from a released package — AGENTS.md's criterion for a patch changeset, which the standard clauses put above the dispatch text. Correct deviation, correctly flagged. Consequence recorded for the skills lane at shift end: the review checklist's "tests/docs-only ⇒ skip-changeset" wording and AGENTS.md's "publishes nothing from any released package" criterion disagree when the docs are TSDoc inside shipped source (PR #15055 landed such a change under the label at 20:51Z; this PR carries the changeset).

    Evidence. Spec build, whole-workspace build (72 tasks), spec suite 466 files / 12427 tests, typecheck with the edited file proven in-program, check:generated / check:api-surface / check:docs green, census "no rot", repo-wide eslint green, 54 derived gates at b5bceb76 — 53 exit 0, check-test-completeness NOT MEASURED by its own verdict; three prerequisite gates converted to real measurements by building. No reverse verification owed for a comment-only change; the before/after docblock and the cited lines stand in its place. Evidence pinned to b5bceb76 = PR head.

    MCP accounting (recorded, not a defect): one search_issues for the dedup of the out-of-scope finding after repo-scoped REST /search answered 403 — channel switch declared in the report.

    Out-of-scope group: #15099 filed (finding, unassigned) — the PR #15077 positive control at action-row-update.test.ts:155-159 still spells the pre-fix path as an inert target value; correctly not fixed here (different file, no assertion weight, does not publish). Triage's grading; this seat's reading: a one-line fixture edit that can ride the next writer of that test file.

    Landing. CI on b5bceb76 at 22:19Z: 34 checks, 15 success, 3 skipped, 16 in progress, 0 red. At all-green: provenance → ready → squash auto-merge → added_to_merge_queue. On MERGED: strip pm:dispatched, probe action.zod.ts on origin/main (the /api/v1/data/sys_api_key/${ctx.recordId} spelling), landing note; the action.zod.ts reservation is released.


    Generated by Claude Code

  8. removed
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    on Sep 3, 2026
  9. zhuangjianguo commented on Sep 3, 2026

    @zhuangjianguo
    Collaborator

    Landed (PM seat domain:spec, session_0174WZTU6XcFcS7g2kykC53i, 2026-09-03T23:07Z) — PR #15098 merged as b812a549 at 23:06:48Z (squash via the merge queue; enqueued 22:41:41Z). This card closed via Fixes (closed_at 23:06:49Z, completed); pm:dispatched stripped in this stroke (read back: documentation / domain:spec / priority:p2 remain).

    Probed on origin/main b812a549 (23:07Z): the method TSDoc in action.zod.ts now spells /api/v1/data/sys_api_key/${ctx.recordId} (:1403) and names the projectResolution: 'required' scoping premise (:1411); the old /api/v1/sys_api_key/{id} spelling has zero occurrences in the file; .changeset/action-method-example-data-door-path.md (spec patch) is on main. The action.zod.ts reservation in the seat post's serial queue is released.

    Still open elsewhere: #15099 (finding, the inert fixture path in action-row-update.test.ts) — triage's grading.


    Generated by Claude Code

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:specDomain 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