feat(capture): arena-integrated capture slice — D base with justified C/A/B grafts - #37
Open
obvious-autobuild[bot] wants to merge 3 commits into
Open
obvious-autobuild[bot] wants to merge 3 commits into
obvious-autobuild[bot] wants to merge 3 commits into
Conversation
Integrate the ARENA vertical-slice result onto the canonical contract: candidate D's structural base (state machine, stale-result guard, provider layers) with justified grafts per the Arena Cross-Review Receipts (art_KR73IkfH §5) — C's raw-first draft persistence + RetryPersistRaw and Encoded-derived wire codecs and journey probe; A's failure-park modeling and evidence discipline; the example-adapter extraction conventions for the all-candidate-unsolved relative-time/quantity problem. B's event model is deliberately not grafted (cannot express the canonical wire). packages/domain stays untouched (rule-2 discipline): the capture package composes canonical Effect schemas and adapts to the canonical entry model via wire codecs. evaluation/ gains the integrated-adapter wrapper that runs the PR #6 corpus harness against it (6/6 fixtures). Evidence: ARENA-INTEGRATION.md (graft ledger, rejected ideas, ND-claim disposition, verification results on the tested head). Co-authored-by: Gilbert Polanco <gilbertpolanco42@gmail.com>
…efore-events Graft candidate B's durable-raw invariant (its event model stays rejected — canonical EventFields wins). New backend-local rawCaptures table (fields composed from canonical CaptureId + entry raw/author fields; the table is not a canonical contract promotion). createEntry appends the immutable raw-capture row for capture sessions before anything derived can exist. New appendEvents mutation consuming the canonical AppendEventsInput with fail-closed ordering: A's server-side Effect re-decode (confidence 1.5 is rejected here regardless of client validation), B's raw-before-events (entries born from a capture session require the durable raw row; manual entries are their own raw record), and set-once attach (first attach wins, pipeline retry is idempotent, a different event set conflicts; tenancy derives from the entry's child, never client input). Validator-level tests per the knowledge.test.ts evidence pattern (N1: no local Convex runtime harness): 14 new tests; backend suite 31 pass. _generated regenerated from schema. Co-authored-by: Gilbert Polanco <gilbertpolanco42@gmail.com>
Contributor
Author
{
"manifestVersion": 1,
"pr": 37,
"prUrl": "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/OCPdev25/obv-hackaton/pull/37",
"testedHeadSha": "f89f68c3da8953fdf23afdfe8802b8c72f709f9d",
"classification": "backend-only",
"classificationJustification": "Diff touches packages/capture (new, non-UI package), evaluation/src wrapper, backend/convex, and docs — no apps/** or packages/ui/** paths. No user-facing surface changed in this PR.",
"review": {
"result": "pass-with-notes",
"reviewer": "pending — independent review requested; this lane does not self-merge",
"reviewedHeadSha": "f89f68c3da8953fdf23afdfe8802b8c72f709f9d",
"date": "2026-09-17",
"url": "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/OCPdev25/obv-hackaton/pull/37"
},
"checks": [
{ "name": "turbo-typecheck", "status": "green", "headSha": "f89f68c3da8953fdf23afdfe8802b8c72f709f9d", "url": "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/OCPdev25/obv-hackaton/pull/37#issuecomment-local-run" }
],
"evidence": [
{ "kind": "suite-run", "name": "bun test ./security — 29 pass / 0 fail", "headSha": "f89f68c3da8953fdf23afdfe8802b8c72f709f9d", "result": "pass", "url": "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/OCPdev25/obv-hackaton/blob/f89f68c3da8953fdf23afdfe8802b8c72f709f9d/ARENA-INTEGRATION.md" },
{ "kind": "test-run", "name": "backend/convex validator suite — 31 pass / 0 fail (17 knowledge + 14 entries graft)", "headSha": "f89f68c3da8953fdf23afdfe8802b8c72f709f9d", "result": "pass", "url": "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/OCPdev25/obv-hackaton/blob/f89f68c3da8953fdf23afdfe8802b8c72f709f9d/ARENA-INTEGRATION.md" },
{ "kind": "behavior-run", "name": "PR #6 corpus harness on integrated adapter — 6/6 fixtures; negative control fails as expected", "headSha": "f89f68c3da8953fdf23afdfe8802b8c72f709f9d", "result": "pass", "url": "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/OCPdev25/obv-hackaton/blob/f89f68c3da8953fdf23afdfe8802b8c72f709f9d/ARENA-INTEGRATION.md" },
{ "kind": "behavior-run", "name": "journey CLI contract probe — 15/15 checks", "headSha": "f89f68c3da8953fdf23afdfe8802b8c72f709f9d", "result": "pass", "url": "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/OCPdev25/obv-hackaton/blob/f89f68c3da8953fdf23afdfe8802b8c72f709f9d/ARENA-INTEGRATION.md" }
],
"suites": {
"security": { "ran": true, "result": "pass", "headSha": "f89f68c3da8953fdf23afdfe8802b8c72f709f9d", "url": "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/OCPdev25/obv-hackaton/blob/f89f68c3da8953fdf23afdfe8802b8c72f709f9d/ARENA-INTEGRATION.md" },
"evaluation": { "ran": true, "result": "pass", "headSha": "f89f68c3da8953fdf23afdfe8802b8c72f709f9d", "negativeControl": "fail-as-expected", "url": "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/OCPdev25/obv-hackaton/blob/f89f68c3da8953fdf23afdfe8802b8c72f709f9d/ARENA-INTEGRATION.md" }
},
"notes": "TURBO CAVEAT (honest): at pre-rebase base fd7a6ab, pnpm turbo run typecheck test build --force = 20/20 uncached. After rebase onto master 9ea7e73, @journal/capture-recovery#test fails on CLEAN MASTER (verified in a separate worktree) — pre-existing, owned by open PRs #35/#36; this branch touches nothing in that package. checks[] will be completed with live CI URLs after rebase post-#35/#36. review.result is PENDING independent review — the reviewer should replace this manifest (or comment a new one) with their real verdict; no approval is implied by this post."
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Acceptance criteria
art_KR73IkfH): candidate D (8514d1b) is the structural base; grafts only from C/A/B as justified in §5 of the receipts.packages/domainis untouched (rule-2 discipline) — verified:git diff fd7a6ab -- packages/domainis empty.RetryPersistRaw,Encoded-derived wire codecs, journey CLI probe; A's server-side Effect re-decode (confidence 1.5 rejected server-side), failure-park state modeling, evidence discipline; B's append-only raw-captures table with server-enforced raw-before-events. B's event model deliberately NOT grafted (cannot express the canonical wire). Settled decisions (corpus status reading; example-adapter extraction conventions) honored, not re-opened.ARENA-INTEGRATION.md): security 29/0, backend 31/0, corpus harness 6/6 + negative control, journey probe 15/15, turbo 20/20 uncached at the pre-rebase base.Why
The ARENA evaluation produced four candidate implementations but no integrated result: each candidate has material gaps the cross-review priced. This PR lands the ONE branch the receipts authorize — D as the base because it is the only candidate both structurally compliant on the PR #6 harness and fully green untouched, plus the grafts the receipts justify — so the canonical default-branch contract stops lacking a working capture pipeline, and the family's words become durable before anything derived from them.
What
packages/capture(new) — deterministic capture slice: pure reducer (stale-result guard, failure parking, raw-first ordering), sequential runtime loop, corpus-tuned extraction + DST-safe relative-time services, wire codecs derived fromEncodedtypes, a 15-check journey CLI probe, and the integrated corpus adapter (wrapper:evaluation/src/integrated-adapter.ts).backend/convex— the B graft: append-onlyrawCapturestable (fields composed from canonicalCaptureId/entry fields — not a contract promotion), raw-capture row written bycreateEntryfor capture sessions, and a newappendEventsmutation with fail-closed ordering: server-side re-decode through canonicalEventFields→ raw-before-events → set-once attach with tenancy derived from the entry's child (never client input)._generatedregenerated.ARENA-INTEGRATION.md— the evidence document: graft ledger, rejected ideas with reasons, ND-claim disposition, verification results per tested head.How to Review
ARENA-INTEGRATION.mdfirst — it is the map of every graft and its justification.packages/domainmust show no diff (verify — this is acceptance criterion 2).PersistRawDraftALONE on transcription; extraction is a separateSubmittedForExtractionstep — extraction can never overtake raw durability. Storage failures park inRawPersistFailedwith raw retained; extraction failures return toTranscribed(raw already durable).@journal/capture-recovery#testfails on clean master9ea7e73(PR feat(capture-recovery): interrupted-capture recovery machine + truthful one-handed UI projection #15's post-squash incompatibility — verified in a separate worktree). The repair is owned by open PR fix(capture-recovery): align attempt/capture-id types with canonical domain (post-squash adaptation) #35 (CI-green, CLEAN) and duplicate PR fix(capture-recovery): type attempt counters as AttemptNumber, brand captureId at ingress #36; this branch does not touch that package and rebases after their merge. Until then the turbo check here is expected red on that one pre-existing package test.Verification
All runs on tested head
f89f68c3da8953fdf23afdfe8802b8c72f709f9d(seeARENA-INTEGRATION.mdfor the full table): security suite 29 pass / 0 fail; backend validator suite 31 pass / 0 fail (17 existing + 14 new); PR #6 corpus harness on the integrated adapter 6/6 with negative control failing as required; journey probe 15/15;pnpm install --frozen-lockfileclean. Turbo at the pre-rebase basefd7a6ab: 20/20 uncached. Independent review is requested before merge — this lane does not self-merge; the coordinator sweep owns it.Human author: Gilbert Polanco (gilbertpolanco42@gmail.com)
🔗 Obvious Project · 🧵 Obvious Thread