Repository source: docs/plans/read_model_hot_indexes/read_model_hot_indexes_debug_log.md
read_model_hot_indexes — Railspike debug log
2026-10-24 UTC — Step 1 (Solution Assessment)
Necessary/useful instructions
RAILSPIKE.md"Step Guide" +step1_solution_assessment.mdstructure contract (Original Query → Understood Intent → Problem → ≥2 options → Recommendation): kept the assessment to one page and forced an explicit isolation rationale for the schema-change cycle. Retain.CONTRIBUTING.mdread-model schema-change checklist (referenced, not part of Railspike): materially shaped the options and the verification list. Retain; this cross-reference is the reason Option A is scoped as it is.Effort study fields (
AGENTS.mdstanding P2 enrollment + ledger R1 recovery note): enabled a concrete projected total (≈0.30) instead of a deferred "unavailable" because R1 frozen references were recovered 2026-10-23. Useful; retain.
Redundant/unnecessary instructions
No supported findings. (The effort-estimation guidance is long, but each clause consulted was load-bearing for this cycle's snapshot.)
Inapplicable instructions
Extended estimates (
docs/effort-estimation.md#extended-estimates): not enabled for this cycle; no per-option estimate line required. Non-use is not redundancy.Follow-up-cycle / branch-reuse rules: no Step 4 branch exists yet.
Uncertain assessments
Projected total ≈0.30 is a single exposed, non-blind rater judgment against R1; confidence is moderate because the schema-change checklist cost is well-characterized but rebuild time on a large instance is unmeasured here.
2026-10-24 UTC — Step 2 (Feature Description)
Necessary/useful instructions
step2_feature_description.md"Known user or environment" clause: correctly prompted an explicit omission (no named user/env) rather than silently dropping the section. Retain — the explicit-omission guidance prevented an ambiguous gap."A feature is a normal-flow vertical slice, not a component, API, cache, migration" guardrail: forced framing an inherently infrastructure change (indexes) as reader/operator outcomes with entry→outcome→recovery, which kept the completion boundary user-facing. Retain.
Shared component inventory requirement: surfaced that
PublicOfflineSnapshotBuilderalready defines the equivalent index, reinforcing the "bring main model in line" framing and confirming no new component. Retain.
Redundant/unnecessary instructions
No supported findings.
Inapplicable instructions
Documentation-only scope rules: this is an application change; recorded the work type explicitly instead.
Extended estimates: not enabled; no per-item estimate annotation required.
Uncertain assessments
Rebuild cost on a large production instance is unmeasured in this environment; flagged as a risk with
./v3 rebuildas earliest validation rather than asserted as negligible.≈0.30 reaffirmed is a single exposed, non-blind rater judgment; confidence moderate because the schema-change checklist is well-characterized.
2026-10-24 UTC — Step 3 (Development Plan)
Necessary/useful instructions
step3_development_plan_do.mdper-stage fields (Goal/Dependencies/Expected changes/Verification/Risks/Canonical components): surfaced a concrete, otherwise-easy-to-miss dependency —ReadModelSchemaTestasserts the exact table/index name set, so it must change in the same stage as the index additions. Retain; the structured fields caught a real coupling.## Key Risksnear the top with**High risk:**prefix: forced the results-drift risk to the top where a reviewer sees it first. Retain."Document database changes conceptually (no SQL)" guardrail: kept the plan to index names + column lists rather than DDL, which stayed readable while still unambiguous. Retain.
Completion Contract "required recovery" field: prompted tracing the actual rebuild trigger (
Application::ensureReadModel()→schema_identity_mismatch), making Stage 3's regression test concrete rather than hand-wavy. Retain.
Redundant/unnecessary instructions
No supported findings.
Inapplicable instructions
Extended-estimate stage-work bullets: mode not enabled; per-stage estimate bullet omitted by rule.
Known-user/environment replay stage: Step 2 named no user/environment; no replay stage required.
Documentation-only file-scope checks: this is an application change.
Uncertain assessments
Stage 4 is verification-only; whether it should be folded into Stage 3 is a judgment call — kept separate so query-plan/content evidence has a distinct, auditable handoff. Low-confidence either way.
≈0.30 reaffirmed is a single exposed, non-blind rater judgment; rebuild timing on a large instance remains the main unmodeled factor.
2026-10-24 UTC — Step 3 (Development Plan) — Revision: extended estimates enabled
Revision of the 2026-10-24 Step 3 entry above (does not supersede its findings; adds the extended-mode observation). User requested enabling extended estimates for this cycle; Step 3 re-drafted with per-stage stage-work values. Step 3 approval remains pending; this revision does not advance the step.
Necessary/useful instructions
RAILSPIKE.mdextended-estimate rules ("every Step 3 stage gets a separately labeled stage work estimate"; "never sum stage estimates"; "cycle total independently judged"): kept the four stage annotations (0.05/0.07/0.15/0.08) distinct from the reaffirmed ≈0.30 cycle total and prevented presenting their sum as the projection. Retain — the explicit no-sum rule is load-bearing here."do not backfill missing historical estimates" + "record an explicit disable/enable in the current artifact": correctly drove recording the mode as effective from Step 3 and NOT inventing retroactive Step 1 per-option estimates. Retain.
"identify the owner of shared work without charging whole-cycle planning to every stage": made Stage 4 the explicit owner of end-to-end/deployment verification, avoiding double-counting that overhead across stages. Retain.
Redundant/unnecessary instructions
No supported findings.
Inapplicable instructions
Documentation-only file-scope checks: application change.
Known-user/environment replay stage: none named.
Uncertain assessments
Stage 3's ≈0.15 is the least certain stage value: it depends on how cleanly
Application::ensureReadModel()can be driven from a test harness without heavy fixtures; flagged as medium uncertainty in-plan.The per-stage values are single exposed, non-blind rater judgments against R1; they are annotations, not measured effort.
2026-10-24 UTC — Step 4 (Implementation) — completed-step report
Single Step 4 report (not per stage). Stages 1–4 implemented and committed on feat/read-model-hot-indexes; planning 7f928218, stages 4eb59792/87fceacd/cef85b1d/3a25919c.
Necessary/useful instructions
Stage Boundary Protocol (finish → verify → update summary →
git status→ stage commit →git log→ next): kept each stage independently committed with its own verification, and caught that the two unrelated debug logs must stay unstaged at every boundary. Retain — the explicitgit statusgate prevented cross-cycle leakage."A focused pass is never reported as a full-suite result" + "identify reproduced baseline failures": directly shaped the honest Stage 4 reporting of the two pre-existing
ReadModelProvenanceTestgit failures as reproduced-baseline, not regressions. Retain — load-bearing for an accurate handoff.Extended-mode per-stage retrospective requirement: surfaced useful signal (Stage 3 came in under estimate because existing fixtures/public API avoided a heavier harness; Stage 4 ran over due to environmental PHP linkage). Retain.
CONTRIBUTING.mdschema-change checklist (external to Railspike but referenced throughout): every clause mapped to a concrete stage/verification. Retain the cross-reference.
Redundant/unnecessary instructions
No supported findings.
Inapplicable instructions
Documentation-only verification gates (
git diff --check, allowed-file-scope): this was an application change; used runtime/test verification instead.Known-user/environment recovery replay: none named in Step 2.
Browser/UI state matrix: no presentation change (indexes only; content proven byte-identical), recorded not-applicable with reason.
Uncertain assessments
The ≈0.30 cycle total and per-stage retrospectives are single exposed, non-blind rater judgments; not measured effort. Maintainer comfortable-fit judgment is pending (unreviewed/unmerged), so study outcome acceptance stays pending — explicitly not invented.
Whether Stage 4 should have been folded into Stage 3 remains a low-confidence call; keeping it separate gave the query-plan/rebuild evidence a clean auditable commit.