-
Notifications
You must be signed in to change notification settings - Fork 0
Project Tracker
Canonical source:
docs/project/PROJECT-TRACKER.md· Snapshot commit:6b8b70b72148
Updated: 2026-08-16 Owner: Product Council, coordinated by the Project Manager Product owner and final decision-maker: Arun Current phase: the bounded P0/R0 Goal is active; Stage 0 is the local/public control-plane gate immediately preceding any R0 preparation wave, and no R0 implementation or private/live action is authorized. Current release-execution authority is R0-only: all R1-R10 tasks and artifacts are frozen and out of scope, and broader execution requires a new direct Product Owner activation. Current blocking gate: Stage 0 acceptance derives from its exact-candidate review, normal merge, append-only successor-review publication, deterministic reconciliation, and durable PR closure evidence. Until that complete chain passes, R0 preparation remains held. Current structured truth is exactly 58 Incomplete; 45 Hold + 13 Historical non-authorizing; 0 Ready; 0 execution-allowed. Private or owner-controlled acts retain their explicit gates.
Operational status, issue identity, and schedule projections are governed by the generated Phase 1 roadmap manifest, task state ledger, and task artifact register. The G1/GOV-008 dependency labels retained below are historical planning lineage, not current task-entry authority.
This is the execution system for the Life in Days MVP. It converts the approved discovery record into milestones, epics, tasks, evidence gates, and operating controls. The canonical product intent remains in REQUIREMENTS.md and the canonical terminology remains in CONTEXT.md. If this tracker and those sources differ, the confirmed requirements and domain language take precedence until the discrepancy is resolved through change control.
No calendar dates or effort estimates are assigned here. Sequencing is expressed through milestone gates and stable task dependencies. A task is never considered complete because code exists; its stated acceptance evidence must also exist and be reviewed.
| Status | Meaning |
|---|---|
| Complete | The outcome and required evidence exist and are linked or named. |
| In progress | Work is actively underway and has an accountable owner. |
| Blocked | Work cannot proceed until a named dependency, decision, credential, or gate is resolved. |
| Not started | Authorized planning item with no implementation work claimed. |
| Conditional | Work is required only when its stated trigger occurs. |
| Deferred | Explicitly outside MVP; retained in the governed backlog. |
| Cancelled | Removed by an approved change record; rationale and superseding decision are required. |
Task owner names are roles, not staffing claims: PO (Arun), PM, Product, UX, Architect, Backend, Frontend, Platform/SRE, Security/Privacy, AI Evaluation, and QA/Accessibility.
| Gate | Decision required | Entry evidence | Exit evidence and approver | Status |
|---|---|---|---|---|
| G0 — Planning baseline | Council artifacts faithfully cover the approved discovery record. | Discovery requirements, research, model reports, storage report, and glossary exist. | PRD, implementation plan, UX direction, architecture recommendations, traceability matrix, and tracker passed the recorded cross-document council review with no open P0/P1 planning gap. | Complete |
| G1 — Shared understanding | The product scope is confirmed without hidden assumptions. | Proposed shared understanding, requirements, and P0 execution authorization. | P0 execution authorization supersedes the earlier universal confirmation stop while preserving separate task, private, deployment, and human gates. | Complete |
| G2 — Architecture baseline | The deployment shape, data model, encryption/key design, trust boundaries, job model, and rollback approach are acceptable. | G1; task-specific architecture questions and threat model prepared. | Reviewed architecture record and required ADRs, including the no-additional-cost encryption/key design; the task council decision accepts material trade-offs. | Not started |
| G3 — Risk-retiring evaluations | VoiceNotes assumptions and candidate AI models are proven or the affected decision branch is reopened. | G1; synthetic test data; budget-limited credentials supplied through an approved secret path. | VoiceNotes spike report; signed text and artwork scorecards; passing provider/model selections or explicit PO reconsideration. | Not started |
| G4 — Build readiness | The team has implementable, testable slices with privacy controls and no unresolved critical dependency. | G2 and applicable G3 results; PRD and implementation plan baselined. | Ready backlog, acceptance criteria, test strategy, development environment, and traceability matrix reviewed by Product, Architecture, UX, Security/Privacy, and QA. | Not started |
| G5 — Feature complete | Every MVP capability works end to end in a non-production environment. | Core, capture, reflection, AI, lifecycle, and operations epics meet their exit criteria. | Full requirements traceability; no open severity-1/2 defects; all excluded/deferred behavior remains absent or disabled. | Not started |
| G6 — Release candidate | The candidate is private, recoverable, operable, accessible, and safe to expose only to Arun. | G5; security, privacy, accessibility, browser, fault, backup, restore, budget, and capacity tests complete. | Release evidence pack and PO acceptance; production secrets and deployment are still not implied. | Not started |
| G7 — Production readiness | Production infrastructure and callbacks may be configured. | Explicit deployment authorization; G6; credential plan; rollback plan. | Access policy, DNS/tunnel, machine callbacks, origin hardening, monitoring, backups, and rollback smoke tests pass. | Not started |
| G8 — Recovery Ceremony and go/no-go | The archive is recoverable without relying on the live server. | G7; two recovery-key copies prepared; representative encrypted archive. | Password-manager copy, independent sealed offline copy, and successful restore/decrypt evidence; final PO go decision. | Not started |
| G9 — Private launch accepted | Life in Days may be used as Arun's live prospective archive. | G8; acceptance checklist complete. | First real capture is durably stored, backed up, retrievable, and reflected correctly; stabilization owner accepts operations. | Not started |
Rules:
- The task-specific P0 Definition of Ready blocks substantive execution until the required Product, Architecture, Design, QA, Delivery, and Council artifacts pass at a reviewed revision.
- Credentials are requested only when a confirmed, approved step needs them and only through the secrets path defined at G2.
- A failed VoiceNotes or AI hard gate reopens that decision branch; it is never bypassed by an undocumented fallback.
- G7 requires fresh deployment authorization even after implementation and evaluations are complete.
- G8 is a launch blocker, not a post-launch clean-up task.
| Milestone | Outcome | Primary deliverables | Entry / exit relationship | Status |
|---|---|---|---|---|
| M0 — Council planning baseline | One coherent, traceable execution baseline. | Detailed PRD, UX specification, implementation plan, tracker, 78-row traceability matrix, role charters, and council review record. | Starts from completed discovery; exited through G0 on 2026-08-13. | Complete |
| M1 — Confirmed architecture baseline | Product scope and hard-to-reverse technical choices are explicitly accepted. | Task-bound system/data diagrams, threat model, ADRs, test strategy, and council readiness evidence. | G1 then G2. | Not started; task dossiers Incomplete |
| M2 — Integration and model qualification | Unknown external behavior and model choices are resolved with synthetic evidence. | VoiceNotes spike; text evaluation; artwork evaluation; provider dropdown decision. | G1 required; exits through G3. | Not started |
| M3 — Trustworthy archive foundation | The canonical data model, private media pipeline, encryption, jobs, and source provenance work locally. | Database schema, storage abstraction, encrypted media store, lifecycle primitives, internal APIs. | G2 and relevant G3 outcomes; contributes to G4. | Not started |
| M4 — Capture complete | Telegram photos, VoiceNotes journals, and manual journal files arrive durably and idempotently. | Telegram integration, VoiceNotes reconciliation, upload flows, Needs Date Review. | M3; exits when capture epics pass. | Not started |
| M5 — Reflection experience complete | Arun can revisit, understand, search, and manage Journal Days across supported devices. | Calendar, Monthly Almanac, Journal Day detail, galleries, Search, Corrections, conflict and Trash flows. | M3 and M4. | Not started |
| M6 — Derived intelligence complete | Text artifacts and artwork are trustworthy, controllable, budgeted, and visibly distinct from sources. | Provider adapters, derivation jobs, field protection, manual artwork, Artwork Sweep, provenance UI. | M2, M3, and source flows. | Not started |
| M7 — Resilience and privacy complete | Export, backup, restore, security, privacy, health, accessibility, and operational controls are proven. | Restic/B2 recovery, export/restore, privacy tests, health view, runbooks, accessibility evidence. | M3–M6; contributes to G6. | Not started |
| M8 — Private release candidate | A full candidate passes requirements, browser, failure, security, and recovery testing. | Traceability matrix, regression results, threat review, PO acceptance evidence. | G5 then G6. | Not started |
| M9 — Authorized private launch | The application is available privately at life.arunp.in and callbacks at life-hooks.arunp.in. |
Hetzner service, Cloudflare Access, DNS/tunnel, callbacks, production checks, Recovery Ceremony. | G7 then G8 and G9. | Not started |
| M10 — Stabilized operation | The first live period demonstrates reliable capture, recovery, spend, and capacity controls. | Operational review, incident/defect closure, first sampled restore, baseline metrics. | Follows G9. | Not started |
| M11 — Object-store scale transition | Live media moves safely from the root disk to private R2 EU before capacity becomes unsafe. | R2 backend, dual-write, reconciled migration, R2-to-Restic recovery proof, reversible cutover. | Conditional on approved watermarks; may occur before or after M9 depending on actual use. | Conditional |
| Epic | Objective | Exit criteria | Milestones |
|---|---|---|---|
| E01 GOV — Product governance and council artifacts | Maintain one approved scope and evidence trail. | G0/G1 resolved; artifacts agree; change control active. | M0–M1 |
| E02 ARC — Architecture and delivery foundation | Establish reversible architecture, environments, data boundaries, and jobs. | G2 artifacts reviewed; critical choices have ADRs and rollback plans. | M1–M3 |
| E03 SEC — Identity, access, secrets, and application security | Ensure only Arun and authenticated machine callbacks can reach private data. | Threat controls and negative tests pass; no secret or public route exposure. | M1, M7–M9 |
| E04 PRV — Encryption and privacy boundaries | Protect copied storage and minimize every processor disclosure. | Application-controlled encryption, key recovery, staging, and serialization controls pass. | M1, M3, M7 |
| E05 DOM — Journal model and provenance | Preserve authentic sources and auditable derivations across dates and versions. | Model invariants and atomic transitions pass. | M3 |
| E06 MED — Private media pipeline and root storage | Preserve exact photo bytes and serve privacy-safe derivatives without data loss. | Validated encrypted capture/read/delete/capacity flows pass. | M3–M4 |
| E07 TEL — Telegram photo capture | Accept durable photos only from the configured private account and chat. | Capture, dating, duplicate, acknowledgement, and rejection scenarios pass. | M4 |
| E08 VNO — VoiceNotes ingestion and reconciliation | Import only eligible post-activation exact-tag journals while retaining revision truth. | Spike passes; webhook/reconciliation lifecycle is replay-safe and observable. | M2, M4 |
| E09 UPL — Manual journal upload | Support date-aware .txt/.md ingestion without becoming a new writing app. |
File, duplicate, date, and source-preservation tests pass. | M4–M5 |
| E10 AIQ — AI evaluation and provider qualification | Select only models that pass approved fidelity, privacy, contract, reliability, and cost gates. | Signed scorecards and approved dropdown configuration exist within the one-time cap. | M2 |
| E11 TXT — Text-derived artifacts | Generate editable, versioned, factual titles, summaries, tags, and Visual Briefs. | Quiet-period/final-refresh, protection, provenance, and failure behavior pass. | M6 |
| E12 ART — Generated artwork | Create optional symbolic artwork without exposing photos or confusing it with memory evidence. | Manual/sweep triggers, budgets, versions, labeling, safety, and cover rules pass. | M6 |
| E13 REF — Calendar, timeline, and Journal Day reflection | Deliver a beautiful image-led reflection experience on mobile and desktop. | All four primary surfaces and management paths satisfy product acceptance. | M5 |
| E14 SRH — Exact search | Provide deterministic retrieval across current text, dates, tags, and captions. | Index/update/history behavior and relevant result states pass. | M5 |
| E15 LFC — Corrections, revisions, Trash, and suppressions | Make change and deletion explicit, recoverable, and non-destructive to source truth. | Conflicts, redating, Trash, purge, suppression, and restoration tests pass. | M3, M5–M7 |
| E16 EXP — Portable export and restore | Produce a complete private package that can reconstruct allowed state and deletion intent. | Encrypted export round-trip succeeds; temporary artifact lifecycle is proven. | M7 |
| E17 BKP — Backup, restore, and disaster recovery | Recover independently from server, disk, database, or live-store loss. | Retention, verification, sampled restore, and full drill evidence exist. | M7–M10 |
| E18 OPS — Health, logs, budgets, capacity, and alerts | Make failures visible without leaking personal content or interrupting the archive unnecessarily. | System Health, spend/storage controls, sanitized logs, and alert policies pass. | M6–M10 |
| E19 UXD — Design system, responsive behavior, and accessibility | Make the archive calm, legible, and usable across supported browsers and access modes. | Reviewed flows and WCAG/browser evidence meet the approved target. | M0, M5, M7 |
| E20 QAE — Quality engineering and release evidence | Prove every requirement and failure mode with repeatable evidence. | Traceability is complete; regression and launch suites pass without critical defects. | M1–M9 |
| E21 DEP — Hetzner, Cloudflare, callbacks, and private launch | Deploy only after authorization, with private human access and isolated machine routes. | Production checks, rollback, and Recovery Ceremony pass. | M8–M9 |
| E22 R2M — Conditional R2 migration | Move live ciphertext to R2 EU without losing recoverability or revealing media. | Reconciled, fail-closed, reversible cutover and recovery proof pass. | M11 |
| E23 RUN — Stabilization and recurring operation | Sustain trustworthy service after private launch. | Cadence established; early defects closed; first operational evidence reviewed. | M10 |
Objective: preserve approved product intent, surface unresolved decisions, and make every implementation claim traceable. Exit criteria: G0 and G1 are resolved, P0 execution controls are installed, all council artifacts agree on MVP/deferred boundaries, and every later change follows the approved process.
| ID | Task / outcome | Owner | Depends on | Status | Acceptance / evidence | Milestone |
|---|---|---|---|---|---|---|
| GOV-001 | Preserve the original product request without overwriting later decisions. | Product | — | Complete | Initial brief exists and is explicitly non-canonical where later decisions supersede it. | M0 |
| GOV-002 | Research product inspiration, VoiceNotes, Telegram, hosting, authentication, AI, backup, and trust boundaries. | Product / Architect | GOV-001 | Complete | Research report separates documented, observed, proposed, and unknown claims. | M0 |
| GOV-003 | Record the complete approved requirements frontier and explicit deferrals. | Product | GOV-002 | Complete | Requirements include decisions 1–65 and report no unresolved product preference. | M0 |
| GOV-004 | Define the text-model market scan and synthetic fidelity protocol. | AI Evaluation | GOV-003 | Complete | Text evaluation report contains candidates, hard gates, rubric, privacy, cost, and production contract. | M0 |
| GOV-005 | Define the artwork-model market scan and blind visual protocol. | AI Evaluation / UX | GOV-003 | Complete | Artwork evaluation report contains hard gates, two-stage blind test, budget, and selection rules. | M0 |
| GOV-006 | Decide the cost-aware live-media and recovery-store direction. | Architect / Platform/SRE | GOV-003 | Complete | Media storage report records root-to-R2 and independent B2 recovery direction and thresholds. | M0 |
| GOV-007 | Prepare a concise shared-understanding statement for owner confirmation. | Product | GOV-003–006 | Complete | Proposed shared understanding covers promise, trust model, capture, reflection, AI, privacy, recovery, operations, and deferrals. | M0 |
| GOV-008 | Resolve the shared-understanding authorization boundary. | PO | GOV-007 | Complete | P0 execution authorization records the scope-bounded superseding decision without interpreting it as private-host, credential, deployment, authentic-content, recovery, or release authorization. | M1 |
| GOV-009 | Produce and council-review the detailed PRD. | Product / Council | GOV-003, GOV-007 | Complete | Product Requirements defines 78 stable requirements with priorities, acceptance behavior, edge cases, risks, and non-goals; council review records Product approval and closed discrepancies. | M0 |
| GOV-010 | Produce and council-review the implementation plan. | Architect / Council | GOV-003, GOV-006 | Complete | Implementation Plan sequences architecture, slices, migrations, tests, secrets, deployment, rollback, and evidence gates without authorizing execution; Architecture approved it in the council review. | M0 |
| GOV-011 | Establish this stable-ID project tracker. | PM | GOV-003–007 | Complete | This file contains milestones, epics, tasks, dependencies, evidence, registers, release controls, and backlog. | M0 |
| GOV-012 | Run the final cross-artifact Product Council review. | PM / Council | GOV-009–011 | Complete | Council Review records Product, UX, Architecture, Project, and chair approval with no unresolved P0/P1 planning contradiction. | M0 |
Objective: select the simplest architecture that preserves the archive's trust, privacy, and recovery properties. Exit criteria: reviewed diagrams and ADRs cover the application boundary, data model, encryption, jobs, storage, integrations, deploy/rollback, and failure modes.
| ID | Task / outcome | Owner | Depends on | Status | Acceptance / evidence | Milestone |
|---|---|---|---|---|---|---|
| ARC-001 | Translate confirmed requirements into system context, container, data-flow, and trust-boundary diagrams. | Architect | GOV-008 | Not started | Diagrams name browser, origin, Cloudflare, Telegram, VoiceNotes, AI providers, root/R2, B2, and recovery-key boundaries. | M1 |
| ARC-002 | Select and record the application/runtime, database, job scheduler, and deployment shape. | Architect | ARC-001 | Not started | ADR compares viable options against 2 CPU/3.7 GiB host constraints, simplicity, encryption, backup, and rollback. | M1 |
| ARC-003 | Define the canonical database schema and migration contract. | Architect / Backend | ARC-001 | Not started | A reviewed entity/relationship model, constraints, indexes, revision rules, data dictionary, schema-version policy, and forward/rollback test strategy exist; implementation and executable migration evidence remain in DOM-001–DOM-009 and deployment tasks. |
M3 |
| ARC-004 | Define durable commands/jobs for webhooks, reconciliation, derivation, Trash purge, export, backup, and scheduled sweeps. | Architect / Backend | ARC-002, ARC-003 | Not started | Job states, idempotency keys, leases, retries, concurrency, cancellation, stale-result rules, and external-attempt prepared/sending/unknown_outcome/confirmed handling are documented and testable; ambiguous AI calls are never blindly replayed and retain conservative spend reservation. |
M3 |
| ARC-005 | Record the no-additional-subscription encryption/key architecture and storage abstraction ADR. | Architect / Security/Privacy | GOV-008, ARC-001, PRV-001 | Not started | ADR covers data/database/media encryption, runtime keys, recovery material, rotation/versioning, filesystem/R2, limitations, and an executable application-consistent R2-to-Restic backup source that fails closed on partial inventory/read. | M1 |
| ARC-006 | Define human routes, machine callback routes, internal APIs, authorization, and cache boundaries. | Architect / Security/Privacy | ARC-001, SEC-001 | Not started | Route inventory proves life.arunp.in and life-hooks.arunp.in separation and identifies auth, rate-limit, payload, and cache policy per route. |
M1 |
| ARC-007 | Define environment/configuration, database/media migration, deploy, rollback, and disaster-rebuild contracts. | Architect / Platform/SRE | ARC-002, ARC-005 | Not started | Development/test/production boundaries, config schema, reversible release steps, restore-first rebuild, and rollback evidence are documented. | M1 |
| ARC-008 | Hold architecture review and close or accept material risks before build readiness. | Council / PO | ARC-001–007, SEC-001 | Not started | Review record maps decisions to requirements and threat model; PO explicitly accepts any residual high-impact trade-off. | M1 |
| ARC-009 | Record and prove the encrypted-export passphrase and download-lifecycle ADR. | Architect / Security/Privacy / Backend | ARC-004–005 | Not started | ADR defines non-persistent passphrase handoff, non-resumable/restart behavior, partial cleanup, single-download concurrency, and the exact server-observable success event without weakening the one-time-passphrase rule. | M1 |
Objective: permit one authenticated human identity and narrowly authenticated machine callbacks while eliminating public journal routes and credential leakage. Exit criteria: threat-model controls, least privilege, headers/cache, rate limits, negative authorization tests, and secret scans pass.
| ID | Task / outcome | Owner | Depends on | Status | Acceptance / evidence | Milestone |
|---|---|---|---|---|---|---|
| SEC-001 | Produce the threat model and privacy data-flow inventory. | Security/Privacy / Architect | GOV-008, ARC-001 | Not started | Assets, processors, entry points, trust boundaries, threats, mitigations, residual risks, and test owners are recorded. | M1 |
| SEC-002 | Configure the human authentication design around Cloudflare Access only. | Platform/SRE / Security/Privacy | ARC-006 | Not started | Exact account-member allow policy, exact Arun identity, MFA prerequisite, seven-day session, and no application password store are specified. | M7 |
| SEC-003 | Validate signed Cloudflare Access assertions at the origin. | Backend / Security/Privacy | SEC-002 | Not started | Missing, expired, wrong-audience, wrong-issuer, forged, or unauthorized assertions fail closed on every human route. | M7 |
| SEC-004 | Isolate and authenticate machine callbacks. | Backend / Platform/SRE | ARC-006 | Not started | Only opaque Telegram/VoiceNotes callback paths exist at life-hooks.arunp.in; no human or media route is served there. |
M7 |
| SEC-005 | Define the secret inventory, runtime-only delivery path, permissions, rotation, and revocation procedure. | Security/Privacy / Platform/SRE | ARC-005, GOV-008 | Not started | Bot, webhook, VoiceNotes, AI, B2, R2, encryption, export, and session secrets have owner, scope, location, rotation, and recovery rules; none are in Git/database/export. | M1 |
| SEC-006 | Apply least privilege to every workload identity and external credential. | Platform/SRE / Security/Privacy | SEC-005 | Not started | Provider project/bucket/endpoint permissions are the minimum verified set; application cannot access Restic credentials; test evidence captures denials. | M7 |
| SEC-007 | Implement origin and browser protections. | Backend / Frontend | ARC-006, SEC-001 | Not started | Secure cookies, CSRF controls, CSP, frame/referrer/type protections, request/body limits, same-origin APIs, and private, no-store policies pass review. |
M7 |
| SEC-008 | Implement edge/origin rate limits and abuse-safe failure behavior. | Platform/SRE / Backend | SEC-004, TEL-002, VNO-008 | Not started | Unauthorized and malformed callbacks are rejected without content leakage; legitimate retries remain idempotent; rate-limit settings and tests are documented. | M7 |
| SEC-009 | Add dependency, secret, configuration, and static security checks to the release evidence. | Security/Privacy / QA | ARC-002, SEC-005 | Not started | Repository/artefact scans, dependency review, production-config checks, and false-positive disposition are repeatable and show no unresolved critical finding. | M8 |
Objective: protect copied live/backup storage and ensure only the minimum approved personal text crosses a processor boundary. Exit criteria: encryption/key recovery, plaintext staging, provider payload allowlists, and processor disclosures pass review and tests.
| ID | Task / outcome | Owner | Depends on | Status | Acceptance / evidence | Milestone |
|---|---|---|---|---|---|---|
| PRV-001 | Define encryption invariants and select authenticated, versioned application-level encryption. | Architect / Security/Privacy | GOV-008, SEC-001 | Not started | ADR identifies algorithms/libraries, nonce/envelope rules, authenticated metadata, data key hierarchy, key IDs, rotation, and failure behavior without claiming E2EE/zero knowledge. | M1 |
| PRV-002 | Implement secure runtime key loading, permissions, versioning, and startup health checks. | Backend / Platform/SRE | PRV-001, SEC-005 | Not started | Service-only access, absent/invalid key fail-closed behavior, rotation compatibility, redaction, and backup/export exclusions pass tests. | M3 |
| PRV-003 | Encrypt database-held personal journal data and derived content according to the approved ADR. | Backend | PRV-001, ARC-003 | Not started | Copied database/storage does not expose journal text; search/processing works only through authorized runtime decryption; migrations and recovery are proven. | M3 |
| PRV-004 | Encrypt every Original, thumbnail, artwork, and uploaded source file before durable storage. | Backend | PRV-001, MED-001 | Not started | Ciphertext/authentication, per-object nonce, key version, length/hash verification, corruption detection, and streaming decrypt tests pass. | M3 |
| PRV-005 | Define and enforce the host-level bounded-staging and no-unencrypted-swap contract. | Platform/SRE / Backend | PRV-001, ARC-002 | Not started | Service startup refuses unsafe swap or staging configuration and exposes the tested resource/concurrency envelope consumed by MED-003; abandoned plaintext cleanup and ordinary-disk prohibition are specified and verified at the host boundary. |
M3 |
| PRV-006 | Create and verify two independent recovery-key handling paths without storing recovery material in the repository. | PO / Security/Privacy | PRV-001, SEC-005 | Not started | Password-manager and sealed offline procedures are documented; representative decrypt succeeds using each allowed recovery process. | M8 |
| PRV-007 | Implement explicit AI request allowlists and photo-data denial tests. | Backend / Security/Privacy | AIQ-009, TXT-001, ART-001 | Not started | Serialized provider requests contain only approved journal/task fields or the Visual Brief; tests prove no photo bytes, EXIF, captions, IDs, filenames, embeddings, or descriptions can leave. | M7 |
| PRV-008 | Publish accurate in-product processor/privacy explanations. | Product / UX / Security/Privacy | SEC-001, AIQ-010 | Not started | Settings/help name relevant processors, retention limitations, selected provider, and encryption limits without claiming zero retention, E2EE, or regional processing not proven. | M7 |
Objective: make authentic Source Items immutable in origin while supporting dates, revisions, corrections, derived artifacts, and deletion intent explicitly. Exit criteria: database constraints and domain tests prove all canonical invariants and atomic transitions.
| ID | Task / outcome | Owner | Depends on | Status | Acceptance / evidence | Milestone |
|---|---|---|---|---|---|---|
| DOM-001 | Implement fixed Asia/Kolkata Journal Date derivation while preserving immutable Original Timestamp. |
Backend | ARC-003 | Not started | Boundary, UTC conversion, backdating, missing timestamp, and future-date tests pass; device/server timezone cannot alter results. | M3 |
| DOM-002 | Model Journal Day, Source Item types, Source Revision, Correction, and upstream status separately. | Backend / Architect | ARC-003 | Not started | Sources/revisions cannot be overwritten by Corrections; uploaded, VoiceNotes, and photo provenance stays type-safe and queryable. | M3 |
| DOM-003 | Model Derived Artifacts, exact source-revision binding, versions, stale state, and per-field protection. | Backend | ARC-003 | Not started | Title/summary/tag/brief/artwork provenance and protection state are independent and history is retained. | M3 |
| DOM-004 | Model Daily Photo order, selected real-photo cover, Active Artwork, and real-photo cover precedence. | Backend | ARC-003 | Not started | Constraints prevent Generated Artwork covering a day with a live Daily Photo and preserve chronological/reordered gallery state. | M3 |
| DOM-005 | Implement atomic Journal Date moves across both affected Journal Days. | Backend | DOM-001–004 | Not started | One transaction updates membership, covers, search, staleness, and art eligibility; rollback leaves neither partial day. | M3 |
| DOM-006 | Implement Needs Date Review as a first-class holding state. | Backend / Frontend | DOM-001 | Not started | Undated/invalid/future items remain durable but absent from ordinary Calendar/Monthly Almanac until an explicit valid date is assigned. | M3 |
| DOM-007 | Model Media Asset separately from Daily Photo references and global plaintext checksum deduplication. | Backend | ARC-003, PRV-004 | Not started | Same bytes can support multiple photo records/dates without duplicate storage; reference and Trash state control physical deletion. | M3 |
| DOM-008 | Enforce ordinary-view visibility rules for empty Journal Days. | Backend | DOM-002–004, LFC-006 | Not started | A day with no live Source Item is absent from Calendar/Monthly Almanac despite retained history, but remains accessible through management/history. | M5 |
| DOM-009 | Build invariant fixtures and migration/constraint tests for the entire domain model. | Backend / QA | DOM-001–008 | Not started | Fixtures cover multiple sources/photos, conflicts, duplicate assets, redating, stale/protected artifacts, Trash, suppressions, and restoration. | M3 |
Objective: accept safe still-image content, preserve exact bytes, create local privacy-safe derivatives, and stop cleanly before storage pressure can cause data loss. Exit criteria: encrypted write/read/delete, validation, deduplication, capacity, and complete inventory behavior pass end to end.
| ID | Task / outcome | Owner | Depends on | Status | Acceptance / evidence | Milestone |
|---|---|---|---|---|---|---|
| MED-001 | Validate decoded still-image type, size, pixel count, dimensions, and animation status. | Backend / Security/Privacy | ARC-002 | Not started | JPEG/PNG/WebP/HEIC/HEIF within 20 MB, 100 MP, and 20,000-pixel-edge limits pass; animated/SVG/TIFF/PDF/RAW/malformed/oversize inputs fail clearly by content, not extension. | M3 |
| MED-002 | Preserve the exact Telegram-supplied Original and record checksum, MIME, dimensions, and byte length. | Backend | MED-001, PRV-004 | Not started | Byte-for-byte round-trip and checksum tests pass; ordinary-photo compression is explained but no application recompression touches the Original. | M3 |
| MED-003 | Implement bounded staging, one-at-a-time decoding, cleanup, and backpressure on the 4 GB host. | Backend / Platform/SRE | PRV-005, MED-001 | Not started | Parallel/oversize/malformed workloads cannot exhaust memory or leave plaintext; explicit retryable rejection is returned when capacity is unavailable. | M3 |
| MED-004 | Generate oriented local thumbnails with EXIF/IPTC/XMP removed. | Backend | MED-001–003 | Not started | Orientation is visually correct, metadata scans are clean, derivatives are versioned/checksummed, and no external image service is called. | M3 |
| MED-005 | Implement the storage-neutral media contract and root FilesystemMediaStore. |
Backend / Architect | ARC-005, PRV-004 | Not started |
put, getStream, head, listInventory, delete, and healthCheck work with opaque keys; no date/name/text/Telegram ID appears in paths or metadata. |
M3 |
| MED-006 | Commit Original, thumbnail, encryption metadata, and database record safely before capture acknowledgement. | Backend | MED-002–005, ARC-004 | Not started | A durable capture intent, deterministic opaque object keys, idempotent encrypted writes, database finalization, startup reconciliation, and orphan quarantine/garbage collection cover the filesystem/database transaction boundary; injected failures cannot produce acknowledged-but-missing media or unreferenced plaintext. | M3 |
| MED-007 | Serve media through authorized same-origin decrypting streams only. | Backend / Frontend | MED-005, SEC-003 | Not started |
/media routes authorize the item, stream-decrypt, use correct MIME and private, no-store, distinguish inline/download, and never reveal provider URLs/keys. |
M5 |
| MED-008 | Implement root-media quota, filesystem-free watermarks, and emergency behavior. | Backend / Platform/SRE | MED-005 | Not started | 7/8/9/10 GB media and 18/15/13/12 GB free-space rules drive authoritative enforcement events; emergency rejects new media while text, reads, export, backup, and recovery remain available. OPS-005 consumes these events for projections and presentation. |
M7 |
| MED-009 | Implement Trash-aware media reference counting and safe live deletion. | Backend | DOM-007, LFC-006 | Not started | A Media Asset is removed from live storage only after no live or Trash Daily Photo references it; backups age out normally. | M7 |
| MED-010 | Implement full paginated inventory and database/storage reconciliation. | Backend / Platform/SRE | MED-005 | Not started | Count/size/hash reconciliation detects missing/orphaned/partial inventory, fails closed on listing error, and surfaces only sanitized health evidence. | M7 |
Objective: turn photos sent by Arun in one private bot chat into durably acknowledged Daily Photos with reliable dating and duplicate behavior. Exit criteria: all approved photo/document, identity, album, date, duplicate, error, and acknowledgement scenarios pass against synthetic Telegram payloads and a separately authorized integration test.
| ID | Task / outcome | Owner | Depends on | Status | Acceptance / evidence | Milestone |
|---|---|---|---|---|---|---|
| TEL-001 | Define runtime bot configuration without hard-coding identity, chat, token, or webhook secret. | Backend / Platform/SRE | SEC-005 | Not started | Config schema requires numeric user/private-chat IDs and secret references; startup rejects absent/invalid values and redacts them everywhere. | M4 |
| TEL-002 | Authenticate Telegram callbacks with both webhook secret and exact user/private-chat allowlists. | Backend / Security/Privacy | SEC-004, TEL-001 | Not started | Wrong/missing secret, any group/channel, another sender/chat, and ambiguous identity are rejected before file retrieval; forwarded messages from the allowed account remain eligible. | M4 |
| TEL-003 | Durably capture updates and deduplicate by Telegram identity before asynchronous processing. | Backend | ARC-004, TEL-002 | Not started | Duplicate/reordered/retried update_id and message payloads produce one processing outcome; webhook acknowledges quickly only after durable event capture. |
M4 |
| TEL-004 | Retrieve the highest-quality photo variant or image-document bytes promptly and validate them through the media pipeline. | Backend | TEL-003, MED-001 | Not started | Photo/document paths respect Telegram's 20 MB bot-download constraint, temporary URL behavior, type rules, and explicit failures. | M4 |
| TEL-005 | Group media_group_id album items without assuming an undocumented album-complete event. |
Backend | TEL-003–004 | Not started | A durable aggregate extends a bounded quiet deadline per member, encrypts/commits every member independently, applies one valid group date atomically, routes conflicting/invalid dates to review, resumes after restart, and reopens for late/replayed members with supplemental acknowledgement without loss. | M4 |
| TEL-006 | Parse optional leading YYYY-MM-DD, preserve remaining Photo Caption, and enforce date-review rules. |
Backend | DOM-001, DOM-006, TEL-004 | Not started | Valid historical date applies to photo/group; absent date uses receipt in Asia/Kolkata; invalid/future date enters Needs Date Review; remaining caption is preserved but excluded from AI. |
M4 |
| TEL-007 | Detect global identical checksums and implement same-day/different-day duplicate decisions. | Backend / Frontend | DOM-007, TEL-004 | Not started | Same-day resend says already imported and requires Add duplicate anyway; different-day warns but permits; accepted duplicate creates a new Daily Photo reference, not another Media Asset. | M4 |
| TEL-008 | Acknowledge only durable capture with assigned Journal Date and a private change-date link. | Backend | TEL-006–007, MED-006 | Not started | Success acknowledgement follows durable database/media commit; Needs Date Review and failures use distinct actionable messages; no personal content appears in logs. | M4 |
| TEL-009 | Implement rejection, transient backpressure, and repeated-failure operational alerts without habit reminders. | Backend / Platform/SRE | TEL-004–008, OPS-006 | Not started | Clear per-message errors cover type/size/date/capacity; alerts fire only after configured repeated ingestion failures and contain sanitized identifiers/error classes. | M7 |
| TEL-010 | Verify approved Telegram lifecycle boundaries. | QA / Product | TEL-001–009 | Not started | Tests prove forwarded-photo acceptance for the allowlisted user, no automatic successful-message deletion, no group ingestion, no text-journal capture, and no reminder behavior. | M4 |
Objective: use webhooks only as wake signals and the official MCP surface as proposed authority, importing only exact-tag, post-activation notes while preserving upstream revision history. Exit criteria: the synthetic spike resolves material unknowns; the accepted integration is unattended, replay-safe, reconcilable, and fails visibly without importing unintended text.
| ID | Task / outcome | Owner | Depends on | Status | Acceptance / evidence | Milestone |
|---|---|---|---|---|---|---|
| VNO-001 | Prepare synthetic VoiceNotes spike accounts/notes and a zero-personal-content test matrix. | Backend / QA | GOV-008, SEC-005 | Not started | Fixtures cover create, update, transcript change, tag/untag, delete, missed/replayed/out-of-order webhooks, pre-activation notes, and timestamp absence. | M2 |
| VNO-002 | Prove webhook note identity maps to the MCP note identity and authoritative record. | Backend / Architect | VNO-001 | Not started | Evidence shows deterministic identity mapping or records failure and reopens the integration decision; no heuristic matching ships. | M2 |
| VNO-003 | Prove unattended authorization refresh, permission scope, pagination, and observed rate-limit behavior. | Backend / Security/Privacy | VNO-001 | Not started | Server-side credential lifecycle and least privilege work without a human browser session; failures are classed and recoverable. | M2 |
| VNO-004 | Measure webhook payloads, retries, ordering, tag-change, update, delete, and transcript completeness behavior. | Backend / QA | VNO-001–003 | Not started | Spike report distinguishes observed behavior from guarantees and informs idempotency/reconciliation intervals without assuming undocumented signatures. | M2 |
| VNO-005 | Freeze or reopen the integration contract through the G3 decision gate. | Architect / Product / PO | VNO-002–004 | Not started | Accepted contract names webhook/MCP roles, auth, identity, retries, pagination, reconciliation, error behavior, and residual risks; a failed premise returns to Arun. | M2 |
| VNO-006 | Record Integration Activation exactly once and expose it read-only in settings/health. | Backend / Frontend | VNO-005 | Not started | Re-enabling/restarting does not backdate activation silently; audit record and timezone-neutral instant persist. | M4 |
| VNO-007 | Enforce exact life-in-days tag plus VoiceNotes creation timestamp at/after activation. |
Backend | VNO-005–006 | Not started | Fuzzy/broad/extra tags and pre-activation-created notes are excluded even if later edited/tagged; manual backdated uploads remain unaffected. | M4 |
| VNO-008 | Implement durable webhook wake capture and prompt acknowledgement. | Backend | ARC-004, SEC-004, VNO-005 | Not started | Duplicate/replayed/malformed events are idempotent; callback stores only needed opaque metadata, triggers reconciliation, and never treats webhook transcript as canonical. | M4 |
| VNO-009 | Implement periodic complete reconciliation with pagination, checkpoints, and missed-event repair. | Backend | VNO-005–008 | Not started | Eligible note inventory converges after lost/out-of-order events; partial MCP listing fails closed; repeated runs are idempotent and observable. | M4 |
| VNO-010 | Persist canonical transcripts, source revisions, and upstream tag/delete status without erasing local memory. | Backend | DOM-002, VNO-009 | Not started | Changed transcript creates Source Revision; untag/delete records upstream status; local Correction conflicts are surfaced and never auto-merged. | M4 |
| VNO-011 | Route missing creation timestamp to Needs Date Review and surface repeated reconciliation failures. | Backend / Platform/SRE | DOM-006, VNO-009 | Not started | Webhook receipt is never silently substituted; health and Telegram operational alerts reflect repeated failure without including journal text. | M7 |
Objective: provide a controlled manual source path for dated text files while keeping VoiceNotes as the writing surface. Exit criteria: global/day upload, validation, duplicate decisions, source preservation, and unsupported-file behavior pass.
| ID | Task / outcome | Owner | Depends on | Status | Acceptance / evidence | Milestone |
|---|---|---|---|---|---|---|
| UPL-001 | Design and implement global upload and Journal Day Upload a journal flows. | UX / Frontend / Backend | GOV-008, DOM-001 | Not started | Global flow requires a Journal Date; day flow defaults visibly to that date; both permit explicit valid historical dates and exclude future dates. | M4 |
| UPL-002 | Validate .txt/.md, UTF-8, and 1 MiB limit with safe decoding. |
Backend / Security/Privacy | UPL-001 | Not started | Invalid encoding, oversize, PDF/Word/OCR/binary/polyglot files fail clearly; valid source is normalized for display without altering preserved original bytes. | M4 |
| UPL-003 | Preserve each original file, filename source title, timestamp/provenance, and multiple uploads per day. | Backend | PRV-004, UPL-002 | Not started | Original file is encrypted and exportable; each item remains distinct and appears in deterministic source order. | M4 |
| UPL-004 | Detect exact duplicate uploads and implement explicit Add Anyway. | Backend / Frontend | UPL-003 | Not started | Default warns without creating another Source Item; explicit acceptance creates a distinct item while preserving duplicate provenance. | M4 |
| UPL-005 | Integrate uploaded journals with Corrections, redating, search, derivation, Trash, export, and backup. | Backend / Frontend | UPL-003–004, LFC-001–006 | Not started | End-to-end tests prove no source rewrite or orphaned index/artifact when managing an Uploaded Journal. | M5 |
| UPL-006 | Verify MVP composition boundaries. | QA / Product | UPL-001–005 | Not started | No blank browser journal editor exists; unsupported formats/OCR do not enter hidden paths; Corrections are not misrepresented as new source composition. | M5 |
Objective: select the smallest OpenAI/Google dropdown that satisfies predeclared fidelity, privacy, contract, cost, reliability, and lifecycle gates using no personal data. Exit criteria: evaluations stay under the combined $15 hard stop; results are blind/traceable; only passing approved configurations are enabled.
| ID | Task / outcome | Owner | Depends on | Status | Acceptance / evidence | Milestone |
|---|---|---|---|---|---|---|
| AIQ-001 | Provision evaluation-only provider projects/credentials with low budgets through the approved secret path. | PO / Platform/SRE | GOV-008, SEC-005 | Not started | OpenAI/Google and benchmark credentials are isolated, runtime-only, least-privilege, revocable, and never written into artifacts; no request has run before authorization. | M2 |
| AIQ-002 | Create 32 text fixtures, fact inventories, and must-not-claim lists before outputs are inspected. | AI Evaluation / Product / QA | GOV-008 | Not started | At least 24 fully synthetic fixtures cover the report's sparse/long/contradictory/negation/code-switching/injection/sensitive cases; any real-like fixtures receive explicit privacy approval. | M2 |
| AIQ-003 | Implement the controlled text harness for six release candidates and two benchmark controls with three repeats. | AI Evaluation / Backend | AIQ-001–002 | Not started | Frozen prompt/schema/config, anonymized labels, status/usage/model/latency/retry/refusal/cost capture, and combined-spend preflight are reproducible. | M2 |
| AIQ-004 | Execute blinded text scoring, hard gates, variability analysis, and selection rule. | AI Evaluation / PO | AIQ-003 | Not started | Schema pass, critical invention, refusal, fidelity, coverage, neutrality, title/tag/brief/style, median/worst case, latency, and actual cost are signed off without model-as-sole-judge. | M2 |
| AIQ-005 | Run artwork Stage 0 contract/privacy/lifecycle/API checks for all four candidates. | AI Evaluation / Security/Privacy | AIQ-001 | Not started | Exact IDs/endpoints, retention rights, text-only payload, dimensions/download, provenance, usage, refusal/transient failure, price, and lifecycle gates are evidenced before visual scoring. | M2 |
| AIQ-006 | Freeze ten synthetic Visual Briefs and run randomized, uncurated, blind Stage 1 artwork evaluation. | AI Evaluation / UX / PO | AIQ-005 | Not started | Forty original outputs and neutral display derivatives retain separate provenance/randomization manifest; all scores are captured before provider reveal. | M2 |
| AIQ-007 | Run Stage 2 for the best passing OpenAI and Google candidates and any eligible third option. | AI Evaluation / UX / PO | AIQ-006 | Not started | Second blind run, consistency, weighted operational score, bootstrap interval, actual cost, and preference evidence follow the predeclared protocol. | M2 |
| AIQ-008 | Enforce the combined one-time $15 evaluation ceiling across all attempts. | Backend / PM | AIQ-003, AIQ-005 | Not started | Shared ledger predicts cost before request, records returned usage/failures, stops before $15, and contains no personal journal text or photos. | M2 |
| AIQ-009 | Approve exact Text Provider and Artwork Provider configurations. | Council / PO | AIQ-004, AIQ-007–008 | Not started | Best passing OpenAI and Google choices are recorded; no failing model is added for provider coverage; economy/premium entries meet thresholds and premium artwork is technically manual-only. | M2 |
| AIQ-010 | Record production privacy/terms/lifecycle configuration and re-evaluation triggers. | Security/Privacy / Architect | AIQ-009 | Not started | Provider model/endpoint/region/cache/log/state settings, terms links, credential scope, lifecycle review, prompt/schema versions, and change triggers are approved. | M2 |
Objective: generate factual, editable, versioned title, summary, tags, and Visual Brief without changing the source or disclosing unapproved metadata. Exit criteria: selected-provider structured generation, timing, field protection, provenance, staleness, and visible failure behavior pass.
| ID | Task / outcome | Owner | Depends on | Status | Acceptance / evidence | Milestone |
|---|---|---|---|---|---|---|
| TXT-001 | Implement approved OpenAI and Google text adapters behind one strict typed contract. | Backend | AIQ-009–010, ARC-004 | Not started | Only approved configurations resolve; provider-native structured output is validated; no free-form model IDs or silent provider/model fallback exist. | M6 |
| TXT-002 | Build deterministic, minimized input from eligible journal revisions with source boundaries and injection resistance. | Backend / Security/Privacy | DOM-002, PRV-007 | Not started | Ordering/hash is stable; malformed text fails visibly; journal text is treated as untrusted quoted data; photo/caption/account/internal identifiers are absent. | M6 |
| TXT-003 | Schedule generation after the 15-minute Source Quiet Period and untouched-field refresh at 01:00. | Backend | ARC-004, TXT-001–002 | Not started | New source changes reset quiet timing; 01:00 uses Asia/Kolkata; idempotency and overlapping jobs cannot attach old output or duplicate success. |
M6 |
| TXT-004 | Validate title, 80–140-word summary, 3–7 unique tags, and 150–300-token Visual Brief atomically. | Backend | TXT-001 | Not started | Invalid/partial/empty output receives one controlled same-provider repair then visible failure; no blank/guessed fields are saved. | M6 |
| TXT-005 | Implement independent edit/accept protection, stale marking, replacement review, and Resume automatic updates. | Backend / Frontend | DOM-003, TXT-003–004 | Not started | Manual edit or explicit generated-version selection protects only that field; source change preserves it and offers replacement; resume clears only selected protection. | M6 |
| TXT-006 | Persist versions and complete generation provenance. | Backend | TXT-001–004 | Not started | Provider/requested/returned model, prompt/schema, source revisions/hash, time, usage/cost, request ID, retries, safety/error, and edit/protection state are retained outside ordinary logs. | M6 |
| TXT-007 | Implement bounded retries, source-race handling, and visible provider/billing/safety failures. | Backend / Frontend | TXT-001–006, OPS-004 | Not started | Transient retry/Retry-After, auth/quota stop, schema repair, refusal, stale hash discard, and explicit different-provider retry follow the approved contract. |
M6 |
| TXT-008 | Present generated fields as editable labeled artifacts separate from complete source journals. | UX / Frontend | TXT-005–007, REF-006 | Not started | UI distinguishes generated/source content, exposes provenance/stale/protected/replacement states, and never hides the canonical journal. | M6 |
| TXT-009 | Build independent private Text Provider and Artwork Provider dropdown settings. | Frontend / Backend | AIQ-009–010, SEC-003 | Not started | Only approved enabled model configurations appear with provider/model identity and relevant privacy/cost/lifecycle information; changes affect future generations only; existing provenance remains; no credential value is browser-entered or exposed. | M6 |
Objective: generate optional warm symbolic artwork from minimized journal text only, with strict labels, budgets, versions, and real-photo precedence. Exit criteria: manual and scheduled triggers, safety/budget failures, provenance, version selection, suppression, and cover rules pass.
| ID | Task / outcome | Owner | Depends on | Status | Acceptance / evidence | Milestone |
|---|---|---|---|---|---|---|
| ART-001 | Generate a typed read-only 150–300-token Visual Brief through the Text Provider. | Backend / Frontend | TXT-004 | Not started | Brief contains only source-grounded scene/tone/permitted objects/style/exclusions; it excludes photos, captions, names/account IDs; user can Regenerate brief and then explicitly retry artwork but cannot free-form edit the brief. PRV-007 subsequently proves the complete serializer boundary. |
M6 |
| ART-002 | Implement approved OpenAI and Google artwork adapters using stored configuration records. | Backend | AIQ-009–010, ARC-004 | Not started | Exact model/endpoint/region/size/quality/format/safety and automatic_sweep_eligible are enforced; secrets/model strings are not user-entered. |
M6 |
| ART-003 | Implement Generate artwork now and regeneration with word-count gates. | Frontend / Backend | ART-001–002 | Not started | Action appears when journal exists; unavailable below 5 meaningful words, warns from 5–19, and works at 20+ even with photos or before quiet/finalization timing; no arbitrary count limit exists beyond budget and safety controls. | M6 |
| ART-004 | Implement 01:00 Artwork Sweep repair across all eligible post-activation Journal Days. | Backend | ARC-004, ART-001–002, VNO-006 | Not started | Sweep considers every missed eligible day, requires 20 meaningful words, no Daily Photo, no Generated Artwork, no suppression, passing provider/budget, and excludes manual-only premium models. | M6 |
| ART-005 | Implement visible safety, transient, auth, quota, provider, and budget outcomes without automatic provider fallback. | Backend / Frontend | ART-002–004, OPS-004 | Not started | Safety refusal is ordinary unavailable artwork and not auto-retried; selected-provider failures remain retryable only by explicit action; source remains unchanged. | M6 |
| ART-006 | Download, checksum, encrypt, and preserve each raw provider output plus local derivatives and complete provenance. | Backend | ART-002, MED-004–006 | Not started | Durable success requires local checksum/store; original MIME/dimensions/bytes/C2PA/SynthID evidence, params, source revisions, prompt hash, usage/cost, and derivatives are retained. | M6 |
| ART-007 | Implement retained artwork versions, newest-success Active Artwork default, and prior-version selection. | Backend / Frontend | ART-006 | Not started | Every success creates a version; selecting an earlier version is explicit; provider/source provenance remains; failed attempts never displace active success. | M6 |
| ART-008 | Implement the shared real-photo Calendar Cover selector and precedence invariant. | Backend / Frontend | DOM-004, ART-007 | Not started | The shared query/domain selector always returns the first/selected Daily Photo whenever any live photo exists; artwork remains gallery-visible but ineligible as cover, and removing the last photo restores eligible art behavior. Calendar/detail consumers verify presentation in REF-003 and REF-006. |
M6 |
| ART-009 | Implement deliberate artwork deletion, Artwork Suppression, restoration/history, and Allow generation. | Backend / Frontend | ART-007, LFC-006 | Not started | Removing all artwork prevents sweep recreation; explicit allow clears only art suppression; versions/history/deletion intent follow approved lifecycle. | M6 |
| ART-010 | Handle late journals/Corrections as stale artwork with manual-only regeneration. | Backend / Frontend | DOM-003, ART-007 | Not started | Same-day source changes retain artwork visibly labeled as based on an earlier journal version; moving a bound source away removes it from that day's active gallery/cover while retaining history; no automatic regeneration occurs; explicit request creates a traceable new version. | M6 |
Objective: make day-level memories beautiful to scan and trustworthy to inspect, with image-led navigation and complete source access. Exit criteria: calendar, timeline, day detail, galleries, provenance, upload, management, empty/loading/error, and responsive states satisfy approved UX acceptance.
| ID | Task / outcome | Owner | Depends on | Status | Acceptance / evidence | Milestone |
|---|---|---|---|---|---|---|
| REF-001 | Finalize information architecture and end-to-end reflection/manage flows. | Product / UX | GOV-008, UXD-001 | Not started | Flow map covers calendar, timeline, search, day detail, upload, correction, redating, date review, conflicts, Trash, settings, export, and health without adding deferred scope. | M5 |
| REF-002 | Implement the shared visual shell and quiet photographic design language. | UX / Frontend | UXD-002–004 | Not started | Warm paper-like light and deep-ink dark themes, restrained typography/motion, focus behavior, navigation, and component states are reusable and consistent. | M5 |
| REF-003 | Build the image-first Monday-start month calendar with en-IN date formatting. |
Frontend / Backend | DOM-004, ART-008, REF-002 | Not started | Correct month grid, today/selected states, Journal Date boundaries, real-photo/art cover rules, and image-safe loading render on supported screen sizes. | M5 |
| REF-004 | Implement calendar empty, missing-image, hidden-day, failure, and artwork-label states. | UX / Frontend | REF-003, DOM-008 | Not started | Empty dates remain calm; days with sources but no visual remain navigable; no-source days stay hidden; generated covers are visibly AI artwork; errors never resemble missing memories. |
M5 |
| REF-005 | Build the chronological timeline with the same source/cover truth rules. | Frontend / Backend | REF-003 | Not started | Pagination/order, date headers, thumbnails, titles/summaries, labels, and hidden-day behavior match calendar and update after redating/deletion. | M5 |
| REF-006 | Build Journal Day detail with Calendar Cover, gallery, generated fields, full source journals, timestamps, and provenance. | Frontend / Backend | DOM-002–004, REF-002 | Not started | Multiple sources/photos appear separately in chronological order; generated content is labeled; complete journal text remains readable; original timestamps and source/provider provenance are accessible; owner-authored private image descriptions can supply text alternatives and never enter AI. | M5 |
| REF-007 | Implement photo gallery ordering and real-photo cover selection. | Frontend / Backend | REF-006, DOM-004 | Not started | Drag/keyboard or equivalent reorder persists; selected real cover works; first photo is default; artwork cannot be chosen while a photo exists. | M5 |
| REF-008 | Integrate day-level upload, correction, redating, delete/restore, artwork, history, and conflict actions. | Frontend | REF-006, UPL-005, LFC-001–009, ART-003–010 | Not started | Every approved manage action is reachable with clear confirmation/outcome and returns to consistent calendar/search/health state. | M5 |
| REF-009 | Build Needs Date Review and management/history views. | Frontend / Backend | DOM-006, LFC-006–009 | Not started | Undated items can be reviewed and assigned a valid date; Trash, superseded revisions, suppressions, and hidden-day history are distinct from ordinary reflection. | M5 |
| REF-010 | Verify responsive navigation and state restoration across mobile and desktop. | Frontend / QA | REF-003–009, UXD-004 | Not started | Current month/day/search position, browser back/forward, deep links, loading/error recovery, and no-horizontal-scroll behavior pass on supported viewport classes. | M5 |
Objective: retrieve memories predictably using lexical text, exact dates, and tags without semantic inference. Exit criteria: current/history indexing, filters, atomic updates, result explanation, and privacy behavior pass.
| ID | Task / outcome | Owner | Depends on | Status | Acceptance / evidence | Milestone |
|---|---|---|---|---|---|---|
| SRH-001 | Select and document the deterministic local lexical index/query design. | Architect / Backend | ARC-002–003, PRV-003 | Not started | Design supports displayed journal text, title, summary, tags, and Photo Captions while respecting encryption and one-server resource limits; semantic/provider search is absent. | M3 |
| SRH-002 | Index current displayed source text and current title/summary/tags. | Backend | SRH-001, DOM-002–003 | Not started | Exact terms, phrases/normalization policy, tags, and dates return source-grounded results with Journal Day/item identity and no superseded text by default. | M5 |
| SRH-003 | Index and display Photo Captions without admitting them to AI inputs. | Backend / Frontend | SRH-001, TEL-006, PRV-007 | Not started | Caption queries find the correct Daily Photo/day; serialization tests prove captions never enter text/art provider payloads. | M5 |
| SRH-004 | Implement explicit Include history across Trash and superseded Source Revisions. | Backend / Frontend | SRH-002, LFC-001, LFC-006 | Not started | Default excludes history; enabled filter labels result lifecycle/revision and links to management/history rather than misrepresenting it as current. | M5 |
| SRH-005 | Keep index state transactional with source revisions, Corrections, field changes, redating, Trash, restore, and purge. | Backend | SRH-002–004, DOM-005 | Not started | Fault-injected transitions never return a result on the wrong day or stale deleted display; rebuild/reconciliation produces identical results. | M5 |
| SRH-006 | Build accessible search UI with exact date/tag/text filters, result excerpts, empty states, and safe highlighting. | UX / Frontend / QA | SRH-002–005 | Not started | Keyboard/filter flows, escaping, relevant excerpts, current/history labels, performance baseline, and no third-party search/telemetry pass. | M5 |
Objective: let Arun correct and remove local presentation without rewriting upstream truth or accidentally resurrecting intentionally deleted sources/artwork. Exit criteria: revision conflict, redating, Trash/purge, restoration, suppression, and generated-history transitions pass with audit evidence.
| ID | Task / outcome | Owner | Depends on | Status | Acceptance / evidence | Milestone |
|---|---|---|---|---|---|---|
| LFC-001 | Preserve every upstream Source Revision immutably and select the displayed upstream revision explicitly. | Backend | DOM-002 | Not started | Create/update/reconciliation cannot overwrite prior text; revision timestamps/provenance and current/upstream status remain inspectable. | M3 |
| LFC-002 | Implement user Corrections for displayed journal text and Journal Date without modifying source revisions. | Backend / Frontend | DOM-002, DOM-005 | Not started | Correction authorship/time/base revision are retained; source remains exportable; clear undo/new-correction behavior is documented and tested. | M5 |
| LFC-003 | Implement source/Correction conflict detection, diff, and exactly three resolution actions. | Backend / Frontend | LFC-001–002 | Not started | UI offers keep the Correction, display newest upstream revision, or create a new Correction based on both; no auto-merge or hidden default occurs. | M5 |
| LFC-004 | Represent VoiceNotes untag/delete status without local erasure. | Backend / Frontend | VNO-010, LFC-001 | Not started | Current UI explains upstream status; local source remains until Arun acts; reconciliation cannot silently remove or reclassify it. | M5 |
| LFC-005 | Complete redating invalidation on both source and destination days. | Backend / Frontend | DOM-005, TXT-005, ART-010, SRH-005 | Not started | Cover/order/search/art eligibility and stale/protected-field behavior recalculate atomically; Original Timestamp never changes. | M5 |
| LFC-006 | Implement 30-day Trash, restore, scheduled permanent live purge, and explicit confirmation. | Backend / Frontend | ARC-004, DOM-002–004 | Not started | Live content disappears from ordinary views, remains recoverable for 30 days, restores consistently, and purges only after expiry/approved action with audit evidence. | M7 |
| LFC-007 | Implement Source Suppression, restore removal, enduring opaque identity, and Allow re-import. | Backend / Frontend | LFC-006, VNO-009 | Not started | Deleted Voice Journal does not alter VoiceNotes or resurrect; restore removes suppression; purge retains only opaque identity; allow action permits explicit reconciliation. | M7 |
| LFC-008 | Implement artwork deletion and suppression lifecycle without conflating it with Source Suppression. | Backend / Frontend | LFC-006, ART-009 | Not started | Artwork history/trash/purge and Artwork Suppression behave independently; export/restore preserves both intents. | M7 |
| LFC-009 | Retain or remove invalidated Generated Artwork according to source-revision/date rules. | Backend / Frontend | DOM-005, ART-007, ART-010 | Not started | Art tied to revisions no longer on the day leaves active gallery/cover, remains in history, and can only return through explicit retain/restore or be deleted. | M6 |
Objective: allow Arun to leave with a private, integrity-verifiable archive and reconstruct every restorable state, including deletion intent. Exit criteria: encrypted and warned-unencrypted exports round-trip; temporary server files are removed; permanent-deletion boundaries are honored.
| ID | Task / outcome | Owner | Depends on | Status | Acceptance / evidence | Milestone |
|---|---|---|---|---|---|---|
| EXP-001 | Version the export schema, manifest, checksums, relationships, and compatibility contract. | Architect / Backend | ARC-003, DOM-001–009 | Not started | Manifest identifies schema/app version, timezone, counts, files/checksums, relationships, encryption state, and restore validation rules. | M7 |
| EXP-002 | Package current JSON, Markdown, browsable HTML, original sources/photos, artwork, revisions, and provenance. | Backend / Frontend | EXP-001, MED-007 | Not started | Offline package is complete and internally linked; original bytes/checksums remain intact; generated/source labels and provider provenance remain clear. | M7 |
| EXP-003 | Include Trash and Source/Artwork Suppressions in clearly separated restorable sections. | Backend | EXP-001, LFC-006–008 | Not started | Restore preserves deletion intent and Trash age/state; permanently deleted content is not reconstructed, only the opaque identity required for enduring suppression. | M7 |
| EXP-004 | Implement AES-256 ZIP with one-time passphrase default and explicit unencrypted warning path. | Backend / Security/Privacy / UX | EXP-001–003, SEC-005, ARC-009 | Not started | Passphrase is handed to a short-lived export process without persistence, logging, queue serialization, or export; process loss fails safely and requires re-entry; strong-encryption round-trip succeeds; unencrypted choice requires deliberate acknowledgement. | M7 |
| EXP-005 | Implement private asynchronous export progress, single-successful-download/one-hour expiry, and cleanup. | Backend / Frontend | ARC-009, EXP-004 | Not started | Only Arun can create/download; an authenticated single-use lease prevents concurrent consumption; server-side completion of the full response stream is the proven success event; successful stream or one-hour expiry deletes the artifact; interrupted streams follow the ADR's bounded retry rule without leaking paths, URLs, or passphrases. | M7 |
| EXP-006 | Build an independent validator and representative full restore round-trip. | QA / Backend | EXP-001–005 | Not started | Validator catches missing/tampered files and incompatible schema; restored current/history/Trash/suppressions/search/media/artwork match manifest counts and checksums. | M7 |
| EXP-007 | Verify export scope exclusions and operational safety. | Product / Security/Privacy / QA | EXP-006 | Not started | No secrets, tokens, signed URLs, ordinary logs, provider raw payloads, or reconstructed permanently deleted content appear; PDF book remains absent. | M7 |
Objective: make live-server or storage loss recoverable from an independently encrypted B2 repository and prove recovery regularly. Exit criteria: complete consistent snapshots, retention, verification, sampled restores, full drills, keys, alerts, and rebuild runbook are proven rather than assumed.
| ID | Task / outcome | Owner | Depends on | Status | Acceptance / evidence | Milestone |
|---|---|---|---|---|---|---|
| BKP-001 | Provision a private Backblaze B2 EU Central bucket and bucket-scoped non-master Restic credential after authorization. | Platform/SRE / Security/Privacy | GOV-008, SEC-005 | Not started | Region/privacy, MFA/account controls, usage alerts, least privilege, secret isolation, and absence of application-process access are evidenced. | M7 |
| BKP-002 | Initialize encrypted Restic without Object Lock or an incompatible bucket lifecycle policy. | Platform/SRE | BKP-001, PRV-006 | Not started | Repository password recovery path is proven; check, forget, and prune work; design states writer-credential/ransomware limitation accurately. |
M7 |
| BKP-003 | Create an application-consistent snapshot source covering database, encrypted media/files/artifacts, manifest, and minimal rebuild configuration. | Backend / Platform/SRE | ARC-003, MED-010, BKP-002 | Not started | Backup aborts on database/export/inventory inconsistency; all source and derived relationships and encryption metadata are represented; secrets remain excluded. | M7 |
| BKP-004 | Schedule snapshots and enforce 48 hourly, 30 daily, and 12 monthly retention. | Platform/SRE | BKP-003, ARC-004 | Not started | Timezone/overlap/lock behavior, retention dry-run, prune, interrupted job, and rerun tests pass; snapshots are enumerated in health evidence. | M7 |
| BKP-005 | Verify every backup and alert on missed/failed snapshot or check. | Platform/SRE | BKP-004, OPS-006 | Not started | Successful upload alone is not green; repository check/inventory evidence is recorded; repeated failure sends sanitized operational alert. | M7 |
| BKP-006 | Automate a monthly sampled database/photo restore and content verification. | Platform/SRE / QA | BKP-005, PRV-006 | Not started | Disposable restore decrypts and renders representative source/media, verifies database relationships/checksums, records duration/result, and cleans test environment. | M7 |
| BKP-007 | Run a quarterly full disaster-recovery drill into a fresh disposable host. | Platform/SRE / QA | BKP-006, ARC-007 | Not started | Rebuild from documented prerequisites restores complete app/data, revalidates privacy/access, records actual recovery time against the four-hour target, and logs gaps. | M10 |
| BKP-008 | Write and dry-run loss-specific recovery runbooks. | Platform/SRE / Architect | BKP-003–007 | Not started | Database corruption, media loss, host loss, key loss/unavailability, R2 loss, B2 outage, and rollback procedures identify authority, steps, validation, and escalation. | M7 |
| BKP-009 | Measure restore feasibility at current scale and at storage re-evaluation checkpoints. | Platform/SRE / PM | BKP-006–007, MED-008 | Not started | Actual bytes, throughput, egress, duration, temporary disk needs, and cost are recorded; no recovery-time promise is made without evidence. | M10 |
| BKP-010 | Document the non-immutable recovery boundary and trigger for a future immutable export design. | Security/Privacy / Product | BKP-002, SEC-001 | Not started | Product/runbook states a compromised host plus writer key could delete Restic; immutable flow remains deferred unless threat-model/change approval activates it. | M7 |
Objective: expose trustworthy private operational status while excluding personal content and keeping capture/reflection available when AI is unavailable or over budget. Exit criteria: sanitized observability, System Health, AI/storage controls, scheduler health, and repeated-failure alerts pass.
| ID | Task / outcome | Owner | Depends on | Status | Acceptance / evidence | Milestone |
|---|---|---|---|---|---|---|
| OPS-001 | Define and implement an allowlisted structured-log schema with 30-day retention. | Platform/SRE / Security/Privacy | SEC-001 | Not started | Logs contain timestamps, opaque IDs, event/error classes, and bounded metrics only; journal text, prompts, captions, media, responses, credentials, tokens, and signed URLs fail tests/scans. | M7 |
| OPS-002 | Implement local metrics and job audit events without third-party analytics or crash reporting. | Platform/SRE / Backend | OPS-001, ARC-004 | Not started | Capture/reconcile/job/backup/restore/storage/spend signals are local/private; browser behavior and journal content are not tracked; retention is documented. | M7 |
| OPS-003 | Build the private System Health view. | Backend / Frontend | OPS-002, SEC-003 | Not started | It shows last successful Telegram capture, VoiceNotes reconciliation, backup, sampled restore, remaining storage, AI spend, key/cache/swap safety, and clear stale/failure states. | M7 |
| OPS-004 | Enforce attempt-level AI metering and the monthly $5 hard ceiling. | Backend | AIQ-009, TXT-001, ART-002 | Not started | Warn at 80%; reserve $0.50 for text and cap artwork at $4.50 while never exceeding $5 total; predicted over-budget requests block; manual art cannot bypass; non-AI features remain available. | M6 |
| OPS-005 | Monitor media quota, host free space, projected exhaustion, object-store use, and temporary capacity. | Backend / Platform/SRE | MED-008 | Not started | Approved watermarks appear in health/alerts; actual filesystem bytes drive emergency stop; no dashboard estimate or item count silently substitutes. | M7 |
| OPS-006 | Implement repeated-failure Telegram operational alerts only. | Platform/SRE / Backend | OPS-002 | Not started | Repeated photo ingestion, VoiceNotes reconciliation, or backup failure triggers concise sanitized alert with suppression/recovery behavior; no reminder, streak, or habit message exists. | M7 |
| OPS-007 | Validate all Asia/Kolkata schedules and overlapping-run behavior. |
Backend / QA | ARC-004, DOM-001 | Not started | 01:00 text final refresh/art sweep, Trash purge, backup cadence, retry/lock recovery, clock skew, restart, and missed-run catch-up are deterministic. | M7 |
| OPS-008 | Add selected-provider credential/config/model lifecycle health without probing with personal content. | Backend / Platform/SRE | AIQ-010, SEC-005 | Not started | Disabled/expired/invalid credentials and retired/misconfigured models are visible; health checks use metadata/synthetic-safe calls and never route silently. | M7 |
| OPS-009 | Create alert response, capacity, budget, provider outage, and degraded-mode runbooks. | Platform/SRE / PM | OPS-003–008 | Not started | Each alert names impact, first checks, safe mitigations, escalation/decision owner, recovery verification, and communication; capture/read availability is preserved where approved. | M8 |
Objective: turn the quiet photographic direction into a coherent, inclusive interface without borrowing protected product expression or adding coaching patterns. Exit criteria: council-reviewed UX specification and implemented interface meet supported-browser, keyboard, reduced-motion, and WCAG 2.2 AA targets.
| ID | Task / outcome | Owner | Depends on | Status | Acceptance / evidence | Milestone |
|---|---|---|---|---|---|---|
| UXD-001 | Synthesize inspiration principles into original Life in Days journeys and information architecture. | UX / Product | GOV-002–003 | Complete | UX Specification adapts documented principles from Day One, Rosebud, Five Minute Journal, and Daypix while excluding coaching, streaks, public/social, and native-app scope. | M0 |
| UXD-002 | Define visual foundations for light/dark themes, type, spacing, image treatment, icons, and restrained motion. | UX | UXD-001 | Complete | UX Specification defines theme, typography, spacing, image, icon, motion, and contrast-intent tokens without presenting generated content as documentary photography. | M0 |
| UXD-003 | Define trustworthy content labels and microcopy. | UX / Product | GOV-003, UXD-001 | Complete | UX Specification covers Source/Correction/AI artwork/protected/stale/date review/duplicate/conflict/Trash/suppression/budget/privacy/recovery language without blame or coaching. | M0 |
| UXD-004 | Specify responsive layouts, navigation, touch targets, loading, empty, offline/unavailable, and destructive confirmations. | UX | UXD-002–003 | Complete | UX Specification defines mobile/desktop wireflows and states for every primary and management surface; offline remains an explicit unavailable state. | M0 |
| UXD-005 | Define and verify complete keyboard/focus behavior. | UX / Frontend / QA | UXD-004 | Not started | Logical focus, visible indicators, skip/navigation, dialogs, gallery reorder alternative, filters, date picker, uploads, and no keyboard trap pass. | M7 |
| UXD-006 | Verify WCAG 2.2 AA contrast and non-color communication in both themes. | UX / QA | UXD-002, REF-002 | Not started | Automated and manual contrast checks cover text, controls, focus, calendar states, overlays, errors, generated labels, and disabled/budget states. | M7 |
| UXD-007 | Implement and test reduced-motion preferences. | UX / Frontend / QA | UXD-002, REF-002 | Not started | Nonessential transitions stop/reduce; no meaning depends on animation; image/calendar movement avoids vestibular harm. | M7 |
| UXD-008 | Validate current two major Chrome, Edge, Firefox, Safari plus current iOS Safari and Android Chrome. | QA / Frontend | REF-003–010 | Not started | Browser/device matrix records pass/fail for capture management, calendar, detail, search, media, export, themes, and access redirects; legacy support is not claimed. | M8 |
| UXD-009 | Run owner usability acceptance on representative synthetic Journal Days. | UX / Product / PO | REF-001–010, SRH-006, LFC-003 | Not started | Arun can complete key reflect/manage/recover flows without assistance; findings receive task/change IDs before G6. | M8 |
Objective: turn requirements and risk controls into repeatable tests and evidence, including adverse conditions on the actual small-host profile. Exit criteria: complete requirement-to-test traceability, passing regression/release suites, and no unresolved critical/high launch defect.
| ID | Task / outcome | Owner | Depends on | Status | Acceptance / evidence | Milestone |
|---|---|---|---|---|---|---|
| QAE-001 | Build the requirements/risk-to-epic/task/test traceability matrix. | QA / PM | GOV-009–011 | Not started | Every MVP requirement, non-goal, privacy boundary, risk mitigation, and gate has owner, task, test/evidence, and current disposition. | M1 |
| QAE-002 | Implement domain/unit tests for dates, revisions, Corrections, protection, covers, duplicates, visibility, Trash, and suppressions. | Backend / QA | DOM-009 | Not started | Boundary and property-based tests cover valid/invalid transitions and database constraints with deterministic fixtures. | M3 |
| QAE-003 | Implement external contract and adapter tests with sanitized recordings/mocks. | QA / Backend | TEL-003, VNO-005, TXT-001, ART-002, MED-005 | Not started | Telegram, VoiceNotes, AI, B2, and R2 success/error/retry/pagination schemas are versioned without storing personal content or secrets. | M4–M7 |
| QAE-004 | Build end-to-end journeys from capture/upload through reflection, search, management, export, and restore. | QA | TEL-001–010, VNO-006–011, UPL-001–006, REF-001–010 | Not started | Representative synthetic journeys preserve expected source bytes, dates, provenance, UI, index, derivation, Trash, backup, and restored state. | M8 |
| QAE-005 | Add privacy serialization, log-redaction, cache, metadata, and provider-boundary tests. | Security/Privacy / QA | PRV-007–008, OPS-001, MED-004, SEC-007 | Not started | Canary personal/photo fields cannot appear in AI payloads/logs/shared caches/thumbnails; provider/storage identifiers remain opaque; test failure blocks release. | M7 |
| QAE-006 | Add security negative tests. | Security/Privacy / QA | SEC-002–009 | Not started | Unauthorized identities/chats/groups, forged Access assertions, webhook secrets, CSRF, traversal, injection, oversized payloads, signed URL leakage, and secret scanning fail closed. | M8 |
| QAE-007 | Test resource exhaustion, malformed media, concurrency, disk thresholds, and degraded operation on the host profile. | QA / Platform/SRE | MED-001–010, OPS-004–007 | Not started | 2 CPU/3.7 GiB constraints, one-decode rule, staging bounds, full-disk stops, AI cap, provider outage, and continued text/read/export/backup behavior are evidenced. | M8 |
| QAE-008 | Complete automated/manual accessibility and supported-browser suites. | QA/Accessibility | UXD-005–008 | Not started | Keyboard, screen-reader landmarks/names/status, focus, zoom/reflow, contrast, motion, themes, and browser matrix have recorded evidence and owned defects. | M8 |
| QAE-009 | Run failure injection for stale jobs, retries, restarts, clock/schedule, partial listings, backup/restore, export expiry, migration rollback, ambiguous provider outcomes, and Telegram album settling. | QA / Platform/SRE | ARC-004, OPS-007, BKP-003–008, R2M-004–009 | Not started | No acknowledged data disappears, no partial inventory is treated complete, no stale artifact becomes current, no ambiguous AI side effect is blindly duplicated, late/replayed album members remain intact, and recovery/rollback reaches a verified state. | M8/M11 |
| QAE-010 | Assemble and review the release evidence pack. | QA / PM / Council | QAE-001–009 | Not started | Traceability, test results, defects, scans, browser/a11y, privacy/security, backup/restore, budget/capacity, runbooks, and PO acceptance support G5/G6 decisions. | M8 |
Objective: deploy a loopback-only application on the existing Hetzner server and expose only approved private human and authenticated machine paths through Cloudflare. Exit criteria: deployment authorization, hardened origin, Access/DNS/tunnel/callback configuration, rollback, production verification, and Recovery Ceremony pass.
| ID | Task / outcome | Owner | Depends on | Status | Acceptance / evidence | Milestone |
|---|---|---|---|---|---|---|
| DEP-001 | Revalidate the target Hetzner host's CPU, memory, disk, OS, runtime, services, network, swap, and backup baseline read-only. | Platform/SRE | GOV-008, ARC-002 | Not started | Current evidence confirms capacity assumptions or raises a decision; no production mutation occurs during validation. | M1 |
| DEP-002 | Package the application and background workers as restart-safe loopback-only services. | Platform/SRE / Backend | ARC-002, ARC-004 | Not started | Least-privilege service user, health/startup ordering, resource limits, log policy, secret mounts, graceful shutdown, and restart recovery pass in non-production. | M8 |
| DEP-003 | Establish isolated development/test/production configuration and secret references. | Platform/SRE | ARC-007, SEC-005 | Not started | No production secret/data enters dev/test; config validation/fail-closed defaults work; .env/credential files remain excluded from Git/export/backup as required. |
M8 |
| DEP-004 | Automate database schema deployment, backup-before-migrate, health validation, and rollback/forward-fix. | Platform/SRE / Backend | ARC-003, ARC-007 | Not started | Representative migration succeeds/fails safely on restored data; version compatibility and rollback evidence are documented. | M8 |
| DEP-005 | Obtain explicit production deployment authorization. | PO | G6 evidence | Not started | Written authorization identifies approved release/config scope and does not implicitly authorize unrelated provider/account changes. | M9 |
| DEP-006 | Configure the existing tunnel route and DNS for private life.arunp.in. |
Platform/SRE | DEP-005, SEC-002, DEP-002 | Not started | Hostname resolves only through approved Cloudflare path to loopback origin; direct origin exposure and unintended routes are absent; rollback is recorded. | M9 |
| DEP-007 | Configure life-hooks.arunp.in with only opaque Telegram and VoiceNotes callback paths. |
Platform/SRE / Backend | DEP-005, SEC-004, DEP-002 | Not started | Machine hostname serves no journal/UI/media route, has separate edge policy/rate limits, and reaches authenticated callback handlers only. | M9 |
| DEP-008 | Configure Cloudflare Access first-party identity, exact account/member allow policy, MFA, and seven-day session. | Platform/SRE / Security/Privacy / PO | DEP-005, SEC-002–003 | Not started | Authorized Arun session passes; other account members/emails/anonymous users fail; origin assertion validation and logout/session expiry are verified. | M9 |
| DEP-009 | Register Telegram webhook with secret token and verify allowed/denied production-safe callbacks. | Platform/SRE / Backend | DEP-007–008, TEL-001–010 | Not started | Webhook URL/secret is configured through secure path; synthetic/private allowed test works; wrong secret/chat/group fails; durable acknowledgement is observed. | M9 |
| DEP-010 | Register VoiceNotes webhook/MCP production integration only under the accepted spike contract. | Platform/SRE / Backend | DEP-007, VNO-005–011 | Not started | Activation instant is captured deliberately; synthetic post-activation exact-tag test imports; pre-activation/untagged note does not; reconciliation/credential health is green. | M9 |
| DEP-011 | Apply production firewall, TLS, cache bypass, headers, permissions, log rotation, and resource controls. | Platform/SRE / Security/Privacy | DEP-002, DEP-006–008, SEC-007–009 | Not started | External scan and config review show only approved exposure; personal routes/media are private, no-store; shared cache bypass and service permissions pass. |
M9 |
| DEP-012 | Run production-safe smoke, rollback, and restore validation with synthetic data. | QA / Platform/SRE | DEP-006–011, BKP-003–006 | Not started | Access, callbacks, capture, calendar/detail/search, AI-safe synthetic job, export, backup, restore, rollback, and cleanup pass without personal data. | M9 |
| DEP-013 | Record exact production configuration provenance and hand over operations. | Platform/SRE / PM | DEP-012 | Not started | Release/model/config/schema versions, routes, policies, secrets references, backup snapshot, rollback point, runbooks, and known limitations are recorded without secret values. | M9 |
Objective: migrate authoritative live media ciphertext to private Cloudflare R2 Standard in the EU jurisdiction before root capacity is unsafe, while keeping B2 Restic as independent recovery. Exit criteria: every object/database pointer/backup is reconciled, restore is proven, cutover is reversible, and local copies are evicted only after observation.
| ID | Task / outcome | Owner | Depends on | Status | Acceptance / evidence | Milestone |
|---|---|---|---|---|---|---|
| R2M-001 | Trigger migration planning and execution from approved measured watermarks. | PM / Platform/SRE | MED-008, OPS-005 | Conditional | Planning starts at 7 GB media or 18 GB free; provisioning/copy by 8 GB/15 GB; new writes at 9 GB/13 GB; emergency stop at 10 GB/12 GB if incomplete. | M11 |
| R2M-002 | Create private R2 Standard bucket in the EU jurisdiction and least-privilege credential after authorization. | Platform/SRE / Security/Privacy | R2M-001, SEC-005 | Conditional | Jurisdiction is immutable/verified, r2.dev/public paths disabled, provider encryption present, application ciphertext retained, and secret scope tested. |
M11 |
| R2M-003 | Implement and contract-test S3MediaStore for R2. |
Backend | MED-005, R2M-002 | Conditional | Opaque put/getStream/head/listInventory/delete/healthCheck, pagination, retries, checksums, and failure behavior match filesystem semantics without exposing URLs. |
M11 |
| R2M-004 | Implement complete fail-closed R2 inventory as a Restic source/reconciliation input. | Backend / Platform/SRE | MED-010, R2M-003 | Conditional | An application-consistent manifest plus a proven read-only/no-write-cache mount or streaming filesystem presents every paginated object to Restic; partial listing/read interruption or manifest mismatch aborts the snapshot; stable size/hash metadata is verified at collection scale. | M11 |
| R2M-005 | Begin dual-write with root remaining authoritative and copy historical ciphertext by opaque key. | Backend / Platform/SRE | R2M-003–004 | Conditional | New and copied objects verify destination byte length/checksum; migration ledger is resumable/idempotent; no Original or thumbnail is regenerated. | M11 |
| R2M-006 | Reconcile full count, size, and hash and prove complete R2-to-Restic snapshot/restore. | Platform/SRE / QA | R2M-004–005, BKP-003–006 | Conditional | Every live object/database encryption record is in a retained snapshot; restored ciphertext checksum/decrypt/render passes; deliberately partial inventory fails closed. | M11 |
| R2M-007 | Atomically switch backend pointers with a reversible migration ledger. | Backend | R2M-006 | Conditional | Transactional cutover/rollback cannot point to missing data; concurrent reads/writes and interrupted switch recover deterministically. | M11 |
| R2M-008 | Observe target reads and operations for at least seven days before eviction. | Platform/SRE / PM | R2M-007 | Conditional | Read/capture/backup/restore/error/cost/capacity evidence remains within accepted baseline; rollback remains available throughout. | M11 |
| R2M-009 | Evict verified root copies only after live-object and Restic-recovery proof. | Platform/SRE / Backend | R2M-008 | Conditional | Each removed copy has verified R2 and retained Restic counterpart; root free space recovers; audit and final reconciliation show no orphan/missing asset. | M11 |
Objective: operate the launched private archive with a lightweight cadence that detects trust, recovery, capacity, provider, and usability regressions early. Exit criteria: initial live evidence is reviewed, early defects are resolved or accepted, and recurring ownership is explicit.
| ID | Task / outcome | Owner | Depends on | Status | Acceptance / evidence | Milestone |
|---|---|---|---|---|---|---|
| RUN-001 | Monitor the first real prospective capture-to-backup-to-reflection journey. | PO / Platform/SRE / QA | G9 | Not started | First Journal Day's source/photo bytes, date, provenance, cover, search, backup, restore sample, and privacy/log evidence are reviewed without claiming broader reliability. | M10 |
| RUN-002 | Establish weekly health, failure, AI spend, storage growth, and open-risk review during stabilization. | PM / Platform/SRE | RUN-001, OPS-003–009 | Not started | Compact report records evidence, trends, incidents/defects, decisions, next threshold, and no unsupported availability claim. | M10 |
| RUN-003 | Execute recurring monthly sampled restore and quarterly full DR drill cadence. | Platform/SRE / QA | BKP-006–008 | Not started | Each run records snapshot, sample/full scope, checksums/decryption/render, duration, gaps, and remediation task; missed cadence alerts. | M10 |
| RUN-004 | Review selected AI model lifecycle, price, privacy/terms, retention, failure, and quality quarterly or on trigger. | Product / AI Evaluation / Security/Privacy | AIQ-010, OPS-008 | Not started | Material change pauses affected configuration or starts re-evaluation; no moving alias/config change silently alters future generations. | M10 |
| RUN-005 | Triage feedback, incidents, defects, and deferred requests through change control. | PM / Council / PO | G9 | Not started | Each item has severity/scope, evidence, owner, decision, task/change ID, and verified closure or backlog disposition. | M10 |
| RUN-006 | Close stabilization and accept steady-state ownership. | Council / PO | RUN-001–005 | Not started | No unresolved launch-critical defect; first restore and operating reviews exist; residual risks, recurring cadence, and M11 trigger ownership are accepted. | M10 |
flowchart LR
M0["M0 Council planning baseline"] --> G0["G0 Planning baseline"]
G0 --> G1["G1 Shared understanding"]
G1 --> M1["M1 Architecture work"]
G1 --> M2["M2 Integration and model qualification"]
M1 --> G2["G2 Architecture baseline"]
M2 --> G3["G3 Risk-retiring evaluations"]
G2 --> G4["G4 Build readiness"]
G3 --> G4
G4 --> M3["M3 Archive foundation"]
M3 --> M4["M4 Capture complete"]
M3 --> M6["M6 Derived intelligence"]
M4 --> M5["M5 Reflection experience"]
M4 --> M6
M5 --> G5["G5 Feature complete"]
M6 --> G5
G5 --> M7["M7 Resilience and privacy"]
M7 --> M8["M8 Private release candidate"]
M8 --> G6["G6 Release candidate"]
G6 --> DA["Explicit deployment authorization"]
DA --> M9SET["M9 Production setup"]
M9SET --> G7["G7 Production readiness"]
G7 --> M9REC["M9 Recovery Ceremony"]
M9REC --> G8["G8 Recovery go/no-go"]
G8 --> M9LIVE["M9 First private live journey"]
M9LIVE --> G9["G9 Private launch accepted"]
G9 --> M10["M10 Stabilized operation"]
M3 -. "capacity trigger" .-> M11["M11 R2 scale transition"]
M11 -. "must finish before G7 when triggered" .-> G7
The earlier critical path completed the bounded PC-001 readiness-control Gate A, Gate B, and Gate C publication sequence. PR #66 merged the accepted planning packet at 2fc31ec905f4c664b86bebdc511a87390a24a4e9. Five independent seats approved exact implementation candidate 946a36e2e68796f4c7a0cd2156103fbd1416302d with no vetoes; audit-only registry commit 6bf7da157220f59cb0fab6e07d0bf783e8b4265b recorded that bounded review, and PR #67 merged normally at 0694e7ad548d15132171d7c910ce35d8bc05a4bc. Exact-main apply changed only 58 existing issue bodies and 174 existing Project field values, with canonical delta digest sha256:2b34c39c849ced1b92c79d77762fc000ab66ed1884f93592ed4b1a52a36f648e; no issue/item/field/view/workflow was created, no issue state/status/label/milestone changed, and built-in post-apply parity passed. Two separate verifier reports are byte-identical at 2e3cc06bac969760809a12e4aef28d1e3fcb082207139fc5efa0c12b77bbe710, each with zero mismatches. Wiki commit 25f438faa2adc57d42f62ef139a9f615de57af99 was independently cloned and matched the deterministic 456-file build from merged main, including the then-current 450/450 source mappings and zero live-only pages. The independently checked r14 workbook and canonical copy were byte-identical at d8b21f955366a516bca0b0961b941b3f76c84b5aa2e9406e3740005ca7547994, with Review Guide binding raw manifest SHA-256 65060d958a3ac35e312112b180ffc2b7543f63dd02e1d346574c6804f0b64942. That evidence remains historical and non-authorizing.
PR #69 then published the bounded P0/R0 Goal and activation contract. Stage 0 begins from its clean exact-main activation baseline, with a committed 50-task/300-artifact R1-R10 freeze and an initially empty, inert R0 stage-approval registry. Its current acceptance state is resolved from the exact candidate, append-only successor registry, and durable PR closure evidence rather than frozen into this paragraph. Current structured truth remains exactly 58 Incomplete; 45 Hold + 13 Historical non-authorizing; 0 Ready; 0 execution-allowed, with 342 Draft artifacts plus six PC-001 artifacts In review. Stage 0 cannot itself authorize R0 implementation, private-host reads, authentic media, credentials, deployment, release, or production.
- Stage 0 P0/R0 control repair — complete exact-candidate review, normal merge, append-only successor review, and deterministic local/public reconciliation while the stage registry and production runner allowlists remain empty.
- First task-specific R0 Gate A — after Stage 0 closes, approve only the task-bound Product, Architecture, Design, QA, Delivery, and Council preparation dossier at a reviewed revision; this is not Gate B execution authority.
- ARC-001 → ARC-005 → ARC-008 — establish trust boundaries, encryption/storage decision, and accepted architecture.
- In parallel:
- VNO-001 → VNO-005 — prove or reopen the VoiceNotes contract.
- AIQ-001 → AIQ-004/AIQ-007 → AIQ-009/AIQ-010 — qualify text/art models and production configurations.
- ARC-003/ARC-004 + PRV-001/PRV-002 + DOM-001–009 + MED-001–006 — create the trustworthy archive foundation.
- TEL-001–010 + VNO-006–011 + UPL-001–006 — complete capture.
- REF-001–010 + SRH-001–006 + LFC-001–009 + TXT-001–008 + ART-001–010 — complete reflection and derived content.
- SEC-002–009 + EXP-001–007 + BKP-001–010 + OPS-001–009 + UXD-005–009 — prove privacy, resilience, operation, and accessibility.
- QAE-001–010 → DEP-005–013 — produce the release evidence, obtain deployment authorization, and configure production.
- PRV-006 + BKP-006/BKP-007 + launch checklist → Recovery Ceremony → G9 — prove recoverability and make the final launch decision.
- R2M-001–009 enters the critical path whenever a capacity watermark makes root-resident launch/operation unsafe.
| Epic | Must have before substantive implementation | Feeds |
|---|---|---|
| GOV | Discovery evidence | Every gate and epic |
| ARC | GOV-008; requirements/glossary | SEC, PRV, DOM, integrations, AI, backup, deployment |
| SEC | ARC context/routes; threat model | Every external/data route, release, deployment |
| PRV | ARC/SEC decisions | Media, database, AI, export, backup, recovery |
| DOM | ARC data model | Capture, reflection, search, AI, lifecycle, export |
| MED | PRV, DOM, storage ADR | Telegram, reflection, backup, R2 |
| TEL | SEC, MED, DOM | Capture milestone, reflection, operations |
| VNO | G3 spike, SEC, DOM | Capture, text/art derivation, lifecycle |
| UPL | DOM, PRV | Capture, derivation, reflection, export |
| AIQ | G1, synthetic fixtures, secure credentials | TXT, ART, provider health/privacy |
| TXT | AIQ, DOM, PRV | ART, reflection, search, budgets |
| ART | AIQ, TXT, MED, DOM | Calendar/detail, export, budgets |
| REF | DOM, capture, UX foundations | Acceptance, accessibility, release |
| SRH | DOM, encryption/index design | Reflection and management acceptance |
| LFC | DOM, capture/reconciliation | Reflection, search, export, backup |
| EXP | DOM, lifecycle, media | Portability, recovery evidence |
| BKP | PRV, database/media inventory | Recovery Ceremony, launch, R2 cutover |
| OPS | Jobs/integrations/providers/storage | Release, deployment, recurring operation |
| UXD | Requirements/product principles | REF, management, a11y/browser acceptance |
| QAE | All applicable implementations and risks | G5/G6/G7/G8 decisions |
| DEP | G6 and explicit authorization | G7–G9 |
| R2M | MED abstraction, BKP restore, threshold | Safe scale transition |
| RUN | G9 and operational controls | Stabilization closure and future change |
| Area | Accountable | Required contributors | Decision rule |
|---|---|---|---|
| Product promise, MVP scope, privacy boundary, spend, launch | PO | Product Council | Arun decides after council recommendation and evidence. |
| Requirements interpretation and acceptance criteria | Product | UX, Architect, PM, QA | Product proposes; contradiction with canonical requirements requires PO decision. |
| Interaction and visual design | UX | Product, Frontend, QA/Accessibility | UX recommends; trust/privacy/scope constraints cannot be traded away without council/PO review. |
| Architecture and ADRs | Architect | Backend, Platform/SRE, Security/Privacy, QA | Architect recommends; material cost/privacy/recovery trade-off requires PO acceptance. |
| Schedule, dependencies, evidence, risk/change control | PM | All roles | PM maintains this tracker; completion requires named evidence, not status assertion. |
| Security/privacy controls and secret handling | Security/Privacy | Architect, Platform/SRE, Backend, QA | Any unresolved critical privacy/security issue blocks the relevant gate. |
| AI model qualification | AI Evaluation | Product, UX, Security/Privacy, PO | Predeclared hard gates override provider coverage or preference. |
| Test and release evidence | QA/Accessibility | All implementers and council | QA reports evidence; Product/PO accept user-facing results; launch-critical failures block. |
| Deployment and production mutation | PO / Platform/SRE | Architect, Security/Privacy, QA | Requires explicit authorization plus G7/G8 evidence. |
| ID | Risk and impact | Likelihood | Impact | Owner | Mitigation / trigger / contingency | State |
|---|---|---|---|---|---|---|
| RSK-001 | Shared understanding is not explicitly confirmed, so implementation/evaluation would exceed authority. | Current | Critical | PM / PO | Keep GOV-008 and G1 blocking; continue only expressly requested planning artifacts. | Open |
| RSK-002 | VoiceNotes webhook/MCP identity, auth refresh, tag/update, retry, or reconciliation behavior fails the hypothesis. | Medium | Critical | Architect / Backend | Run VNO-001–005 on synthetic notes; reopen the branch on failure; do not infer or heuristic-match identities. | Open |
| RSK-003 | A photo, caption, identifier, EXIF, or derived description reaches an AI provider. | Low if controlled | Critical | Security/Privacy | Typed allowlist serializers, PRV-007/QAE-005 canaries, no image input surface, release-blocking negative tests. | Open |
| RSK-004 | AI summary/art creates a plausible false memory or coaching/diagnosis. | Medium | High | AI Evaluation / Product | Hard gates, blind scoring, source-visible UX, labels/versioning, schema/fidelity checks, no auto-merge, explicit retry/review. | Open |
| RSK-005 | Provider model, terms, retention, price, endpoint, or lifecycle changes after evaluation. | Medium | High | Product / Security/Privacy | Pin where possible, persist versions, quarterly/triggered review, disable affected config, rerun regression/evaluation. | Open |
| RSK-006 | Evaluation or production jobs exceed their $15/$5 hard ceilings due to retries, race, or unreported usage. | Low | High | Backend / PM | Atomic ledgers and preflight estimates, reserve enforcement, attempt metering, hard stop, invoice reconciliation, fault tests. | Open |
| RSK-007 | The small server exhausts memory during image decode or disk during capture/migration, corrupting archive/database. | Medium | Critical | Platform/SRE | Memory staging limits, one decode, safe type/pixel limits, watermarks/emergency stop, R2 trigger, full-disk fault tests. | Open |
| RSK-008 | A malicious/malformed image exploits decoder or causes resource exhaustion. | Medium | High | Security/Privacy / Backend | Maintained libraries, sandbox/resource limit, content decoding, byte/pixel/dimension/animation limits, dependency scans, adversarial corpus. | Open |
| RSK-009 | Loss or exposure of encryption/Restic recovery keys makes data unreadable or privacy controls ineffective. | Low | Critical | PO / Security/Privacy | Two independent off-server copies, strict runtime permissions, version/rotation procedure, Recovery Ceremony and repeated decrypt tests. | Open |
| RSK-010 | Backups upload successfully but are incomplete or unrestorable. | Medium | Critical | Platform/SRE / QA | Consistent source manifest, fail-closed inventory, Restic checks, monthly sample, quarterly full drill, launch ceremony. | Open |
| RSK-011 | A compromised live host plus B2 writer credential deletes recovery snapshots. | Low | Critical | Security/Privacy | Least-privilege scoped key, MFA/alerts, disclose non-immutable boundary, consider immutable flow only through approved threat-model expansion. | Accepted MVP boundary; monitor |
| RSK-012 | Telegram spoofing, group messages, or another sender inserts private/untrusted content. | Medium without controls | Critical | Backend / Security/Privacy | Exact webhook secret + numeric user + private-chat allowlist; reject groups/others before fetch; negative tests. | Open |
| RSK-013 | Duplicate/reordered callbacks or reconciliation resurrect deleted content or lose revisions. | Medium | High | Backend | Durable idempotency, complete reconciliation, Source Suppression, immutable revisions, partial-list fail closed, lifecycle tests. | Open |
| RSK-014 | Cloudflare Access, cache, tunnel, or hooks-route misconfiguration exposes journal/media. | Low | Critical | Platform/SRE / Security/Privacy | Exact-member policy/MFA, origin assertion validation, loopback service, no-store/cache bypass, route scan, separate hooks host. | Open |
| RSK-015 | Export artifact/passphrase handling leaves a sensitive archive on the server or accessible through a reusable link. | Low | Critical | Backend / Security/Privacy | Private job, one-time passphrase not stored, first-download/one-hour deletion, no signed-storage URL, cleanup/fault tests. | Open |
| RSK-016 | Trash purge or media reference counting permanently deletes still-referenced content. | Low | Critical | Backend / QA | Database constraints, 30-day state, reference-aware GC, transaction/fault tests, backups, restore drill before launch. | Open |
| RSK-017 | R2 migration or remote inventory silently omits objects, eventually aging the only backup copy away. | Medium | Critical | Platform/SRE / Backend | Paginated fail-closed inventory, dual-write, count/size/hash reconciliation, R2-to-Restic restore proof, seven-day observation, reversible ledger. | Open / conditional |
| RSK-018 | Single-server or provider outage makes the application unavailable. | Medium | Medium | Platform/SRE / PO | Best-effort/no-SLA expectation, durable retry/reconciliation, backups/rebuild runbook, degraded-mode behavior; no HA expansion in MVP. | Accepted MVP boundary; monitor |
| RSK-019 | Accessibility or mobile/browser defects make reflection/management unusable. | Medium | High | UX / QA | Design/a11y definitions, keyboard/contrast/motion checks, supported-browser matrix, owner usability test, release gate. | Open |
| RSK-020 | Secrets enter Git, logs, chat-derived artifacts, backups, exports, or client bundles. | Medium | Critical | Security/Privacy | Fresh secrets-only path, allowlisted logs/export, server-only references, scans, bundle inspection, rotation after exposure. | Open |
| RSK-021 | Scope drift introduces coaching, reminders, sharing, historic import, editor, or semantic search before the archive is trustworthy. | Medium | High | Product / PM | Canonical non-goals, change control, deferred IDs, traceability/release review, no hidden feature flags. | Open |
| RSK-022 | The exact at-rest data/key design becomes too complex for recovery or host constraints. | Medium | High | Architect | G2 ADR with prototypes using synthetic data, recovery-first acceptance, simplest passing option, measured CPU/memory/restore evidence. | Open |
| ID | Issue / blocker | Affected work | Owner | Next resolution evidence | Status |
|---|---|---|---|---|---|
| ISS-001 | Arun has not yet explicitly confirmed the proposed shared understanding. | All evaluation execution, implementation, credential collection, configuration, deployment | PO / PM | GOV-008 written confirmation. | Blocking |
| ISS-002 | The exact no-additional-subscription encryption/data/key implementation is intentionally undecided. | ARC, PRV, DOM, MED, backup/export | Architect / Security/Privacy | ARC-005/PRV-001 reviewed ADR after G1. | Open, expected |
| ISS-003 | VoiceNotes material behavior is undocumented. | VNO and automated journal capture | Backend / Architect | VNO-001–005 synthetic spike and accepted/reopened decision. | Open, expected |
| ISS-004 | Exact production Text/Artwork models are intentionally undecided. | TXT, ART, provider settings | AI Evaluation / PO | AIQ-002–010 scorecards and selection, or PO decision after hard-gate failure. | Open, expected |
| ISS-005 | No production credentials, buckets, DNS records, or server configuration have been authorized/provisioned for this project. | Evaluations, integrations, backup, deployment | PO / Platform/SRE | Gate-specific approval and secrets-only provisioning evidence. | Open, by design |
| ISS-006 | Final implementation stack/deployment process is not selected. | ARC and all build tasks | Architect | ARC-002/ARC-007 ADR and review. | Open, expected |
| ID | Approved decision | Consequence for delivery | Source |
|---|---|---|---|
| DEC-001 | MVP is a private single-user trustworthy memory archive, not an AI coach. | No sharing, public links, multi-user, reminders, coaching, or analytics features. | Requirements: Product and audience |
| DEC-002 | Journal Timezone is fixed Asia/Kolkata; Journal Date is editable and Original Timestamp is immutable. |
All scheduling/dating/redating tests use this model. | Requirements: Daily model |
| DEC-003 | Authentic Source Items stay separate from AI Derived Artifacts and every upstream revision is retained. | Data/UI/export never overwrite or masquerade generated content as source. | Requirements |
| DEC-004 | Telegram is the only MVP photo capture surface and accepts only one configured numeric user in one private chat plus webhook secret. | Groups/others are rejected; bot identity is runtime config, not hard-coded. | Requirements: Access |
| DEC-005 | Only exact VoiceNotes tag life-in-days and notes created at/after Integration Activation auto-import. |
No fuzzy tag or automatic historic import. | Requirements: Capture |
| DEC-006 | VoiceNotes webhook is a wake signal; official MCP is the proposed authority subject to a synthetic spike. | G3 can reopen the branch; no undocumented contract is assumed. | Requirements: Capture |
| DEC-007 | Manual journals are dated UTF-8 .txt/.md files up to 1 MiB; no blank browser editor. |
Upload flows preserve original files and duplicates require explicit Add Anyway. | Requirements: Capture |
| DEC-008 | Real photos never go to AI; only journal text may go to selected hosted APIs, and artwork receives only a read-only Visual Brief. | Typed payload allowlists and no-photo tests are release gates. | Requirements: AI boundary |
| DEC-009 | Independent Text and Artwork Provider dropdowns support only passing approved OpenAI/Google configurations with no silent fallback. | Synthetic evaluations precede model adoption and provider change affects only future jobs. | Requirements: AI boundary |
| DEC-010 | Combined one-time evaluation ceiling is $15; production AI ceiling is $5/month with $0.50 text reserve and $4.50 artwork maximum. | Both ledgers hard-stop before overspend; capture/reflection/recovery remain available. | Requirements: AI and operations |
| DEC-011 | Text generation uses a 15-minute quiet period and a 01:00 final refresh; fields protect independently after edit or explicit acceptance. | Protected values are never auto-overwritten; resume is per field. | Requirements: AI boundary |
| DEC-012 | Artwork triggers are only explicit request or 01:00 sweep; manual threshold is 5 words and automatic threshold is 20. | Manual button appears early; sweep repairs eligible post-activation days and honors suppression/budget. | Requirements: AI boundary |
| DEC-013 | Any live Daily Photo forces a real-photo Calendar Cover; artwork remains labeled in the gallery. | Generated art cannot displace documentary evidence. | Requirements: AI boundary |
| DEC-014 | Primary UX is month calendar, timeline, exact lexical search, and Journal Day detail. | Semantic/conversational search and native/offline experiences stay deferred. | Requirements: Reflection |
| DEC-015 | Deletion uses 30-day Trash; VoiceNotes deletion creates Source Suppression and never modifies upstream. | Restore/purge/reimport preserve intent and opaque upstream identity only after purge. | Requirements: Access/lifecycle |
| DEC-016 | Restorable export is AES-256 ZIP by default and includes current/history/Trash/suppressions without reconstructing permanently deleted content. | Passphrase and server artifact have strict ephemeral handling. | Requirements: Access/lifecycle |
| DEC-017 | Human site uses Cloudflare Access exact account-member identity, MFA, seven-day session; callbacks use life-hooks.arunp.in. |
No application password database and no human route on hooks host. | Requirements: Access/lifecycle |
| DEC-018 | Live media launches encrypted on existing root under strict thresholds and migrates to private R2 Standard EU; B2 EU Restic stays independent. | Storage abstraction starts on day one; R2 cutover needs complete backup/restore proof. | Media storage evaluation |
| DEC-019 | Restic retention is 48 hourly, 30 daily, 12 monthly with monthly sampled restore and quarterly full drill. | Backup upload alone never counts as recovery evidence. | Requirements: MVP and recovery |
| DEC-020 | Production launch is blocked on two independent off-server recovery-key copies and successful representative restore/decrypt. | Recovery Ceremony is G8, not a later task. | Requirements: MVP and recovery |
| DEC-021 | Application uses no third-party analytics/crash reporting; sanitized local logs retain 30 days. | Personal content/secrets are forbidden in logs and provider raw payloads are not debugging exhaust. | Requirements: Operations |
| DEC-022 | MVP is best-effort on one existing Hetzner server with no HA/SLA claim. | Reliability work emphasizes durable capture, reconciliation, backup, and rebuild rather than HA expansion. | Requirements: Operations |
| ID | Assumption | Validation task / evidence | If false | Status |
|---|---|---|---|---|
| ASM-001 | The existing Hetzner host remains available and adequate for the selected architecture. | DEP-001, ARC-002, QAE-007. | Reopen hosting/cost decision before build/deploy. | Unvalidated current-state assumption |
| ASM-002 | Cloudflare account first-party identity can uniquely allow Arun with MFA on the free tier. | SEC-002, DEP-008. | Return to PO for another human-auth choice; do not add a password store silently. | To validate |
| ASM-003 | VoiceNotes official MCP can support unattended authoritative reconciliation. | VNO-001–005. | Reopen integration contract and affected MVP scope. | Unknown/material |
| ASM-004 | Telegram Bot API can retrieve every accepted <=20 MB image in the chosen photo/document paths. | TEL-004 integration tests. | Tighten/document supported path or seek explicit design decision. | To validate |
| ASM-005 | A passing OpenAI and passing Google model can fit the fidelity/privacy/contract and budget gates. | AIQ-002–010. | Expose no failing model; return to Arun for provider/model scope decision. | Unknown by design |
| ASM-006 | Application-controlled encryption can fit host resources and still support exact search, thumbnails, export, and recovery simply. | ARC-005, PRV-001–005, QAE-007. | Revisit architecture or host resources with PO trade-off. | To validate |
| ASM-007 | Root disk remains above approved free-space thresholds through launch. | DEP-001, OPS-005, R2M-001. | Bring M11 onto the pre-launch critical path or block media intake. | Continuously measured |
| ASM-008 | B2 and R2 account-wide free allowances are not required for launch viability. | Actual account/bill review before provisioning. | Costs remain separate decision inputs; never double-count free capacity. | To validate |
| ASM-009 | Current provider model IDs/prices/terms remain valid long enough to run the approved evaluations. | AIQ-005/AIQ-010 recheck immediately before execution. | Update report/protocol through change control before spend. | Drift-prone |
| ASM-010 | Arun is comfortable with Cloudflare, Telegram, VoiceNotes, Hetzner, selected AI, R2, and B2 as the stated processor/trust boundaries. | GOV-008, PRV-008, launch acceptance. | Reopen the relevant integration/privacy decision. | Awaiting confirmation |
| ASM-011 | A four-hour full-recovery target is feasible at current/near-term archive size. | BKP-007/BKP-009 measurements. | Record actual target/constraints; do not claim the four-hour result. | To measure |
| ASM-012 | One user requires no application-level item-count cap beyond storage/resource controls. | QAE-007 and capacity observation. | Add a safe operational constraint only through change control, never silent loss/downsampling. | Accepted product assumption; monitor |
The checkboxes below describe release evidence, not implementation intent. Leave an item unchecked until the named evidence exists and has been reviewed.
- Canonical requirements, glossary, research, AI protocols, storage evaluation, and proposed shared understanding exist.
- Arun has explicitly confirmed the shared understanding (
GOV-008). - PRD, implementation plan, UX specification, architecture recommendations, traceability matrix, and tracker passed the recorded cross-document review (
GOV-012). - All 78 stable PRD requirement IDs map to UX, real task IDs, implementation-plan sections, and planned evidence in Requirements Traceability.
- Extend traceability through risks, gates, code modules, and executed evidence as delivery proceeds (
QAE-001). - Every open risk has an owner, test/mitigation, trigger, and accepted or closed state.
- Every hard-to-reverse architecture/security/privacy/cost choice has an approved ADR.
-
Asia/Kolkatadating, explicit historical dates, future-date exclusion, timestamp preservation, and Needs Date Review pass boundaries. - Sources, revisions, Corrections, and Derived Artifacts cannot overwrite or masquerade as one another.
- Redating is atomic across source/destination cover, search, stale state, art eligibility, and visibility.
- Per-field edit/accept protection and resume behavior are independent and revision-safe.
- Real-photo cover precedence and artwork history/active/suppression rules pass all add/remove/restore sequences.
- Duplicate Source Item/Media Asset semantics preserve logical entries while avoiding unintended physical copies.
- Empty Journal Day ordinary visibility, management history, Trash, purge, and suppressions pass invariant tests.
- Telegram wrong secret/user/chat/group is rejected before file retrieval; forwarded allowed-user photos work.
- Telegram photo/document/album/date/caption/duplicate/size/type/capacity scenarios pass with durable acknowledgement ordering.
- VoiceNotes synthetic spike proves or reopens identity, unattended auth, payload, ordering, tag/update/delete, pagination, and reconciliation behavior.
- Exact tag and post-activation creation-time filters reject every historic/broad/fuzzy case.
- Missed/duplicate/out-of-order events converge without lost revision or suppressed-source resurrection.
- Global/day
.txt/.mduploads, validation, duplicate Add Anyway, redating, correction, deletion, export, and backup pass.
- Text fixture set/fact inventories and blind three-repeat run pass the approved hard gates under the shared $15 limit.
- Artwork Stage 0, blind Stage 1, and consistency Stage 2 pass hard gates under the shared $15 limit.
- Exact passing OpenAI/Google dropdown configurations and any qualified economy/premium entry are approved and versioned.
- Text/art provider payload canaries prove no real-photo/photo-derived/caption/account/internal metadata leaves.
- Selected provider failure never silently invokes another provider or model.
- Quiet period, 01:00 final refresh, manual artwork, sweep repair, word thresholds, stale handling, safety refusal, and source-race behavior pass.
-
$0.50text reserve,$4.50artwork allocation,$5total ceiling, 80% warning, retries, predicted overspend, and concurrency pass. - Generated content remains labeled/versioned; source journal remains available through pending/refused/failed/over-budget states.
- Accepted still-image formats/limits pass; malformed/animated/unsupported/oversize/decompression-bomb cases fail safely.
- Originals round-trip byte-for-byte; thumbnail orientation is correct and metadata scan is clean.
- Plaintext staging is bounded/cleaned, unsafe swap blocks startup, and one-decode/backpressure works under host constraints.
- Database, source files, media, thumbnails, and artwork encryption/corruption/rotation/recovery tests pass.
- Access assertion, CSRF/CSP/cookies/headers/cache, callback auth/rate-limit, traversal/injection, and authorization negative tests pass.
- Secret/dependency/configuration/client-bundle/export/backup/log scans show no unresolved critical finding or credential value.
- Cloudflare route/cache scan proves no public journal/media route, shared personal-data cache, or human route on hooks hostname.
- Calendar, timeline, day detail, gallery/cover, source/provenance, upload/manage, search/history, date review, and health journeys pass.
- Calendar/timezone/locale and loading/empty/error/hidden-day/generated-label states meet product acceptance.
- Keyboard/focus, semantic names/status, zoom/reflow, contrast, non-color cues, reduced motion, and destructive confirmations meet WCAG 2.2 AA target.
- Current two major desktop browsers and current iOS Safari/Android Chrome pass the approved matrix.
- Arun completes representative reflection, correction, date review, conflict, Trash/restore, export, and health tasks with synthetic data.
- AES-256 export package contains all promised current/history/Trash/suppression/source/media/provenance/checksum data and no forbidden secret/log data.
- Export validator and full round-trip reproduce restorable state and preserve permanent-deletion boundary.
- First-download/one-hour expiry and cleanup survive failed, repeated, and interrupted download paths.
- Restic consistent snapshots, 48/30/12 retention,
check, prune, interrupted job, and missed-backup alert pass. - Monthly sampled restore decrypts/renders/reconciles representative database/source/photo/artwork.
- Fresh-host full drill records measured recovery time and all gaps; no unverified four-hour claim appears.
- Root full-disk, B2 unavailable, selected AI unavailable, Telegram/VoiceNotes outage, restart, stale job, and partial inventory failure preserve approved degraded behavior.
- Recovery Ceremony independently restores/decrypts using the approved off-server recovery material.
- EU-jurisdiction private R2 Standard configuration and least-privilege credential pass review.
- Complete pagination and deliberate partial-list/read fault fail closed.
- Dual-write/copy/restart and full count/size/hash reconciliation pass.
- R2-to-Restic retained snapshot restore proves database metadata, ciphertext checksum, decrypt, and render.
- Atomic pointer cutover/rollback and seven-day observation pass before any local eviction.
- Every evicted root object has both a verified live R2 object and verified Restic recovery copy.
All items are launch blockers unless the Product Council explicitly records why a line is not applicable and Arun accepts that disposition.
- G0–G6 are closed with linked evidence.
- No MVP requirement is unimplemented, silently deferred, or represented only by a mock.
- No deferred feature is exposed through UI, callback, undocumented endpoint, or enabled flag.
- Arun has accepted the release candidate using representative synthetic data.
- No open severity-1 or severity-2 defect; lower-severity residuals have accepted owners and workarounds.
- Threat model and privacy review have no unresolved critical/high finding.
- Fresh production credentials were delivered through the secrets-only path, never chat/Git/docs, and every scope/permission was tested.
- Telegram exact user/private-chat ID plus webhook secret and VoiceNotes accepted contract work in production-safe checks.
- Cloudflare Access exact-account/member policy, MFA, seven-day session, origin assertion validation, and unauthorized denial pass.
-
life-hooks.arunp.inhas only opaque authenticated callbacks;life.arunp.inpersonal routes/media are private/no-store and origin remains loopback-only. - AI payload/log/export/cache/thumbnail privacy canaries pass; no real-photo/photo-derived data is sent to AI.
- Product copy accurately states processor, provider retention, encryption, and best-effort availability boundaries.
- Database/media encryption, key loading/rotation compatibility, and copied-storage confidentiality checks pass.
- Root/media capacity is safely below watermarks or M11 cutover is complete; emergency stop and projected alerts pass.
- AI model IDs, terms/privacy/lifecycle, credentials, $5 hard cap, and provider health have been rechecked.
- System Health shows green/current evidence for capture, reconciliation, backup, sampled restore, capacity, and AI spend.
- Sanitized 30-day logs and repeated-failure-only Telegram alerts pass; no reminder/analytics/crash service exists.
- Deployment/rollback, database migration, restart/replay, and production-safe smoke test pass.
- A current application-consistent B2/Restic snapshot passes verification.
- A sampled database/photo restore has passed against the release candidate.
- Export round-trip and temporary-artifact cleanup have passed.
- One recovery-key copy is verified in Arun's password manager.
- A second independent sealed recovery-key copy is verified offline.
- A representative encrypted archive is restored and decrypted using the recovery material.
- Recovery/incident/capacity/provider/budget runbooks are accessible without relying solely on the failed server.
- Arun has explicitly authorized deployment and, after the Recovery Ceremony, recorded the final go/no-go decision.
A task or implementation slice is Ready only when all applicable statements are true:
- Its requirement and non-goal references are known and consistent with confirmed scope.
- User-visible behavior, edge/error/degraded states, and measurable acceptance evidence are written.
- Required upstream decision, ADR, model qualification, integration spike, or credential gate is resolved.
- Dependencies and consumers are named by stable task ID; no circular or implicit dependency remains.
- UX/content design exists for all user-visible states, including accessibility and destructive/privacy-sensitive actions.
- Data classification, processor boundary, retention/deletion, logging, cache, encryption, and secret implications are reviewed.
- Test fixtures can be synthetic or safely minimized; no personal data is needed for routine development/test.
- Rollout, migration, rollback/reconciliation, observability, and support evidence are defined where the task changes persistent or external state.
- Owner and reviewers accept the task; Arun has made any product/privacy/cost choice that cannot be inferred safely.
Failing an item keeps the task Not started or Blocked; it is not bypassed by coding first.
A task is Done only when all applicable statements are true:
- The outcome and every acceptance criterion work in the intended environment; no completion is inferred from a code diff alone.
- Unit, integration/contract, end-to-end, failure, privacy/security, accessibility/browser, and migration/recovery tests appropriate to its risk pass.
- Personal data and secrets are absent from logs, fixtures, recordings, screenshots, test artifacts, exports, and client bundles unless explicitly required and protected.
- Database/schema/config migrations, rollback/forward-fix, idempotency, stale-job, and retry behavior are proven where relevant.
- Observability and System Health expose success/failure using sanitized metadata, and runbooks explain recovery.
- UX states, content labels, keyboard/focus, contrast, motion, responsive behavior, and supported browsers pass where relevant.
- Architecture/decision/product/operations documentation and this tracker are updated; evidence is linked or precisely identified.
- No scope is silently dropped. Any changed requirement has an approved change record and updated PRD/plan/tests.
- No unresolved severity-1/2 defect or critical/high security/privacy finding affects the outcome.
- Product/UX/Architecture/Security/QA review has occurred as required; Arun accepts user-facing or material trade-off outcomes.
An epic exits only when every required task is Done, its exit criteria are evidenced, its deferred/conditional tasks are correctly dispositioned, and downstream consumers accept the contract.
| Severity | Definition | Gate effect |
|---|---|---|
| S1 — Critical | Data loss/corruption; irrecoverable archive; unauthorized private-data/secret exposure; source/artifact confusion that changes memory truth; security control bypass; unbounded spend; accepted capture missing. | Stop affected work/release; G5–G9 cannot close. |
| S2 — High | Core capture/reflection/search/manage/export/backup/restore fails without safe workaround; repeated duplication/resurrection; material accessibility block; privacy boundary not proven. | Blocks feature-complete/release/launch until fixed and verified. |
| S3 — Medium | Non-core behavior is wrong or degraded with a safe workaround and no data/privacy/recovery risk. | Must have owner and Product/QA disposition before launch. |
| S4 — Low | Cosmetic or minor usability issue with no trust, access, data, or task-completion impact. | May be accepted into stabilization with owner. |
-
Capture: PM assigns a stable
CHG-###record with requester, evidence, affected requirement/task/risk, and desired outcome. A chat statement is not silently converted into a changed requirement without recording it. - Classify: Product and PM classify it as clarification, MVP scope change, deferred candidate, defect, operational emergency, or provider/security/lifecycle trigger.
- Assess: Product, UX, Architect, Security/Privacy, QA, and Platform/SRE document applicable user, data, privacy, cost, dependency, migration, test, recovery, and milestone impact. AI/provider changes identify whether re-evaluation is mandatory.
- Recommend: Council presents options and a recommendation, separating facts, assumptions, and trade-offs. A critical privacy/security/recovery gate cannot be waived merely to preserve schedule.
- Decide: Arun approves/rejects material product, privacy, provider, recurring-cost, deployment, and launch changes. Architect may approve non-material reversible implementation detail within an accepted ADR; Product may clarify wording that does not change behavior.
- Baseline: Update the PRD, implementation plan, this tracker, glossary, tests, ADRs, registers, and deferred backlog before implementation of the change. Preserve superseded decisions/history.
- Execute and verify: Work follows normal DoR/DoD and gate rules. Deployment/account/DNS/secret mutations still require their own authority.
- Close: PM records evidence, decision date, approvers, affected versions, rollout/rollback result, and residual risk; status reports call out scope/baseline movement.
Emergency containment may temporarily disable a risky integration or generation configuration to protect data/cost. It may not delete source data, weaken privacy controls, add a processor, or silently broaden scope. Permanent remediation returns through the process above.
- Weekly Product Council checkpoint: milestone/gate status; completed task IDs with evidence; in-progress/next-ready work; blocker/issue/risk deltas; decisions needed from Arun; evaluation/AI/storage cost; capacity trend; scope/change records.
- At every gate: evidence review and explicit go/hold/reopen decision. A milestone percentage never substitutes for gate criteria.
- Immediately: report suspected data loss, unauthorized access/disclosure, secret exposure, failed recovery, spend-cap breach, full-disk emergency, critical provider/terms change, or inability to preserve acknowledged capture.
- At milestone close: publish deliverable/evidence index, accepted residual risks, deferred/conditional disposition, operational ownership, and downstream contract handoff.
- Review health/failures/spend/storage/open defects weekly through M10.
- Run and record the monthly sampled restore and quarterly full DR drill on their approved cadence.
- Review AI model lifecycle/terms/privacy/price quarterly and immediately on provider notice or material observed regression.
- Re-evaluate live-storage economics/recovery at approximately 250 GB and R2/B2/Hetzner options around 400–500 GB; re-run the storage decision around 1 TB rather than switching on price alone.
- Current milestone and highest open gate.
- Outcomes completed since last report, each with task ID and evidence.
- Active tasks and the next ready tasks on the critical path.
- New/changed blockers, issues, risks, assumptions, and decisions.
- Defect counts by severity and any launch-blocking finding.
- Evaluation/production AI spend versus cap; media/root/B2/R2 use versus thresholds.
- Capture/reconciliation/backup/restore health evidence and incidents.
- Scope/change-control movement and exact owner action required next.
These items are not part of MVP acceptance. They may be researched or built only after an approved change; their presence here is not authorization or a commitment.
| ID | Candidate / deferred outcome | Why deferred | Re-entry trigger / prerequisite | Status |
|---|---|---|---|---|
| BLG-001 | Bulk/automatic historical VoiceNotes import. | MVP starts prospectively and must prove filtering/reconciliation first. | Stable live integration, explicit import scope/dedup/date/privacy design, PO approval. | Deferred |
| BLG-002 | AI coaching, advice, therapy-like reflection, or diagnosis. | Conflicts with trustworthy archive promise. | New product promise, safety/privacy evaluation, explicit PO approval; not assumed as natural extension. | Deferred |
| BLG-003 | Habit reminders, streaks, smart photo-missing reminders, or motivational notifications. | Arun explicitly excluded reminders from MVP. | New habit need and notification/privacy design approved by PO. | Deferred |
| BLG-004 | Multi-user accounts, shared journals, public links, or social features. | Strict single-user privacy boundary. | New authorization/consent/threat model/data model and explicit PO decision. | Deferred |
| BLG-005 | PDF, Word, OCR, scanned journal, or other document ingestion. | Adds parsing/security/accuracy surfaces beyond text-file need. | Concrete source need, safe parser/OCR privacy evaluation, acceptance criteria. | Deferred |
| BLG-006 | PDF book/print production. | Portable data/browsable export comes first. | Export stable; layout/privacy/vendor requirements and cost approved. | Deferred |
| BLG-007 | Year mosaic or media-wall views. | Calendar/timeline/day detail are sufficient MVP reflection surfaces. | Sustained archive use and owner value signal after stabilization. | Deferred |
| BLG-008 | On This Day resurfacing. | Not needed for prospective archive launch and could create unwanted prompts. | Enough history exists; opt-in behavior/content controls approved. | Deferred |
| BLG-009 | Semantic, vector, conversational, or journal-Q&A search. | Exact lexical search is more deterministic/private for MVP. | Clear retrieval need, citation/fidelity/privacy/provider/cost evaluation. | Deferred |
| BLG-010 | Native iOS/Android applications. | Responsive web covers MVP; native multiplies delivery surface. | Proven sustained use and native-only need. | Deferred |
| BLG-011 | Offline browsing/capture/synchronization. | Complex encrypted sync/conflict/security work. | Explicit offline requirement and architecture/threat-model approval. | Deferred |
| BLG-012 | Blank browser journal composition/editor. | VoiceNotes remains writing surface; upload/Corrections cover manual paths. | New writing-workflow decision and source/provenance semantics. | Deferred |
| BLG-013 | Immutable/ransomware-resistant export or lock-aware recovery tier. | Restic repository cannot safely receive blanket Object Lock; crash/server-loss is accepted MVP threat. | Threat model expands, separate immutable-flow design and cost approved. | Deferred |
| BLG-014 | Additional configurable exact VoiceNotes tags. | One dedicated tag minimizes unintended private-text import. | Stable integration plus settings/preview/audit design and explicit tag approval. | Deferred |
| BLG-015 | Fuzzy/broad VoiceNotes tag matching. | High risk of unintended note import and AI disclosure. | Requires a new explicit product/privacy decision; exact matching remains preferred. | Deferred |
| BLG-016 | Weekly themes, reports, or longitudinal AI reflection. | Coaching/analysis is outside archive-first MVP. | Trustworthy archive established and separate AI fidelity/privacy scope approved. | Deferred |
| BLG-017 | Generated-art style controls or free-form artwork prompt editing. | MVP fixes style and keeps Visual Brief read-only to preserve minimization. | Safe constrained-control design and provider re-evaluation. | Deferred |
| BLG-018 | Maps, location enrichment, weather, or external context. | Adds processors and inferred personal data without core need. | Explicit value/privacy/source-accuracy evaluation and PO approval. | Deferred |
| BLG-019 | Workload Identity Federation for Google instead of a scoped server credential. | Stronger but operationally more complex and no current external identity path is selected. | Google is selected for production and a suitable federation path exists. | Deferred improvement |
| BLG-020 | Private browser thumbnail caching mode. | Default private, no-store minimizes decrypted device persistence. |
Demonstrated performance problem and explicit privacy trade-off approval. | Deferred improvement |
| BLG-021 | B2 as live-media cost-minimum alternative. | Correlates live and backup provider/account/region; R2 is approved target. | Material cost difference at measured scale and PO accepts correlated risk. | Deferred alternative |
| BLG-022 | Hetzner Volume filesystem fallback. | Costs more than object store and lacks independent backup/snapshots. | Object-store adapter proves materially impractical before a capacity deadline and recovery design is re-approved. | Conditional alternative |
| BLG-023 | Hetzner Object Storage re-evaluation. | Fixed minimum is poor at early scale. | Refresh around 400–500 GB with actual R2/B2 bills, recovery, latency, and provider-risk evidence. | Deferred checkpoint |
| BLG-024 | Additional hosted AI or self-hosted models. | Extra processors/credentials/operations are unjustified before OpenAI/Google evaluation. | Both approved providers fail or a documented privacy/fidelity/cost need triggers a new qualification protocol. | Deferred |
- PM owns ID stability. Never renumber a task, risk, issue, decision, assumption, or backlog item after it has been referenced; supersede it through a change record.
- Update status only with an owner and evidence. Complete requires DoD; Blocked requires a named unblock condition; Conditional requires a measured trigger.
- Do not mark parent tasks/epics/milestones complete merely because child code merged. Review exit criteria and evidence explicitly.
- Preserve source links and evidence provenance. Never put secrets, personal journal text, raw provider payloads, images, Telegram identifiers, or signed URLs in this tracker.
- Review critical path, registers, task dependencies, and milestone/gate status at every council checkpoint and after every approved change.
- Keep implementation, evaluation, provider configuration, deployment, and production status claims conservative: describe only evidence that actually exists.
Generated from arunpr614/Life-Reflection@6b8b70b72148 · Canonical content lives in Git · Fictional prototype data only
- Life in Days — Hetzner shared-host runbook
- Life in Days — Phase1 implementation plan
- PID R10 — Conditional Object-Store Transition
- PRD R0 — Shared-Host Private Foundation
- PRD R1 — Manual Journal Archive
- PRD R2 — Telegram Photo Capture
- PRD R3 — Retrieval and Date Integrity
- PRD R4 — Source History and Lifecycle Safety
- PRD R5 — Prospective VoiceNotes Sync
- PRD R6 — Generated Text Reflection
- PRD R7 — Generated Artwork
- PRD R8 — Operational Scale and Resilience
- PRD R9 — Private Launch Acceptance and Stabilization
- Life in Days release documents
- Life in Days Phase 1 — AI agent resource index
- Codex Goal prompt — Phase 1 P0 requirements to private production
- P0 Codex Gold Goal prompt — complete P0 and R0 only
- Phase 1 GitHub Project V2 sync
- Life in Days — Phase 1 Release Plan
- Life in Days — detailed implementation plan
- Life in Days Global PRD
- Life in Days — project tracker
- Life in Days — prototype completeness tracker
- Life in Days — requirements traceability
- Life in Days — UX specification
- Life in Days — AI Artwork Model Evaluation
- Life in Days — AI Text Model Evaluation
- Initial product brief
- Life in Days: Private Media Storage Evaluation
- Requirements under discovery
- Product and integration research
- Project Git provenance
- Life in Days — proposed shared understanding
- Life in Days — Product Council planning-baseline review
- Life in Days Phase 1 — Independent QA Lead charter
- Agent charter — Project Manager
- Agent charter — Senior Product Manager
- Agent charter — Technical Architect
- Agent charter — UI/UX Design Lead
- Life in Days Phase 1 — P0 Owner Action Ledger
- Life in Days Phase 1 — P0 execution context digest
- Life in Days Phase 1 — P0 execution authorization addendum
- Life in Days Phase 1 — P0 execution council charter
- Life in Days Phase 1 — P0 execution decision ledger
- Life in Days Phase 1 — P0 task Definition of Ready
- Life in Days Phase 1 — P0 execution-control review
- P0/R0 Stage 0 control-repair candidate review dossier
- P0/R0 Stage 0 delivery checklist
- P0/R0 Stage 0 rollback and recovery plan
- P0/R0 Stage 0 state contract
- P0/R0 Stage 0 test plan
- PC-001 readiness-control hardening — planning review
- Life in Days — Phase 1 Product Council Decision Record
- Life in Days Phase 1 — source baseline
- Life in Days Phase 1 — Product Council charter
- Life in Days — Product Manager Council Review
- Life in Days — Project Manager Council Review
- Life in Days — Product Council UX Design Review
- Life in Days Product Council
- Life in Days — calendar UI prototype
- Life in Days — calendar UI prototype v2
- Life in Days — unified Calendar and Almanac prototype v3
- Life in Days — Museum Margin Calendar prototype v4
- Life in Days — private Settings and compact privacy prototype v5
- Life in Days — private Search prototype v6
- Life in Days — Calendar contract prototype v7
- Life in Days — Cross-month Almanac prototype v8
- Life in Days — First-use Readiness prototype v9
- Life in Days — Resilient Application Shell prototype v10
- Life in Days calendar UI prototype
- Life in Days calendar UI prototype v2
- Life in Days unified calendar prototype v3
- Life in Days Museum Margin prototype v4
- Life in Days Settings prototype v5
- Life in Days — private Search prototype v6
- Life in Days prototype v7 — Calendar contract completion
- Life in Days prototype v8 — Cross-month Almanac
- Life in Days prototype v9 — First-use Readiness
- Life in Days prototype v10 — Resilient Application Shell
- v6 Product Council contract — Private Search State
- Life in Days prototype v7 — Product Council contract
- Life in Days prototype v8 — Product Council contract
- Life in Days prototype v9 — Product Council contract
- Life in Days prototype v10 — Product Council contract
- Life in Days v2 — design QA
- Life in Days unified prototype v3 — design QA
- Life in Days v4 — design QA
- Life in Days v5 design QA
- Life in Days v5 design QA
- Life in Days v6 — independent design and interaction QA
- Life in Days v7 — independent design and interaction QA
- Life in Days prototype v8 — independent design QA
- Life in Days prototype v9 — independent design QA
- Life in Days prototype v10 — independent design QA
- Life in Days prototype v5 — PRD feature audit
- AI agent operating contract — keep Phase 1 alive
- Contributing to Life in Days
- GitHub Projects Roadmap — current capability research
- Life in Days — Hetzner shared-host deployment spike
- Wayfinder for Life in Days Phase 1 — adoption and GitHub integration report
- Life in Days — GitHub Projects Roadmap design spike
- ARCH-R0-001 — Product Council task readiness
- ARCH-R0-001 — task delivery checklist
- ARCH-R0-001 — task design specification
- ARCH-R0-001 — task product requirements
- ARCH-R0-001 — task QA plan
- ARCH-R0-001 — task technical plan
- ARCH-R1-001 — Product Council task readiness
- ARCH-R1-001 — task delivery checklist
- ARCH-R1-001 — task design specification
- ARCH-R1-001 — task product requirements
- ARCH-R1-001 — task QA plan
- ARCH-R1-001 — task technical plan
- ARCH-R2-001 — Product Council task readiness
- ARCH-R2-001 — task delivery checklist
- ARCH-R2-001 — task design specification
- ARCH-R2-001 — task product requirements
- ARCH-R2-001 — task QA plan
- ARCH-R2-001 — task technical plan
- ARCH-R3-001 — Product Council task readiness
- ARCH-R3-001 — task delivery checklist
- ARCH-R3-001 — task design specification
- ARCH-R3-001 — task product requirements
- ARCH-R3-001 — task QA plan
- ARCH-R3-001 — task technical plan
- ARCH-R4-001 — Product Council task readiness
- ARCH-R4-001 — task delivery checklist
- ARCH-R4-001 — task design specification
- ARCH-R4-001 — task product requirements
- ARCH-R4-001 — task QA plan
- ARCH-R4-001 — task technical plan
- ARCH-R5-001 — Product Council task readiness
- ARCH-R5-001 — task delivery checklist
- ARCH-R5-001 — task design specification
- ARCH-R5-001 — task product requirements
- ARCH-R5-001 — task QA plan
- ARCH-R5-001 — task technical plan
- ARCH-R6-001 — Product Council task readiness
- ARCH-R6-001 — task delivery checklist
- ARCH-R6-001 — task design specification
- ARCH-R6-001 — task product requirements
- ARCH-R6-001 — task QA plan
- ARCH-R6-001 — task technical plan
- ARCH-R7-001 — Product Council task readiness
- ARCH-R7-001 — task delivery checklist
- ARCH-R7-001 — task design specification
- ARCH-R7-001 — task product requirements
- ARCH-R7-001 — task QA plan
- ARCH-R7-001 — task technical plan
- ARCH-R8-001 — Product Council task readiness
- ARCH-R8-001 — task delivery checklist
- ARCH-R8-001 — task design specification
- ARCH-R8-001 — task product requirements
- ARCH-R8-001 — task QA plan
- ARCH-R8-001 — task technical plan
- ARCH-R10-001 — Product Council task readiness
- ARCH-R10-001 — task delivery checklist
- ARCH-R10-001 — task design specification
- ARCH-R10-001 — task product requirements
- ARCH-R10-001 — task QA plan
- ARCH-R10-001 — task technical plan
- AUD-001 — Product Council task readiness
- AUD-001 — task delivery checklist
- AUD-001 — task design specification
- AUD-001 — task product requirements
- AUD-001 — task QA plan
- AUD-001 — task technical plan
- ENG-R0-001 — Product Council task readiness
- ENG-R0-001 — task delivery checklist
- ENG-R0-001 — task design specification
- ENG-R0-001 — task product requirements
- ENG-R0-001 — task QA plan
- ENG-R0-001 — task technical plan
- ENG-R1-001 — Product Council task readiness
- ENG-R1-001 — task delivery checklist
- ENG-R1-001 — task design specification
- ENG-R1-001 — task product requirements
- ENG-R1-001 — task QA plan
- ENG-R1-001 — task technical plan
- ENG-R2-001 — Product Council task readiness
- ENG-R2-001 — task delivery checklist
- ENG-R2-001 — task design specification
- ENG-R2-001 — task product requirements
- ENG-R2-001 — task QA plan
- ENG-R2-001 — task technical plan
- ENG-R2-002 — Product Council task readiness
- ENG-R2-002 — task delivery checklist
- ENG-R2-002 — task design specification
- ENG-R2-002 — task product requirements
- ENG-R2-002 — task QA plan
- ENG-R2-002 — task technical plan
- ENG-R3-001 — Product Council task readiness
- ENG-R3-001 — task delivery checklist
- ENG-R3-001 — task design specification
- ENG-R3-001 — task product requirements
- ENG-R3-001 — task QA plan
- ENG-R3-001 — task technical plan
- ENG-R4-001 — Product Council task readiness
- ENG-R4-001 — task delivery checklist
- ENG-R4-001 — task design specification
- ENG-R4-001 — task product requirements
- ENG-R4-001 — task QA plan
- ENG-R4-001 — task technical plan
- ENG-R4-002 — Product Council task readiness
- ENG-R4-002 — task delivery checklist
- ENG-R4-002 — task design specification
- ENG-R4-002 — task product requirements
- ENG-R4-002 — task QA plan
- ENG-R4-002 — task technical plan
- ENG-R5-001 — Product Council task readiness
- ENG-R5-001 — task delivery checklist
- ENG-R5-001 — task design specification
- ENG-R5-001 — task product requirements
- ENG-R5-001 — task QA plan
- ENG-R5-001 — task technical plan
- ENG-R6-001 — Product Council task readiness
- ENG-R6-001 — task delivery checklist
- ENG-R6-001 — task design specification
- ENG-R6-001 — task product requirements
- ENG-R6-001 — task QA plan
- ENG-R6-001 — task technical plan
- ENG-R7-001 — Product Council task readiness
- ENG-R7-001 — task delivery checklist
- ENG-R7-001 — task design specification
- ENG-R7-001 — task product requirements
- ENG-R7-001 — task QA plan
- ENG-R7-001 — task technical plan
- EVAL-R6-001 — Product Council task readiness
- EVAL-R6-001 — task delivery checklist
- EVAL-R6-001 — task design specification
- EVAL-R6-001 — task product requirements
- EVAL-R6-001 — task QA plan
- EVAL-R6-001 — task technical plan
- EVAL-R7-001 — Product Council task readiness
- EVAL-R7-001 — task delivery checklist
- EVAL-R7-001 — task design specification
- EVAL-R7-001 — task product requirements
- EVAL-R7-001 — task QA plan
- EVAL-R7-001 — task technical plan
- PC-001 — readiness-control hardening Council record
- PC-001 — readiness-control hardening delivery plan
- PC-001 — readiness-control evidence design specification
- PC-001 — readiness-control hardening product requirements
- PC-001 — readiness-control hardening QA plan
- PC-001 — readiness-control hardening technical plan
- PID-R10-001 — Product Council task readiness
- PID-R10-001 — task delivery checklist
- PID-R10-001 — task design specification
- PID-R10-001 — task product requirements
- PID-R10-001 — task QA plan
- PID-R10-001 — task technical plan
- PRD-R0-001 — Product Council task readiness
- PRD-R0-001 — task delivery checklist
- PRD-R0-001 — task design specification
- PRD-R0-001 — task product requirements
- PRD-R0-001 — task QA plan
- PRD-R0-001 — task technical plan
- PRD-R1-001 — Product Council task readiness
- PRD-R1-001 — task delivery checklist
- PRD-R1-001 — task design specification
- PRD-R1-001 — task product requirements
- PRD-R1-001 — task QA plan
- PRD-R1-001 — task technical plan
- PRD-R2-001 — Product Council task readiness
- PRD-R2-001 — task delivery checklist
- PRD-R2-001 — task design specification
- PRD-R2-001 — task product requirements
- PRD-R2-001 — task QA plan
- PRD-R2-001 — task technical plan
- PRD-R3-001 — Product Council task readiness
- PRD-R3-001 — task delivery checklist
- PRD-R3-001 — task design specification
- PRD-R3-001 — task product requirements
- PRD-R3-001 — task QA plan
- PRD-R3-001 — task technical plan
- PRD-R4-001 — Product Council task readiness
- PRD-R4-001 — task delivery checklist
- PRD-R4-001 — task design specification
- PRD-R4-001 — task product requirements
- PRD-R4-001 — task QA plan
- PRD-R4-001 — task technical plan
- PRD-R5-001 — Product Council task readiness
- PRD-R5-001 — task delivery checklist
- PRD-R5-001 — task design specification
- PRD-R5-001 — task product requirements
- PRD-R5-001 — task QA plan
- PRD-R5-001 — task technical plan
- PRD-R6-001 — Product Council task readiness
- PRD-R6-001 — task delivery checklist
- PRD-R6-001 — task design specification
- PRD-R6-001 — task product requirements
- PRD-R6-001 — task QA plan
- PRD-R6-001 — task technical plan
- PRD-R7-001 — Product Council task readiness
- PRD-R7-001 — task delivery checklist
- PRD-R7-001 — task design specification
- PRD-R7-001 — task product requirements
- PRD-R7-001 — task QA plan
- PRD-R7-001 — task technical plan
- PRD-R8-001 — Product Council task readiness
- PRD-R8-001 — task delivery checklist
- PRD-R8-001 — task design specification
- PRD-R8-001 — task product requirements
- PRD-R8-001 — task QA plan
- PRD-R8-001 — task technical plan
- PRD-R9-001 — Product Council task readiness
- PRD-R9-001 — task delivery checklist
- PRD-R9-001 — task design specification
- PRD-R9-001 — task product requirements
- PRD-R9-001 — task QA plan
- PRD-R9-001 — task technical plan
- QA-R8-001 — Product Council task readiness
- QA-R8-001 — task delivery checklist
- QA-R8-001 — task design specification
- QA-R8-001 — task product requirements
- QA-R8-001 — task QA plan
- QA-R8-001 — task technical plan
- QA-R9-001 — Product Council task readiness
- QA-R9-001 — task delivery checklist
- QA-R9-001 — task design specification
- QA-R9-001 — task product requirements
- QA-R9-001 — task QA plan
- QA-R9-001 — task technical plan
- REL-R0-001 — Product Council task readiness
- REL-R0-001 — task delivery checklist
- REL-R0-001 — task design specification
- REL-R0-001 — task product requirements
- REL-R0-001 — task QA plan
- REL-R0-001 — task technical plan
- REL-R1-001 — Product Council task readiness
- REL-R1-001 — task delivery checklist
- REL-R1-001 — task design specification
- REL-R1-001 — task product requirements
- REL-R1-001 — task QA plan
- REL-R1-001 — task technical plan
- REL-R2-001 — Product Council task readiness
- REL-R2-001 — task delivery checklist
- REL-R2-001 — task design specification
- REL-R2-001 — task product requirements
- REL-R2-001 — task QA plan
- REL-R2-001 — task technical plan
- REL-R3-001 — Product Council task readiness
- REL-R3-001 — task delivery checklist
- REL-R3-001 — task design specification
- REL-R3-001 — task product requirements
- REL-R3-001 — task QA plan
- REL-R3-001 — task technical plan
- REL-R4-001 — Product Council task readiness
- REL-R4-001 — task delivery checklist
- REL-R4-001 — task design specification
- REL-R4-001 — task product requirements
- REL-R4-001 — task QA plan
- REL-R4-001 — task technical plan
- REL-R5-001 — Product Council task readiness
- REL-R5-001 — task delivery checklist
- REL-R5-001 — task design specification
- REL-R5-001 — task product requirements
- REL-R5-001 — task QA plan
- REL-R5-001 — task technical plan
- REL-R6-001 — Product Council task readiness
- REL-R6-001 — task delivery checklist
- REL-R6-001 — task design specification
- REL-R6-001 — task product requirements
- REL-R6-001 — task QA plan
- REL-R6-001 — task technical plan
- REL-R7-001 — Product Council task readiness
- REL-R7-001 — task delivery checklist
- REL-R7-001 — task design specification
- REL-R7-001 — task product requirements
- REL-R7-001 — task QA plan
- REL-R7-001 — task technical plan
- REL-R8-001 — Product Council task readiness
- REL-R8-001 — task delivery checklist
- REL-R8-001 — task design specification
- REL-R8-001 — task product requirements
- REL-R8-001 — task QA plan
- REL-R8-001 — task technical plan
- REL-R9-001 — Product Council task readiness
- REL-R9-001 — task delivery checklist
- REL-R9-001 — task design specification
- REL-R9-001 — task product requirements
- REL-R9-001 — task QA plan
- REL-R9-001 — task technical plan
- REL-R10-001 — Product Council task readiness
- REL-R10-001 — task delivery checklist
- REL-R10-001 — task design specification
- REL-R10-001 — task product requirements
- REL-R10-001 — task QA plan
- REL-R10-001 — task technical plan
- SPK-R0-001 — Product Council task readiness
- SPK-R0-001 — task delivery checklist
- SPK-R0-001 — task design specification
- SPK-R0-001 — task product requirements
- SPK-R0-001 — task QA plan
- SPK-R0-001 — task technical plan
- SPK-R5-001 — Product Council task readiness
- SPK-R5-001 — task delivery checklist
- SPK-R5-001 — task design specification
- SPK-R5-001 — task product requirements
- SPK-R5-001 — task QA plan
- SPK-R5-001 — task technical plan
- UX-R0-001 — Product Council task readiness
- UX-R0-001 — task delivery checklist
- UX-R0-001 — task design specification
- UX-R0-001 — task product requirements
- UX-R0-001 — task QA plan
- UX-R0-001 — task technical plan
- UX-R1-001 — Product Council task readiness
- UX-R1-001 — task delivery checklist
- UX-R1-001 — task design specification
- UX-R1-001 — task product requirements
- UX-R1-001 — task QA plan
- UX-R1-001 — task technical plan
- UX-R2-001 — Product Council task readiness
- UX-R2-001 — task delivery checklist
- UX-R2-001 — task design specification
- UX-R2-001 — task product requirements
- UX-R2-001 — task QA plan
- UX-R2-001 — task technical plan
- UX-R3-001 — Product Council task readiness
- UX-R3-001 — task delivery checklist
- UX-R3-001 — task design specification
- UX-R3-001 — task product requirements
- UX-R3-001 — task QA plan
- UX-R3-001 — task technical plan
- UX-R4-001 — Product Council task readiness
- UX-R4-001 — task delivery checklist
- UX-R4-001 — task design specification
- UX-R4-001 — task product requirements
- UX-R4-001 — task QA plan
- UX-R4-001 — task technical plan
- UX-R5-001 — Product Council task readiness
- UX-R5-001 — task delivery checklist
- UX-R5-001 — task design specification
- UX-R5-001 — task product requirements
- UX-R5-001 — task QA plan
- UX-R5-001 — task technical plan
- UX-R6-001 — Product Council task readiness
- UX-R6-001 — task delivery checklist
- UX-R6-001 — task design specification
- UX-R6-001 — task product requirements
- UX-R6-001 — task QA plan
- UX-R6-001 — task technical plan
- UX-R7-001 — Product Council task readiness
- UX-R7-001 — task delivery checklist
- UX-R7-001 — task design specification
- UX-R7-001 — task product requirements
- UX-R7-001 — task QA plan
- UX-R7-001 — task technical plan
- Life in Days — document index
- Life in Days
- Life in Days - Running Log
- Publication provenance
- Pull-Request-Template
- Life in Days
- Security and privacy reporting