V48 Gate 3 (specification-implementation): Deposit systems MVP — SynthesizeAssetPacks SDIVF correctness#250
Conversation
…line telemetry
sourceSafeStreamEvent withholds llm:{prompt,input,output,reasoningOutput,judgmentOutput,parsedOutput} content from every persisted/streamed pipeline event, leaving only a content-withheld summary. Applied at the execution_events persistence chokepoint so the formal agent-generics LLM substeps — which store full prompt/response content — stream lawfully (rawPromptVisible/rawProviderResponseVisible stay false) for ALL pipelines. Prerequisite for AssetPacksSynthesis on the real primitives.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…nt/prompt primitives
New asset-packs-synthesis-pipeline.ts runs the measurement on the actual Bitcode primitives instead of the hand-rolled bounded-structured-inference loop:
- Execution spine: PipelineExecution('pipeline:asset-packs-synthesis', lineage{family:asset_pack,posture:live,admittedSurface:lens}) -> phase:<lens> -> factoryAgent (AgentExecution) -> measure step -> createFailsafeGenerationSequence (Failsafe[prepare|chunk|stitch] of Thricified[reason|judge|structured_output]) as REAL nested child nodes.
- Prompt built UPWARDS via the registry: layered PromptParts (pipeline identity + source-safety law / phase lens-role / agent measurement-catalog + rules / step candidate-shape) registered on the AgentExecution.prompt, composed by buildHierarchicalPrompt; structured generation input becomes the user prompt.
- Real ExecutionTool (AssetPackInventoryTool) produces the exclusion-filtered source inventory and is tracked under tool: child execution. AgentExecution auto-resolves the env LLM (no manual wiring). Token accounting walks the execution tree for llm:usage.
Additive: typechecks clean; not yet wired into the route (next chunk rewires synthesizeAssetPackCandidates + the deposit route, then deletes bounded-structured-inference.ts).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…re the hand-rolled inference) synthesizeAssetPackCandidates now delegates inference to synthesizeAssetPackCandidatesFormal (the real PipelineExecution -> factoryAgent -> Failsafe of Thricified spine) instead of runBoundedStructuredInference. This module keeps what it owns: the deposit/read lens contract, the candidate schema, fail-closed exclusion/path validation, measurement-catalog mapping, and inference accounting. - request.execution is now a real execution-generics Execution (the deposit route's streaming Execution); a detached root Execution is created when absent. SourceSafeStreamTarget and the in-module usage-recorder / source-safe-summary bridge are retired — telemetry source-safety is now the universal streaming filter (chunk A). - Added assertSourceSafeCandidates: defense-in-depth local source-safety assertion (Garrett's 'keep local assert') that fails closed if any candidate's prose carries a verbatim source line (>= 40 chars) from the excerpts. - deposit-option-real-synthesis adapter + route status wording updated; synthesis test repoints its mock from bounded-structured-inference to asset-packs-synthesis-pipeline (5/5 green). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… mismatch + verify synthesis prompt build-up
Chunk F (sanity-check all PromptPart + Prompt implementations for instruction correctness given the full registry build-up + formatting correctness):
- prompts/src/index.{ts,d.ts}: the four PROMPTPART_SPECIFIC_TOOL_REPOSITORYSETUP_ASSET_PACK_* re-exports were spelled ASSETPACK (no underscore), naming members that do not exist — a latent TS2724 surfaced whenever a package imports the prompts index. Corrected to the real ASSET_PACK names (the six AssetPack comprehension/clone tools already import them directly under the correct name; no consumer used the wrong spelling).
- asset-packs-synthesis-pipeline.ts: extracted buildSynthesisPromptLayers — the six layered system PromptParts (pipeline identity -> source-safety -> phase lens-role -> agent catalog -> agent rules -> step shape) as a pure, exported, ordered factory the measure step applies via setSpecificExecution.
- New asset-packs-synthesis-pipeline.test.ts proves the registry build-up + hierarchical formatting: every layer registers under a valid ExecutionPrompt path and the real hierarchicalFormatter renders each layer's instruction content into the system prompt, lens-correctly (deposit demand-alignment vs read need-fit). 3/3 green.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…uarded execution labels stream-parser collapses each generation/tool/thinking event's (possibly multi-line) message to a single line via toSingleLine, so a structured-output JSON payload renders as ONE expandable row instead of fragmenting into many orphan rows (the accumulated stream text is newline-delimited, one line per event). formatExecutionTag null-guards the [phase -> agent -> step -> failsafe -> generation] label so only populated layers show (no literal 'undefined' when a pipeline emits partial executionState). Full payload stays in the event details for the expandable. 5 stream-parser + 3 pipeline-log component tests green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…d through the phase registries
New synthesize-asset-packs.ts defines SynthesizeAssetPacksMode ('deposit'|'read') + resolve/store/from-execution helpers. The unified-pipeline preprocess resolves the mode once and stores it on the execution; every SDIVF phase (phases/index.ts) reads it via synthesizeAssetPacksModeFromExecution and threads it to its conditional registry (registerDiscoveryAgents/registerImplementationAgents/registerValidationAgentsForType/registerFinishAgentsForType now accept mode). This is the conditional-runtime-registry spine that unifies deposit + read into one pipeline; read is the default so the live develop pipeline behaves unchanged. Deposit-mode preprocess + agent variants + Finish-upload land in later chunks.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…tPacksPipeline entry preprocessDepositMode: deposit skips the read Need / fits-finding preprocess entirely and stores the repository coordinates + depositor steering (instructions, protected-IP exclusions, demand context, inventory) for the SDIVF phases (Setup clones+danger-walls, Discovery explores, Implementation writes AP patches, Validation gates, Finish uploads for review). factoryPreprocess early-returns to it when mode==='deposit'. synthesizeAssetPacksPipeline: the unified SDIVF synthesis as a directly-callable executor (mode resolved from input), the one-and-only synthesis entry for both deposit and read. assetPackPipeline stays the legacy Design/Develop/Digest router whose Develop gate is this same synthesis. 43 suites / 209 tests green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…patches via formal PTRR New DepositAssetPackSynthesisAgent (factoryAgentWithPTRR → Plan/Try/Refine/Retry × Failsafe × Thricified) synthesizes reviewable, source-safe AssetPack patches from the depositor's repository source (deposit lens): per-pack source-safe summary, covered source paths, fileChanges descriptor, review notes; honors protected-IP exclusions. registerImplementationAgents now conditionally registers it under the Implementation key when mode==='deposit' (read keeps the fits agent) — the first live use of the conditional runtime registry. Every call renders in the SDIVF telemetry. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… for review (no PR) New upload-asset-packs-for-review-agent records the synthesized artifacts as a reviewable Bitcode upload (deposit: review before Depository admission; read: before purchase) instead of opening a PR — PR/settlement moves to the future Gate-6 SettleAssetPacks pipeline. registerFinishAgentsForType registers it for deposit mode under the Finish deliver key; read keeps its legacy delivery until migrated at gate close (noted residue). Simple (non-PTRR) finalization agent. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… + reusable validator DepositAssetPackSynthesisAgent now produces the candidate-options shape (options[] with per-pack measurements via the DEPOSIT_MEASUREMENT_CATALOG) the /deposit review surface consumes — still a real PTRR agent (36 formal calls) — and stores them at implementation:options. validateDepositSynthesisOptions (exported) turns the pipeline's raw options into fail-closed, source-safe AssetPackCandidates (drop unknown/excluded paths, map measurements through the lens catalog), so the route can build the deposit option synthesis from the pipeline output. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… — full SDIVF telemetry The synthesize-options route now (default) runs synthesizeAssetPacksPipeline in deposit mode against the streaming execution, so the full Setup→Discovery→Implementation→Validation→Finish pipeline streams its phase→agent→step→failsafe→generation telemetry to the /deposit log. It extracts the deposit Implementation phase's measured options (implementation:options), validates them fail-closed via validateDepositSynthesisOptions, and builds the existing deposit option synthesis response (unchanged contract). Falls back to the bounded synthesis if the pipeline yields no admissible options; BITCODE_DEPOSIT_SYNTHESIS_PIPELINE=0 forces bounded-only. uapi tsc --noEmit: 0 errors. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…e (legacy develop aliased) factoryDevelopPhase generalized to factorySynthesizeAssetPacksPipeline(pipelineName='synthesize-asset-packs'); the deposit/read entry synthesizeAssetPacksPipeline now runs the SDIVF executor as 'synthesize-asset-packs' (canonical telemetry pipeline name) while factoryDevelopPhase remains a thin alias passing 'develop' so the legacy Design/Develop/Digest router + its observability (phase ids develop.*) are byte-unchanged. 43 suites/209 tests green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ENABLE_OTF_INSTRUCTIONS flag ExecutionPrompt.setOnTheFly (otf: prompt-part paths) had zero callers; ENABLE_OTF_INSTRUCTIONS was unused. Both removed (the primitive removal is sanctioned: OTF is the exception to 'primitives untouched'). The rest of OTF is NOT pure residue — it splits into dead UI telemetry types (otf_instructions/otf_adherence, never emitted) and a LIVE instruction feature (run_otf_instructions table + instructions API + waitForInstruction in the Validation phase + ExecutionOnTheFlyInstructions) — those belong in the dedicated gate-close pass; the live-feature removal needs a deliberate decision. execution-generics typecheck clean; no remaining refs. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…dherence) These stream types were never emitted (only a commented store at shippables.ts). Removed the parse cases (stream-parser.ts), the ParsedStreamData instructions/adherence fields (types/stream.ts), the TYPE_STYLES entries + type-detection heuristics + getLineClass case + now-unused ChatBubbleIcon import (pipeline-execution-log.tsx), the otf-insight/otf-adherence tailwind colors, the mock telemetry union members, and the dead streamParserOTF test. uapi tsc 0 errors; telemetry tests green. (Group A of the OTF removal; live instruction feature follows.) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ady-to-instruct + instruction fetch
Deleted the waitForInstruction executor (pipelines-generics) + its export — the mid-run instruction pause. Deleted the asset-pack ready-to-instruct agent + its test, unregistered it, and removed the validation-phase sequence pause (validators -> ReadyToFinish now, no ready-to-instruct/waitIfNeeded) + the validation:selfInstruction store. Removed the OTF instruction fetch from factoryIterationPreprocess (.from('instructions')). asset-pack 42 suites/208 tests green; pipelines-generics clean.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… instruction UI Completes the OTF removal. Telemetry-type source (the earlier commit only captured the test deletion; its source edits land here): stream-parser cases, ParsedStreamData fields, pipeline-execution-log TYPE_STYLES/heuristics/case + ChatBubbleIcon import, tailwind otf colors, mock union. API/storage/ORM/UI (executed + verified by subagent): deleted the instructions API route, the ExecutionsInstructions submit UI (+ alias + Fixed variant + RunInstructions stories), and the OTF API tests; removed fetchShippableInstructions/postShippableInstruction (api-client), the ExecutionsPageClient instruction block, the AssetPackRunInstructionsModel + run_otf_instructions ORM model/types/exports/client-accessors/data-health/refresh-schema, the edgetimes unresolved-table entry, and OTF story sample data. orm + uapi + asset-pack tsc 0 errors; orm 21 tests pass. Deferred to a deliberate DB step: DROP the deliverable_pipeline_otf_instructions/run_otf_instructions table (migration) — generated DB types + tracked compiled .js mirrors (api-client.js, protocol proven-generator.js) still mirror the live schema and regenerate after the drop. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
DROP deliverable_pipeline_otf_instructions (the live table; legacy run_otf_instructions was renamed into it) CASCADE + the pre-rename name defensively. Idempotent (IF EXISTS). After apply, regenerate the DB types so packages/orm/src/types/**generated** + the tracked compiled .js mirrors (api-client.js, proven-generator.js) lose their stale OTF references. The ORM's .from('run_otf_instructions') was querying a name that no longer existed post-rename, so the feature was effectively inert.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…nthesis no longer PRs) registerFinishAgentsForType now registers the upload-asset-packs-for-review agent for BOTH modes (was deposit-only). Synthesis (deposit AND read, incl. the legacy Develop gate) finishes by uploading the synthesized artifacts to Bitcode for user review — deposit before Depository admission, read before purchase — instead of opening a PR. PR/settlement delivery moves to the future Gate-6 SettleAssetPacks pipeline; the deliver-asset-pack-to-destination-agent is retained (unregistered) for it. The upload agent now uploads whichever Implementation output the mode produced (deposit: options; read: assetPackSynthesisArtifacts). Develop-gate consumers degrade gracefully (postprocess + shippables route read prUrl via optional chaining → prCreated:false). asset-pack 42 suites/208 tests green; the test-mode finish mock is left as-is (test-only). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…isions in the V48 notes Adds the Gate-3 notes section: the SynthesizeAssetPacks SDIVF unification (one pipeline, deposit|read modes via conditional runtime registries; subsumes Develop), the formal-primitives execution law (Pipeline→Phase→Agent→Step→Failsafe∘Thricified; N PTRR/Simple agents; 36 calls/PTRR agent), per-phase jobs, Finish→upload-for-review both modes (no PR; PR→Gate-6 SettleAssetPacks), inline /deposit run, universal source-safety, and the complete OTF eradication. Records the open specification decisions (deposit AssetPack nature, deposit Discovery/Validation/Setup shapes) so implementation stays reproducible from spec per canonical Bitcode law. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…gents, lens inputs Records Garrett's decided model (2026-06-25): an AssetPack is a measured patch — deposit APs are patches against the depositing repo with absolute (content-direct) measurements (Readless/Needless); read APs are patches against the reading repo synthesized from fit-found deposited APs, carrying absolute + fit measurements, with BTD = normalized scalar weighted sum of fit-only measurements (bought for BTC). Lens inputs: Obfuscations (deposit) / Need (read); ~same agents lens-varied. Discovery = 3 agents (codebase-comprehension / depository-search / inherent-regurgitation, discovering from codebase / Depository / model). Setup adds input-comprehension; Validation = quality thresholds + coverage/corrections + smoke/sanity. Includes the implementation-status build-down list (options→patch, 5→3 discovery agents, instructions→Obfuscations, +input-comprehension) and the protocol-demonstration measurement grounding. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ode (asset-packs-synthesis + btd-scalar-volume-quote) Corrects the grounding: the V48 measurement catalogs (absolute deposit dims + the fit-only need-fit) live in asset-packs-synthesis.ts, the BTD scalar in btd-scalar-volume-quote.ts (need-relative-fixed-point-weighted-volume policy, formula recorded), the read Need pricing vector in read-need.ts, and the patch as fileChanges + source-binding with content withheld pre-settlement. protocol-demonstration is the V47 realization framework, not the V48 measurement source of truth. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…(patch + measurements + metadata) Final AssetPack-model clarification: never a slice of existing source — Implementation synthesizes the patch (new content as code edits) into the Setup-cloned workspace via a code-edit tool, measures it (absolute; read adds fit + BTD), and attaches metadata (contributing AssetPacks for a read-synthesized pack); content withheld pre-settlement. The deposit Implementation's current measured-options output is the build-down gap. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…egorization as canonical development law Every commit + gate-PR title must declare its category — (specification-only) | (implementation-only) | (specification-implementation) — as a parenthetical after the version+gate prefix. Encoded in AGENTS.md (contributing law) and BITCODE_SPECIFYING.md §2.8 (under Complete Implementation Derivability), so the spec<->implementation relationship of every change is auditable from history alone and no implementation outruns its spec. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…nstructions → Obfuscations
The deposit single-prompt input is canonically Obfuscations (what to obfuscate/withhold). Renamed the field across route + deposit-route-model + DepositPageClient (UI label too) + the adapter + deposit-asset-pack-options + the pipeline preprocess (deposit:obfuscations store) + the deposit synthesis agent + tests. Kept stable (hash/schema/lens-neutral): the root namespace literals ('deposit-option-instructions'), the depositorInstructionRoot output field, and steering.instructions (the adapter maps obfuscations into it; read keeps it). asset-pack 42/208 + uapi tsc 0 + deposit tests green; root hashes unchanged. Read input stays Need (ReadNeed).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…hension agent (comprehend Obfuscations) New DepositInputComprehensionAgent (factoryAgentWithPTRR) comprehends the depositor's Obfuscations against the cloned repository inventory into structured obfuscation guidance (obfuscatedPaths / obfuscatedConcepts / honorNotes), stored at setup:inputComprehension for downstream phases (authoritative alongside the protected-IP exclusions). The Setup executor conditionally re-registers it under the comprehension key for deposit mode (read keeps Need-comprehension); execution.agents is the live registry (preprocess.ts), createPhaseRunner resolves the sequence from it. Spec: the V48 notes Setup entry now records the deposit input-comprehension output, so implementation does not outrun spec. asset-pack 42/208 + typecheck + spec-checker green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…scovery agents (codebase / depository / model) Deposit Discovery now runs the 3 canonical agents instead of the 5 legacy read agents: deposit-codebase-comprehension (discovers from the cloned source → discovery:codebaseComprehension), deposit-depository-search (likely-to-be-read/demand framing → discovery:depositorySearch), deposit-inherent-regurgitation (model training-data knowledge → discovery:inherentRegurgitation) — all factoryAgentWithPTRR on the input-comprehension template. registerDiscoveryAgents + the discoveryPhase delegator branch on mode (deposit → the 3; read → the existing 5, untouched). Spec: the V48 notes Discovery entry records each deposit agent's stored output. asset-pack 42/208 + typecheck green; read path unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ts a measured patch via the code-edit tool Each synthesized AssetPack is now a measured PATCH: the measured option fields plus a SOURCE-SAFE patch descriptor (fileChanges [path+op] + a natural-language patchSummary; never raw code). New AssetPackPatchWriteTool (ExecutionTool) records the descriptor (physical workspace fs-write is the delivery context, out of scope). The deposit synthesis agent reads the Discovery stores (codebase/depository/regurgitation comprehension) + the obfuscation comprehension, synthesizes the patch descriptor honoring obfuscations + exclusions, calls the tool per pack, and stores implementation:assetPacks (full measured-patch packs) + implementation:options (reviewable face; validateDepositSynthesisOptions reads the measured fields, ignores patch). Source-safety: no raw patch code in any schema/store/tool/telemetry — descriptor + measurements + summaries only. asset-pack 42/208 + typecheck green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…quality/coverage/smoke → iterate gate)
New DepositValidationAgent (factoryAgentWithPTRR + deterministic smoke/sanity checks) validates the synthesized deposit AssetPacks — measurement honesty (0..1), distinctness, source-safety, obfuscation/exclusion compliance, patch-descriptor coherence, coverage — emitting {issues, qualityScore, coverageGaps, recommendation:'complete'|'iterate'}. Issues stored at validation/implementation:issues (the key the canonical ReadyToFinish gate reads); any issue forces iterate, driving the DIV loop. registerValidationAgentsForType + validationPhase branch on mode (deposit → deposit-quality → ReadyToFinish; read → the 3 parallel validators → ReadyToFinish, untouched). Spec note records the checks + the gate integration. asset-pack 42/208 + typecheck green.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e516e5dd5c
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| return { | ||
| ...event, | ||
| message: '[content withheld — source-safe]', |
There was a problem hiding this comment.
Redact LLM metadata before persisting stream events
For llm prompt/output events this spread keeps the original metadata object, but ExecutionStreamAdapter.onStore populates metadata.stores.generations[...].llm from sanitizeData(value), which still includes prompt/output strings up to 1000 chars. So even though message and data are withheld here, the persisted execution_events.event_data.metadata can still expose raw prompts or provider responses for deposit synthesis logs; the redaction needs to remove or rewrite these metadata stores too.
Useful? React with 👍 / 👎.
| execution.store('pipeline', 'input', processedInput); | ||
| execution.store('pipeline', 'synthesizeMode', 'deposit'); | ||
| execution.store('deposit', 'repository', repository); |
There was a problem hiding this comment.
Propagate deposit mode beyond the preprocess child
This stores the resolved deposit mode only on the preprocess execution node. I checked sequential_executor.ts: each SDIVF stage runs on a sibling child (seq-0, seq-1, seq-2, ...), while the setup/discovery/implementation phases read mode only from their own node or ancestors via synthesizeAssetPacksModeFromExecution. In real deposit runs the later phases therefore miss this store and default to read, dispatching the read agents instead of the new deposit agents.
Useful? React with 👍 / 👎.
| const rawOptions = ((execution as any).get?.('implementation', 'options') ?? | ||
| (execution as any).findUp?.('implementation', 'options') ?? | ||
| []) as Parameters<typeof validateDepositSynthesisOptions>[0]; |
There was a problem hiding this comment.
Read pipeline options from descendant executions
After synthesizeAssetPacksPipeline returns, this is looking for implementation/options on the root execution (or its ancestors), but the implementation agent stores those options on the phase/agent execution child created inside the SDIVF sequential tree. Because findUp does not search descendants, rawOptions is always [] for successful full-pipeline output, causing the route to discard the SDIVF result and fall back to bounded synthesis every time.
Useful? React with 👍 / 👎.
…andbox host durability Spec (NOTES #26 + parity matrix #26–31; QA runbook cancel/sandbox): - Exhaustive cancel law (row authority, cooperative abort, sandbox stop, UI) - Sandbox deposit: ephemeral boxes, OIDC/token auth fail-closed, sandboxId on context Implementation: - POST /api/executions/[runId]/cancel + execution-cancel helper - Deposit route polls cancel; sandbox shouldAbort + non-persistent create - VercelSandboxPipelineHost abort/cancel outcome; assertVercelSandboxAuthAvailable - Deposit UI Cancel run control + deposit_synthesis_cancelled analytics - Tests for cancel API, host abort, harness result shape, provisioning
… next to refresh Pipelines table is master-only. A square + (New deposit) beside refresh opens the configuration/detail experience (same drill-in as selecting a run). Back returns to the table. Run detail still locks config above telemetry.
Match master-detail Deposit UX — click New deposit before Synthesize.
…y telemetry for anchors - Add xai provider (OpenAI-compatible https://api.x.ai/v1, default model grok-4.5) - Prefer XAI_API_KEY for default provider; setDefaultProvider on registry factory - Exclude activity-ledger anchors from Deposit pipelines table; show ledger detail instead of empty pipeline telemetry when an anchor URL is opened - Document XAI_API_KEY in .env.example (secrets stay in .env.local only)
…nclusion Apply Forced Inclusion roots before measurement, re-sample prompt excerpts after scope, project paths/samples only into deposit agent PTRR inputs, and keep full sources on deposit:inventory for measurement (not pipeline:input).
Prevent Invalid string length on monorepo inventories: safePromptJson for PTRR reason/judge/structured_output, redact content-bearing stores before SSE emit, and estimate contentChars without giant JSON.stringify walks.
…synthesize Keep Forced Inclusion/Exclusions/Obfuscations editable before synthesize; always POST sourcePathHints; raise deposit maxDuration; surface concrete failure messages; document Forced Inclusion as inventory scope.
…lock Page execution_events past the PostgREST 1000-row default, map executions.error into summary/errorMessage, and prefer started_at/ completed_at/duration_ms for the deposit run clock on refresh.
… boxes Force persistent:false for one-shot harness creates (v2 defaults to persistent/Snapshot Storage), assign unique names, and stop+delete ephemeral sandboxes after deposit synthesis.
…ourcePathHintCount CI typecheck failed: ProductEvent did not allow sourcePathHintCount on the dispatch analytics payload after Forced Inclusion was wired into the funnel.
… and forcedExclusions Replace sourcePathHints/protectedIpExclusions identifiers across deposit UI, API, pipeline steering, anchors, analytics, fixtures, and notes. Keep legacy POST/anchor key read fallbacks and leave option sourcePathRoots (covered paths) unchanged.
…eline rows Show error plus last phase→agent→step→failsafe→generation lines when hovering FAILED/CANCELLED/interrupted status pills. History supports ?tail=N for a lightweight event window used by the preview.
…ck draft canon Add BITCODE_SPEC_V48.md as the self-contained V48 system specification (no prior-version binding law) with Gate 3 SDIVF, deposit full-stack, demand honesty, defaults (grok-build-0.1, maxIterations 1, 180s LLM timeout), and close-out law. Update notes Gate 3 closing posture and product defaults.
…ck deposit stats Ground earnings/neediness in settled Depository AssetPack search or show Unestimatable; re-ground option neediness after synthesis. Keep Positive ROI reviewable when demand is unestimatable (provisional ROI ranking; earnings display still unestimatable). Fix permanent Required denials=2 by treating sub-critical deposit authority as ready without depositApproved first.
…s, empty-obf skip Default xAI model to grok-build-0.1; set SynthesizeAssetPacks maxIterations to 1; raise LLM call timeout default to 180s and stall UI to match; skip Setup input-comprehension LLM when Obfuscations are empty (no monorepo thrash).
…d stall tests Map @/lib/depository-settled-demand in jest; mock package-root grounding in synthesize-options tests; align stall indicators to 180s; accept Unestimatable neediness when demand estimate is unavailable; restore notes-backed canon posture after incomplete SPEC_V48.md was removed from the family gate.
…for rebuild Open the complete V48 draft family (SPEC + DELTA + NOTES + PARITY + PROVEN) as Complete Implementation Derivability authority: the entire Bitcode stack through Gate 3 is restated for rebuild from BITCODE_SPEC_V48.md alone without silent inheritance from superseded version files. Include Gate 3 SDIVF, deposit full-stack, demand honesty, and product defaults. Draft status keeps Current canonical/latest target at active V47 until promotion.
… and close Expand BITCODE_SPEC_V48.md Gate 3 law into G3-1…G3-15 covering executions schemas, deposit APIs, Inline/VercelSandbox hosts, SDIVF agent/tool/prompt/ store/telemetry contracts, option full-stack stats, /deposits UI, fail-closed errors, env rebuild checklist, and source map — sufficient to rebuild deposit MVP from this SPEC alone. Mark Gate 3 closed in notes, parity completion, and QA ledger; ops smoke remains optional.
…README Rename Gate 3 framing to Deposit systems MVP in notes. Replace the outdated V41–V46 README changelog with contributor-facing canon posture, routes, local run, deposit smoke, monorepo map, and workflow for V48 Gate 3.
… surfaces Restore required root README documentation of check:v47-gate10 and v47-canon-promotion.yml so active-canon promotion readiness stays green after the contributor README refurbish.
…ation anchors Keep the contributor-facing README while re-adding promoted-gate check tokens and canon-promotion workflow names required by Gate Quality package tests (e.g. V35/V47 promotion readiness substring checks).
…cal CI anchors Keep the Deposit-focused contributor front matter while restoring the complete prior gate changelog as a labeled historical appendix so Gate Quality package tests retain required README substrings.
…olutes and source-safe inventory Neediness validation now fails closed without Validation-phase formal absolutes, and pipeline:input projects inventory without full sources. Update pins so Gate Quality package tests match the G3 deposit law already shipped on this branch.
V48 Gate 3 — Deposit systems MVP (close into
version/v48)Gate 3 is the depositing full-stack MVP: SynthesizeAssetPacks SDIVF for
/deposits, source-safe telemetry, option review/admission, demand honesty, hosts, and rebuild-alone canon.Single-canon law
BITCODE_SPEC_V48.md§G3-1…G3-15 is the rebuild-alone SPEC for deposit SDIVF (storage, APIs, Inline/VercelSandbox hosts, agents/tools/prompts/telemetry, option full-stack,/depositsUI, fail-closed errors).Implementation highlights
grok-build-0.1, 180s LLM timeout)Contributor docs
Root
README.mdrefurbished for current canon posture, local run, and Gate 3 deposit focus.Verification
Gate Quality + unit/typecheck/spec checks green on branch. Optional live smoke: Forced Inclusions + cancel (QA runbook §6).