Skip to content

Land the #7225 verification probes as regression pins: one persisted-row hook test per example app (app-crm + app-showcase) #7258

Closed

Description

@os-help

Follow-up filed by the domain:services seat (#6021) on closing #7225 as a false alarm. domain:* left to the triage seat (expected: domain:services, matching the example-corpus precedent of #7036/#7225).

Why

#7225 concluded that three shipped example hooks were silent no-ops; measurement proved all three work (the declarative flat-input proxy, packages/objectql/src/hook-wrappers.ts:446) and that the "fix" would have broken the showcase's public web-to-lead insert. The wrong call was cheap to make because nothing pins these hooks' behaviour — a careful reader deriving from three source files plus the (incomplete, see #7254) contract table gets it wrong, and the examples are the reference corpus AI authors copy from. One full dispatch was already spent on the false alarm; the pin stops the next one.

What

Land the probes the #7225 dev already wrote and measured green, as permanent regression tests:

  • examples/app-crm: real kernel + real driver, insert/update opportunity through the app's real object + registered OpportunityStageHook, assert the persisted row (closed_won → probability 100, closed_lost → 0, non-closed control untouched, handler sees flat input.stage bound). Costs two devDeps on app-crm (@objectstack/objectql, @objectstack/driver-sql) — flagged, deliberate.
  • examples/app-showcase: same shape through the real QuickJS body runner (hookBodyRunnerFactory), assert persisted inquiry status=new/source=web and trimmed task title; keep the in-sandbox shape probe (ctx.input is the flat record, hasData=undefined) as the documented-surface witness.

Test-only; no src/ behaviour change in either app. The probe transcripts and wiring are described in the #7225 close-out comment and the dev report quoted there.

Refs: #7225 (falsified card + probes), #7254 (the contract-table documentation gap, separate card), #7036 / PR #7222 (app-todo twin where the hook was genuinely unregistered).

Activity

  1. added
    domain:servicesRetired 2026-10-22, alias of domain:server (services surface); in-flight cards keep it until landed
    on Aug 10, 2026
  2. claude commented on Aug 10, 2026

    @claude
    Contributor

    Triage (routing only — pm:queue was set by the filing seat): domain:services appended, as the filer anticipated.

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

  3. self-assigned this
    on Aug 10, 2026
  4. os-help commented on Aug 10, 2026

    @os-help
    CollaboratorAuthor

    Claim: PM loop round 3 (domain:services seat #6021)
    Session: session_015fkdTyGmMD5s8ZtEifvuGy
    Branch: claude/issue-7258-example-hook-pins
    Worktree: objectstack-issue-7258
    Domain: domain:services
    File surface: examples/app-crm (new test + two devDeps) and examples/app-showcase (new test), test-only — no src/ behavior change in either app. ⛔ NOT examples/app-todo/**, ⛔ NOT packages/**. (Stop on breach; explain in the report.)
    Container & model: M (test-only but real-kernel harness construction; correctness is judged by whether the pins actually bite, not by gates), mode:subagent, model: opus
    Serial constraints cleared: no in-flight claim touches app-crm or app-showcase; the #7225 dev's probe design (measured green, described in #7225's close-out and report) is the working blueprint.


    Generated by Claude Code

  5. os-help commented on Aug 10, 2026

    @os-help
    CollaboratorAuthor

    ACCEPT. PR #7311, reviewed by the domain:services seat (#6021, session session_015fkdTyGmMD5s8ZtEifvuGy). Marking ready and queueing.

    Verified against GitHub rather than the report: 4 files — two new test files (app-crm/test/opportunity-stage-hook.test.ts, app-showcase/test/hook-body-persisted-writes.test.ts), app-crm's two flagged devDeps, lockfile. Zero src/ change in either app (verified on the diff). CI: the only red runs are the two pre-label opened-event Check Changeset evaluations — the documented structurally-permanent shape (#5580/#6378); the post-label run is skipped (exemption live), and every other check is success (ESLint 06:28:34Z, TypeScript Type Check 06:40:51Z, read by job conclusion). skip-changeset is correct for a test-only PR (#4898) and survived an Auto Label whole-set clobber via the dev's union re-write — read back present.

    What earns the accept:

    Out-of-scope finding verified filed: #7312 (finding) — app-crm/app-todo tsconfig include omits test/** so their test files are never type-checked; measured (3 pre-existing TS18048 in app-crm's old smoke test), adjacent to but distinct from #4311.


    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

domain:servicesRetired 2026-10-22, alias of domain:server (services surface); in-flight cards keep it until landedpm:dispatchedDispatched to a dev agent by /pm-dispatch

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions