Sibyl 1.5Implementation planDraft 2026-09-25Base: main at f866c67c6

Sibyl 1.5Trust It

1.5 makes accumulated agent experience dependable in daily use. Project boundaries hold, corrections and deletions stick, recall stays fast on a large graph, and the dream cycle learns from the right evidence.

The learning claim rides along only if a sealed study earns it. A study that comes back inconclusive changes the release note, not the release date.

00

At a glance

Workstream 1Boundaries and lifecycle that hold~$10
Workstream 2A learning loop worth measuring, then one credible study≤ $425
Workstream 3Fast on a big graph, under load$0 incremental
Workstream 4One real team move$0 incremental

Four workstreams in priority order, with a hard ceiling of $435 in inference spend and a likely spend nearer $300. Sibyl is an open-source project, so the plan buys evidence as cheaply as the statistics allow. The scale and migration work runs on the devbox and free public-repo CI, and engineering time is not counted. The release ships when the trust, scale, spend-guard and migration-rehearsal gates pass. The study runs alongside and decides only what the release note may claim. Every gate figure in this document is a proposed acceptance criterion, not a measurement, and every spend figure is a ceiling awaiting approval.

01

Decision

1.5 is a trust release. 1.4 proved that the dream cycle runs end to end with receipts, and the September 25 cleanup fixed the reasons it learned the wrong things. What a user meets first, though, is not consolidation. They meet recall that crosses projects, a delete that returns 500, a correction they can't undo from the CLI, and a graph page that takes a minute and then fails. 1.5 fixes those, makes the system hold up at the size real graphs reach, and delivers one real team migration.

The learning proof stays a first-class workstream, but it doesn't gate the release. The study is staged behind cheap gates, so money is spent only once the pipeline can plausibly show an effect, and the whole plan's inference spend is capped at $435. If the sealed study passes the 1.4 claim gate, 1.5 carries a bounded claim. If it doesn't, the release note reports the measured result and 1.5 still ships.

1.5 does not: activate Jev in production, claim general or autonomous learning, chase leaderboard numbers, polish graph visuals beyond the capacity fix, expand the archive or memoryfield surfaces, or build team workflow features beyond migration. Proposals in those areas go on the 1.6 list.

02

Where 1.4 left us

The learning mechanism now keeps what matters

The September 20 re-probe showed memory of any kind lifting the three headroom tasks, but native memory did not beat raw retrieval (native 12/15, raw 13/15). The cause was consolidation: 33 of the 34 procedures it promoted were generic repair choreography. Four PRs merged on September 25 address that.

PRWhat it changedMeasured effect
#656Dream cohorts grow from nearest embedded neighbours, and proposals ask for the problem's decision rules.Majority-family share 0.92 (was 0.24). A promoted procedure now carries the percent-escape mechanism.
#657Per-repetition seeds shared across arms, and the diagnostic intervention harness.Paired arms see the same seed and repetitions differ.
#659Joins a family's two cohorts when the union stands clearly apart.Recall on 100-source pages 35.2% → 40.4%. One proposal instead of two near-duplicates.
#660Per-model consolidation input budget: 1.6M characters for Opus 5 and 5.5.A whole family fits one proposal (about 412K tokens on screen48).
#661Dream pages seeded by a source and filled with its nearest pending neighbours, with coverage and send-gate checks. Verified, merging.Recall on the real job path 76.7% with 9 cross-family pairs (was 40.4% and 39).

The intervention probe (task b7bc8bf4) gives the only native-over-raw signal so far: 14/18 against 9/20 on cdn-batch-map, a paired +6 of 18 at p = 0.11. That clears the pre-stated +4 threshold but isn't significant. On the 16 repetitions where both arms finished, removing the derived items cost only 2 of those wins (11/18 overall against 14/18), a family summary adds nothing over raw, and a task with opaque keys shows no negative transfer (10/10 in both arms). One more finding from the probe: the promoted pattern itself was excluded from native recall as out of scope, and the mechanism reached the solver only through two raw candidate rows (task 3ed9000e).

What a user meets first

The September 22 demo prep and the proof work surfaced trust defects, and every one of them is still present on main. Each is small and reproduced. The gap that matters most is in process: PR CI never runs the :check bundle, so a delegated-scope regression from PR 525 shipped through 11 days of green PRs and surfaced only at the 1.4.0 dry cut.

The system slows as it grows

On the real 10.5K-entity graph, /graph spins for about 70 seconds and then fails with a 500, starving other pages in the same tab. A long-lived Surreal process reached 33 GB resident, with plain selects taking 14.8 seconds. Sustained ingest degrades from about 10 seconds to 100 to 700 seconds per capture once the entity table deepens. These also contaminate every latency number the public benchmarks would report.

Public benchmarks have no current anchor

LongMemEval-S sits at 26.2% because the adapter truncates every session at 3,985 characters and never calls compile_context. V2 Web Small's 23.3% ran with notes off and isn't comparable to the notes-on 30.38% anchor. The 80% and 60% targets in the 1.4 plan were never measured.

Spend so far

The 1.4 campaign spent about $463: roughly $385 on memory calls and $8.50 on solver attempts through September 19, then $69.47 across the headroom screen, re-probe, three scoped cycles and the intervention.

03

Release rules

  1. Trust gates run on every PR. Nothing that affects scope, authorization or lifecycle merges without the gate bundle having run on its head.
  2. Scale fixes grow capacity. Truncating results, lowering concurrency or skipping work doesn't count as a fix. A temporary mitigation needs a name, a tracking task and a stated path back.
  3. Every paid run sits behind a gate and a guard. Each spend stage unlocks only when the previous gate passes. No product default ships with unbounded model spend.
  4. Claims need sealed evidence. Design, analysis and exclusions are frozen before unsealing. Failures stay in the denominators, and nothing is rerun selectively.
  5. Verification is independent. Every non-trivial PR gets an adversarial verifier that did not write it, plus root moon run :lint and :typecheck before push.
04
1

Boundaries and lifecycle that hold

~$10

Goal: what a user stores stays in the scope they stored it in, and what they correct, delete or restore behaves the way the CLI and API say it will. Approach: fix the CI gap first, so every later fix lands under the gates. Then generate one authorization matrix that covers every role and scope across MCP, CLI and REST, and fix defects until it's green. The matrix extends the existing team-scope gate, which today seeds only private, team, project and delegated fixtures and says nothing about SHARED or ORGANIZATION.

TaskProblemFix directionSize
c5ecc5b4 firstPR CI runs lint, typecheck and tests but never moon run :check. Trust gates run only at the release RC, uncached.A PR job runs the trust gate tasks (team-scope, doc-claim, and whatever else :check adds) with correct moon inputs.S
672d5084Default sibyl context recall returns memories from other projects.Scope default recall to the linked project plus explicitly shared scopes. --all stays as a labelled opt-in.M
952d4340Every web page defaults to All Projects and shows other projects' cards.Default to the selected or most recent project and persist the choice. All Projects becomes an explicit selection.S
78b4010c d9e4b5bdauthorize_memory_read has no SHARED branch, so raw recall drops SHARED rows while listing returns them. Legacy shared captures are denied to every reader.Retire SHARED for new writes and map legacy rows to team: add the read branch for the mapped scope, backfill the legacy rows, and tombstone what cannot map.M
3ed9000eA promoted pattern from a scoped cycle is excluded from native recall as out of scope, while its superseded draft stays recallable.Fix the inventory's scope resolution for promoted private patterns, and make superseded drafts unrecallable. Shared with workstream two.M
a3e39787After a raw source is revised, three old relationship generations stay readable.Bind relationship reads to the source's current observation across search, explore, REST and cache. In progress since September 11.L
21495240Deleting a raw_memory: id returns 500, and the CLI buffers the write forever.Route raw ids to the correction lifecycle or return a 4xx with remediation. Never buffer a write the server can't accept.S
468693b1The CLI maps five correction actions; restore, hide, redact and mark-sensitive exist only in the API.Add the missing actions (restore aliased as undo), each with a preview line.S
6ec73846An entity PATCH between backfill enqueue and drain leaves an embedding that's never refreshed.Give the update path ownership of re-embedding and enqueue on write.M
47640192The two projection paths disagree on whether private prose may be extracted. Not a leak today; rows inherit private stamps.Refuse private prose on both paths, matching project_memory_entities.S
e23ccd49The Next.js dev server exposed a credential in its process title.Rotate, trace how the value reaches argv, remove the path, and verify value-free inspection after restart.S
1a156f2b 5a978550Pending writes that reference mutated task ids never drain. sibyl health reports healthy while auth storage is down.Recheck the first against PR 615 and close or fix it. Have health round-trip a trivial auth-storage read.S

Acceptance

GatePasses when
Authorization matrixAt least 200 generated assertions across every role and scope, over MCP, CLI and REST. Zero unauthorized reads, zero foreign-project results under the default selection, and complete authorized SHARED results.
Lifecycle sequences20 end-to-end runs of capture, correction, deletion, restore and recall, including a restart with pending-write replay. Provenance and receipts survive every step. A revised source leaves no stale relationship readable.
The gate guards itselfA deliberately broken trust assertion fails a PR check.
05
2

A learning loop worth measuring, then one credible study

≤ $425

Goal: the dream cycle turns related experience into procedures that reach the next agent, at a bounded cost, and one sealed study measures whether that beats simpler memory. Approach: finish the product fixes first, then build task families with real headroom, then spend in stages.

Product fixes, before any study spend

TaskProblemFix directionSize
bb650b6e release blockerDream-path proposal, critic and correction calls run outside any token budget context. With #660, one Opus call can carry about 420K tokens.Open a budget context per dream run and settle it to actual usage. Add a per-run spend ceiling that fails closed with a clear receipt.M
a5b6cc73The classic consolidation path reserves the 9-attempt worst case per call and never refunds it, so the third 40K Opus call in a month is refused.Reserve one attempt plus a margin, then settle to actual usage after each call.S
b1bf1287No consolidation call uses prompt caching, yet every critique and correction resends the cohort's whole evidence.Put the cohort evidence first as a shared, cached prefix, with role instructions after it. A cohort accepted on first critique then pays about a third less input, and each correction round much less. Verify the pydantic-ai caching surface first, and treat the prompt change as a new execution identity.M
3ed9000ePromoted patterns don't reach native recall (see workstream one).As above. This is the prerequisite for the canary.M
f1093a5aReflection candidates share raw_captures with originals and shift BM25 statistics, so consolidation changes the raw control's ranking.Keep candidates out of the raw lane's index and statistics, or give them their own table.M
fe47bb18An abstained reflection chain orphans its pending correction children, which fail forever. It ate one of two good candidates.Abstain or archive the children along with the parent, and repair orphans already stored.S
258af557The critic passes a candidate that says nothing useful.Add a coverage finding for a supported distinction the candidate omits, with evidence spans and a correction or abstain outcome.M
6f97769b #641The candidate drain re-projects each cohort's evidence per candidate (32 minutes at 85% CPU with no model calls).Merge #641 (reuse within one preparation, 1.56 s → 0.67 s), then cache projected evidence per cohort digest.M
follow-upSources that 1.4.0 reflected alone never seed a dream page again after upgrade (a #661 upgrade effect).An operator-triggered re-sweep of pre-1.5 singletons, costed per cohort, run after the spend guard lands.S

Task families with headroom

Only cdn-batch-map has real native-versus-raw room today; stock-adjustment-log and department-unit-budget saturate near raw. The study needs harder families before it needs a bigger n. Keep cdn-batch-map and add two families with different mechanisms, for example retry with idempotency keys, and revision-sensitive authorization. Each family needs:

  • At least 25 instances: 5 for development screening and 20 sealed.
  • Cases where applying the remembered procedure would be wrong, so negative transfer is measurable.
  • Task validity verified independently of any memory arm, with public checks the solver can run and hidden checks it can't.
  • A learning corpus of episodes that captures the family's mechanism, generated the way screen48's was.

The saturated screen48 tasks become regression controls.

Staged spend

$30Headroom screen5 development instances per family, 3 reps, 3 arms (135 attempts). Unlocks when raw succeeds 30 to 70% and the best simple control stays under 80%.
$20CanaryScoped cycle plus 10 paired reps on cdn-batch-map. Unlocks when promoted mechanisms reach recall, superseded drafts don't, and exceptions survive.
$75Fresh cycleOne ordinary dream cycle over the study families' learning episodes, with the existing screen48 memory as distractors that are already paid for. Unlocks when the canary passes.
$300Sealed study20 unseen instances per family × 5 arms, with repetitions set by the power preflight (default 4), about 1,200 attempts plus 100 on contrast families. One interim look at the halfway point stops it for futility.

The study is sized to what the statistics need. Uncertainty is clustered by instance, so once each instance has a few repetitions, more repetitions add little power; new instances add a lot. The plan keeps 20 sealed instances per family and lets the screen's variance set the repetitions. At the intervention's measured $0.19 per attempt ($29.98 for 160 cells), 1,300 attempts cost about $250, and the $300 cap leaves room for harder tasks running longer. The interim look means about half the time the study stops at half the cost.

06

Evaluation contract

ElementContract
Armsnative (product recall after the fresh cycle), raw (raw retrieval over the same corpus), strong summary (the best simple control), no memory, and native minus derived (native with the promoted items removed and no refill).
UnitOne attempt at a fixed task budget. The primary endpoint is success on hidden checks.
PairingEach instance and repetition shares one seed across all arms (the per-repetition seeds from #657).
Freeze before unsealingSolver model and budget, memory model, corpus and checkpoint, seeds, exclusion rules, and the analysis script with its hash.
AnalysisPaired differences with uncertainty clustered by instance (cluster bootstrap), reported per family and pooled. A negative family is reported, never averaged away.
Claim gate (from 1.4)At least +10 points over no memory and at least +5 over the best simple control, with positive paired lower 95% bounds.
Also requiredA positive native-minus-derived ablation, negative-transfer bounds on the exception cases, repeated-mistake rates, and cost per success with consolidation cost amortized in.
Power preflightFrom the screen's variance, pick the repetitions per instance (2 to 6), favouring instances over repetitions. The sealed design must have at least 80% power to detect +5 over the best simple control within the $300 cap. If it doesn't, no claim-bearing run happens and the gate stays where it is.
Interim lookOne pre-registered analysis at half the attempts, with alpha spending (O'Brien-Fleming boundaries). It can stop for futility, or for success only if the boundary is crossed. The final analysis uses the adjusted threshold.
MultiplicityThe primary endpoint is the pooled paired difference across families, clustered by instance. cdn-batch-map is pre-registered as the primary family. Per-family claims are secondary: a family may be named in the note only if the pooled gate passes and its own lower bound stays positive after Holm adjustment across the families tested. Nominal per-family bounds are reported but never carry a claim on their own.
IntegrityVoided cells (provider errors, harness faults) are rerun under the same seeds and listed, and failures stay in the denominators. Nothing is rerun for any other reason.

What the release note says, by outcome

OutcomeRelease note
Gate passes in every familyA bounded claim: native memory improved task success by the measured margin on these families at this budget, with the ablation and cost.
Pooled gate passes, some families passThe claim is stated for the pooled result and names only the families whose Holm-adjusted bounds are positive. The others are reported with their numbers.
Pooled gate fails, one family passes nominallyNo claim. The family result is reported as exploratory, with its unadjusted and adjusted bounds.
Native beats no memory but not the simple controlMemory helps, but consolidation's added value is unproven. The numbers are reported.
Canary stop, or no power within the capNo study ran. The note says why and what the canary showed.
07
3

Fast on a big graph, under load

$0 incremental

Goal: the graph page, recall and ingest stay responsive at ten times today's real graph, with concurrent clients. Approach: treat the four symptoms as one capacity investigation on the devbox against native Surreal (local OrbStack has wedged four times under this kind of load). Name the contended resource for each symptom before changing code. The work runs on the devbox and free public-repo CI, so it adds no inference spend.

TaskSymptom and known mechanismFirst moveSize
8ea64f07/graph takes 70 to 105 seconds or returns 500, and other pages starve. Batched snapshot queries take about 1.5 seconds each, and the hierarchical view is capped at 1,000 nodes and 5,000 edges, so a large graph gets a cut rather than an overview.Capture the server-side 500 and profile the snapshot path. Then build the overview on the server, keeping the remaining nodes reachable on demand.L
defd7d5b 8a56f5c7Surreal resident memory reached 33 GB after 24 hours of mixed load, and peaked at 11.7 GiB on a 15 GiB runner, killing the enterprise V2 run.Replay the frozen snapshot and pack queries on v3.2.x, sample RSS, and bisect block cache vs FTS and HNSW residency vs query-time allocation.L
e2ffa177Ingest degrades from about 10 seconds to 100 to 700 seconds per capture at depth. Each capture bulk-upserts about 700 fat rows through four FTS indexes plus HNSW, holding pool sockets so every other query queues.Profile the bulk upsert at depth, then fix the write shape (slimmer rows, batched index maintenance, or a separate pool for bulk writes) rather than throttling ingest.L

Acceptance

WorkloadPasses when
The real 10.5K graph, a 10× expansion, and the residency and ingest reproducers. Three repetitions each at 1, 8 and 32 concurrent clients, plus a two-hour mixed soak.Zero 500s. Recall p95 at most 2 s. Graph first useful render at most 5 s with every node still reachable. Other pages slow by at most 20% during graph use. Deep ingest runs at 80% or more of shallow throughput. Resident memory on the reproducer drops at least 50% and grows no more than 5% after warm-up.
08
4

One real team move

$0 incremental

Goal: any team member can move their personal Sibyl into a shared org server with one command, and one real team does it end to end. Both tasks have waited at high priority since September 2. An archive import makes no model calls, so the move adds no inference spend.

TaskScopeSize
a7dcbe91A new sibyl migrate to-team <url> command. It exports the local org archive (graph and content, auth skipped), authenticates through the existing flow, and streams to a new server-side import endpoint. The server runs check, dry run and import into the caller's org, remapping scope ownership to the authenticated user, which resolves the private-scope owner mismatch by construction. It returns per-kind counts and conflicts. The conflict policy for overlapping project knowledge is additive with dedup.L
aa3ea579Move a personal graph into a shared team server as the acceptance deployment, once both ends run 1.5. The existing consolidate path assumes an SSH and compose target, and a Kubernetes-hosted server needs manual kubectl steps, so to-team replaces them.M

Acceptance

GatePasses when
Rehearsal (release gate)Two full rehearsals on a representative snapshot, including interrupt and resume, an idempotent rerun, and rollback. Every source record reconciles by stable identity and content checksum, with an explicit exception ledger.
Pilot (post-cut acceptance)One separately authorized migration into a real team server, then five days with two users across two projects and 20 scripted cross-agent handoffs. Zero scope leaks, missing captures or duplicates. The pilot runs on the release candidate and can finish in 1.5.1.
09

Side lanes with a set position

LanePosition for 1.5
Jev stack (14 PRs)Merge perf PR #641 once its current head reproduces the preparation speedup with identical outputs. Hold #626 until the real-data semantic gate G1 runs; a disabled experiment doesn't justify a per-capture backfill. Its migration renumbers, since #661 took version 46. Archive experiments 628 to 646 as one indexed evidence branch, and extract standalone critic fixes (28b8e89d, 2563d7ef) as small PRs.
Public benchmarksScope is measurement integrity only. Fix the LongMemEval adapter so it stops truncating sessions and uses compile_context, add the missing QA regression baseline, and prove 20 long-session fixtures keep their evidence. Retire 26.2% and 23.3% as product anchors. Paid reruns wait until the adapter and scale gates pass.
DependenciesClear the Dependabot queue. First fix the single ty diagnostic on #648, rerun the Opus 5.5 live smoke before #649 (pydantic-ai 2.45), and check the web runner config before #655 (vitest 5).
Developer experienceOpportunistic only: the 49 GB moon cache and 62 worktrees that make repo greps take minutes (9828a377), and apps/e2e/uv.lock drifting behind sibyl-core's pins.
10

What users get

  • Recall and web pages scoped to the current project by default, with cross-project access as a visible choice.
  • Delete, restore, hide and redact from the CLI, with previews, and no forever-buffered writes.
  • SHARED memories that behave as documented.
  • A graph page that renders in seconds on a real graph without starving the rest of the app.
  • Ingest and recall that stay fast as memory grows.
  • A dream cycle that groups related experience across pages and keeps the mechanism in what it promotes.
  • Opus memory models sized to their window, with spend bounded per run.
  • sibyl migrate to-team for moving personal memory into a team server.
  • A health check that tells the truth about storage.
11

Release boundary

Must pass for 1.5.0Decides the note, not the dateMay finish in 1.5.1
  • Workstream one gates
  • Workstream three gates
  • Dream-path spend guard (bb650b6e)
  • Migration rehearsals
  • :check green at the RC
  • Dependabot queue clear
  • The sealed study and its claim
  • The canary result
  • The five-day team pilot
  • The operator re-sweep of pre-1.5 singletons
  • Cached evidence projection

The cut follows the 1.4 mechanics: bump VERSION, run moon run sync-versions for the 11 static pins, do a release dry run (it caught the delegated-scope regression in 1.4.0), then cut. The tag, publish and release steps each need your go-ahead.

12

Sequence

Each phase ends on a gate rather than a date. From P1 on, workstreams two and three run side by side, with the study on the devbox and the capacity work on a separate native Surreal stack.

  1. P0
    Land the cleanup and close the CI gap

    Merge #661. Wire :check into PR CI (c5ecc5b4). Land the dream spend guard and refund (bb650b6e, a5b6cc73).

    Exit: main carries the whole partition stack, trust gates run on every PR, and no dream run can spend without a budget.
  2. P1
    Trust fixes, recall defects, task families

    Default project scoping, the SHARED decision, CLI lifecycle, and the authorization matrix. Fix 3ed9000e, f1093a5a, fe47bb18 and 258af557. Build the two new task families and run the $30 headroom screen. Start the residency bisect on the devbox.

    Exit: the authorization matrix is green, at least two families show headroom, and the capacity bottlenecks are named.
  3. P2
    Canary, cycle, study, capacity fixes

    $20 canary, then the $75 fresh cycle, the power preflight and the sealed study with its interim look. Capacity fixes land against the load harness.

    Exit: the canary has run, the sealed study is unsealed or stopped, and the scale gates pass. The study verdict feeds the release note whenever it lands and never holds P3.
  4. P3
    Migration and release

    sibyl migrate to-team, two rehearsals, then the release dry run and the 1.5.0 cut. The team pilot starts on the RC.

    Exit: :check green at the RC, rehearsals reconciled, and your go-ahead for the tag and publish.

Dependencies that set the order

BeforeUnlocksWhy
c5ecc5b4All trust fixesFixes should land under the gates they exist to satisfy.
bb650b6eFresh cycle, re-sweep, 1.5.0No paid dream run and no shipped Opus default without a spend bound.
3ed9000e f1093a5aCanaryThe canary measures whether promoted items reach the solver and whether the raw control stays clean.
Headroom screenSealed study designThe power preflight needs the screen's variance.
Workstream one and three gatesTeam pilotA team deployment should inherit fixed boundaries and capacity.
Adapter fixAny paid LongMemEval runA truncating adapter makes the number meaningless.
13

Spend and scope controls

StageCapUnlock conditionRunning total
Workstream one live smokes$10None; the checks are deterministic.$10
Headroom screen$30Task families built and validated.$40
Canary$20Screen shows headroom; 3ed9000e and f1093a5a landed.$60
Fresh cycle$75Canary passes; spend guard landed.$135
Sealed study$300Inventory audit and power preflight pass.$435
Capacity investigation$0None; devbox and free public-repo CI.$435
Migration rehearsals and pilot$0No model calls. The pilot needs its own authorization.$435
  • The harness cost guard stays armed on every paid run and counts billed-but-unmeasured attempts.
  • A stage that would overrun its cap stops and reports. It never borrows from the next stage.
  • If the canary stops the study, total spend is about $60. If the interim look stops it for futility, total spend is about $285.
  • New scope goes on the 1.6 list unless it fixes a defect that blocks a 1.5 gate.
14

Risk register

Biggest risk to the thesis

Consolidation may add little beyond better raw retrieval. The intervention already hints at it: on the 16 paired repetitions, removing the promoted items cost only 2 of native's 6 extra wins. The earliest cheap signal is the $20 canary after 3ed9000e and f1093a5a. If the promoted mechanism now reaches the solver but removing it still changes nothing, pause the study and investigate consumption. That result stops the spend; it doesn't prove zero benefit.

RiskEarliest signalResponse
New task families lack headroom or validity.The $30 screen.Iterate on instances before spending further, or scope the study to the families that qualify.
A capacity bottleneck sits inside the Surreal engine rather than our code.The residency bisect in P1.Report upstream with a reproducer, and change our query or write shape around it. Pin a fixed version if one exists.
Migration identity remapping collides with records that already exist.The first rehearsal's reconciliation ledger.An additive-with-dedup policy and an explicit exception ledger. The rollback path is rehearsed before the pilot.
The legacy SHARED mapping turns out larger than sized.The P1 estimate for the read branch and backfill exceeds a medium task.Keep the workstream-one gate blocked. Ship the read branch and the team mapping for rows that map cleanly, tombstone the rest with an exception ledger, and keep the stricter private-extraction policy as decided.
Spend overruns.A stage near its cap.Stage caps, the harness cost guard, and the product spend guard. Stop and report rather than borrow.
Local infrastructure wedges during long runs.OrbStack stops answering (four incidents so far).Run long jobs on the devbox or native Surreal, with liveness probes that use real timeouts.
Merge bandwidth becomes the bottleneck.Verified PRs waiting more than a day.Batch merges at phase boundaries, and use stacked PRs with one verification each.
15

Decisions taken

These are settled and the plan builds on them. Each has a line of reasoning so the choice can be revisited if the reasoning stops holding. Say so if one is wrong, and the plan changes.

Spend is capped at $435, staged behind gates.Sibyl is an open-source project paid for out of pocket. The first $40 (live smokes and the headroom screen) is the only spend before a gate, and a canary stop ends the study at about $60.
SHARED scope is retired for new writes; legacy rows map to team.No production writer of SHARED exists today, and team is the scope those captures were meant to reach (78b4010c, d9e4b5bd).
Private prose is not extracted on either projection path.Matches project_memory_entities, is simpler to audit, and loses nothing a private recall needs (47640192).
Jev: #641 merges, #626 waits for the real-data gate, experiments 628 to 646 are archived as one evidence branch.A disabled experiment does not justify a per-capture backfill, and the standalone perf win stands on its own.
The #661 viewer behaviour stays.Org viewers' lone private sources no longer get an individual reflection pass, which is what a cohort already required of them.
The team pilot runs on the release candidate and does not block the 1.5.0 cut.The rehearsals are the release gate; the live migration into the team server gets its own go-ahead when P3 arrives.
16

First execution slice

The first PRs, in order. Each one goes through independent verification and root gates before merge.

#PRTasksWhy now
1Neighbour-page selection (#661, verified)2a1a7feeCompletes the partition stack on main.
2Run the trust gate bundle in PR CIc5ecc5b4Every later fix lands under the gates.
3Budget the dream path and settle reservations to usagebb650b6e a5b6cc73Bounds spend now that Opus runs at 1.6M.
4Scope default recall and web pages to the current project672d5084 952d4340The most visible trust defect.
5Let promoted patterns reach native recall3ed9000ePrerequisite for the canary.
6Delete and restore work from the CLI21495240 468693b1Small and user-facing.
7Task family design and the first familynewStarts the study's longest lead-time item.

In parallel from day one: the residency bisect on the devbox (8a56f5c7), since it gates the scale fixes and needs no merges.

17

Evidence this plan leans on

MeasurementValueSource
Re-probe, n = 5, three headroom tasks: native vs raw vs no memory12/15 · 13/15 · 6/11SIBYL_1_4_EXECUTION.md, September 20
Promoted procedures that were generic before #65633 of 34task f7f38f5a
Same-family pair recall, 100-source pages: before join, with #65935.2% → 40.4%claim_95639fbb1c13
Same, whole corpus partitioned at once with join, 1.6M / 3.2M82.3% / 85.1%partition matrix, September 24
Neighbour-page selection on the real job path (#661)76.7%, 9 cross-familydevbox validation, two identical passes
Scoped Opus 5.5 cycle, joined family1 procedure, $8.15#659
cdn-batch-map: native vs raw, paired14/18 vs 9/20, +6b7bc8bf4
Native minus derived items11/18b7bc8bf4
Negative transfer on opaque keys10/10 both armsb7bc8bf4
/graph on the 10.5K graph70 to 105 s or 5008ea64f07
Surreal resident memory under mixed load33 GBdefd7d5b
Ingest time per capture at depth100 to 700 se2ffa177
LongMemEval-S with the truncating adapter26.2%run 33300782053