sdlc: accept the schema_version 3 -> 4 migration

`sdlc` 0.5.1 rewrites every feature manifest on read - `sdlc state` alone did
this - so the migration cannot be avoided, only recorded. It is idempotent:
repeated reads produce no further churn (verified by checksum).

What schema 4 drops, so it is findable later:
- feature-level `id` (now derived from `slug`) and `updated_at`.
- per-task history: `created_at` is re-stamped with the migration instant and
  `completed_at` is nulled, so task timing before 2026-08-16 is not recoverable
  from these files.
- m9-community-profile-sync additionally loses 18 phase-history and artifact
  timestamps (`entered`/`exited`/`approved_at`, 2026-03-04).

The pre-migration record is this commit's parent:
  git show HEAD~1:.sdlc/features/m9-community-profile-sync/manifest.yaml

Committed separately from any state transition so the loss is one reviewable
diff rather than noise inside a feature change. `.sdlc/` is CLI-owned; nothing
here was hand-edited.
This commit is contained in:
jordan 2026-08-16 12:39:22 -06:00
parent c97aaa8e5b
commit cc0b894480
22 changed files with 103 additions and 74 deletions

View File

@ -161,4 +161,4 @@ phase_history:
exited: null exited: null
dependencies: [] dependencies: []
archived: false archived: false
schema_version: 3 schema_version: 4

View File

@ -152,4 +152,4 @@ phase_history:
exited: null exited: null
dependencies: [] dependencies: []
archived: false archived: false
schema_version: 3 schema_version: 4

View File

@ -98,4 +98,4 @@ phase_history:
exited: null exited: null
dependencies: [] dependencies: []
archived: false archived: false
schema_version: 3 schema_version: 4

View File

@ -1,64 +1,63 @@
id: m9-community-profile-sync
slug: m9-community-profile-sync slug: m9-community-profile-sync
title: Community Profile Sync title: Community Profile Sync
description: Opt-in sharing from local embedded profiles to community personalization layers — events flow to shared aggregates while local WAL remains primary description: Opt-in sharing from local embedded profiles to community personalization layers — events flow to shared aggregates while local WAL remains primary
phase: released phase: released
created_at: 2026-03-03T06:29:37.975394Z created_at: 2026-03-03T06:29:37.975394Z
updated_at: 2026-03-04T17:17:00.000000Z updated_at: 2026-03-04T17:17:00Z
artifacts: artifacts:
- artifact_type: spec - artifact_type: spec
status: approved status: approved
path: .sdlc/features/m9-community-profile-sync/spec.md path: .sdlc/features/m9-community-profile-sync/spec.md
created_at: 2026-03-04T01:51:00.000000Z created_at: 2026-03-04T01:51:00Z
approved_at: 2026-03-04T01:51:00.000000Z approved_at: 2026-03-04T01:51:00Z
rejected_at: null rejected_at: null
rejection_reason: null rejection_reason: null
approved_by: null approved_by: null
- artifact_type: design - artifact_type: design
status: approved status: approved
path: .sdlc/features/m9-community-profile-sync/design.md path: .sdlc/features/m9-community-profile-sync/design.md
created_at: 2026-03-04T01:51:05.000000Z created_at: 2026-03-04T01:51:05Z
approved_at: 2026-03-04T01:51:05.000000Z approved_at: 2026-03-04T01:51:05Z
rejected_at: null rejected_at: null
rejection_reason: null rejection_reason: null
approved_by: null approved_by: null
- artifact_type: tasks - artifact_type: tasks
status: approved status: approved
path: .sdlc/features/m9-community-profile-sync/tasks.md path: .sdlc/features/m9-community-profile-sync/tasks.md
created_at: 2026-03-04T01:51:08.000000Z created_at: 2026-03-04T01:51:08Z
approved_at: 2026-03-04T01:51:08.000000Z approved_at: 2026-03-04T01:51:08Z
rejected_at: null rejected_at: null
rejection_reason: null rejection_reason: null
approved_by: null approved_by: null
- artifact_type: qa_plan - artifact_type: qa_plan
status: approved status: approved
path: .sdlc/features/m9-community-profile-sync/qa-plan.md path: .sdlc/features/m9-community-profile-sync/qa-plan.md
created_at: 2026-03-04T01:51:10.000000Z created_at: 2026-03-04T01:51:10Z
approved_at: 2026-03-04T01:51:10.000000Z approved_at: 2026-03-04T01:51:10Z
rejected_at: null rejected_at: null
rejection_reason: null rejection_reason: null
approved_by: null approved_by: null
- artifact_type: review - artifact_type: review
status: approved status: approved
path: .sdlc/features/m9-community-profile-sync/review.md path: .sdlc/features/m9-community-profile-sync/review.md
created_at: 2026-03-04T01:51:50.000000Z created_at: 2026-03-04T01:51:50Z
approved_at: 2026-03-04T01:51:50.000000Z approved_at: 2026-03-04T01:51:50Z
rejected_at: null rejected_at: null
rejection_reason: null rejection_reason: null
approved_by: null approved_by: null
- artifact_type: audit - artifact_type: audit
status: approved status: approved
path: .sdlc/features/m9-community-profile-sync/audit.md path: .sdlc/features/m9-community-profile-sync/audit.md
created_at: 2026-03-04T01:52:02.000000Z created_at: 2026-03-04T01:52:02Z
approved_at: 2026-03-04T01:52:02.000000Z approved_at: 2026-03-04T01:52:02Z
rejected_at: null rejected_at: null
rejection_reason: null rejection_reason: null
approved_by: null approved_by: null
- artifact_type: qa_results - artifact_type: qa_results
status: approved status: approved
path: .sdlc/features/m9-community-profile-sync/qa-results.md path: .sdlc/features/m9-community-profile-sync/qa-results.md
created_at: 2026-03-04T01:55:40.000000Z created_at: 2026-03-04T01:55:40Z
approved_at: 2026-03-04T01:55:40.000000Z approved_at: 2026-03-04T01:55:40Z
rejected_at: null rejected_at: null
rejection_reason: null rejection_reason: null
approved_by: null approved_by: null
@ -69,34 +68,34 @@ blockers: []
phase_history: phase_history:
- phase: draft - phase: draft
entered: 2026-03-03T06:29:37.975394Z entered: 2026-03-03T06:29:37.975394Z
exited: 2026-03-04T01:51:00.000000Z exited: 2026-03-04T01:51:00Z
- phase: specified - phase: specified
entered: 2026-03-04T01:51:00.000000Z entered: 2026-03-04T01:51:00Z
exited: 2026-03-04T01:51:08.000000Z exited: 2026-03-04T01:51:08Z
- phase: planned - phase: planned
entered: 2026-03-04T01:51:08.000000Z entered: 2026-03-04T01:51:08Z
exited: 2026-03-04T01:51:08.235537Z exited: 2026-03-04T01:51:08.235537Z
- phase: ready - phase: ready
entered: 2026-03-04T01:51:08.235537Z entered: 2026-03-04T01:51:08.235537Z
exited: 2026-03-04T01:51:13.153999Z exited: 2026-03-04T01:51:13.153999Z
- phase: implementation - phase: implementation
entered: 2026-03-04T01:51:13.153999Z entered: 2026-03-04T01:51:13.153999Z
exited: 2026-03-04T01:51:50.000000Z exited: 2026-03-04T01:51:50Z
- phase: review - phase: review
entered: 2026-03-04T01:51:50.000000Z entered: 2026-03-04T01:51:50Z
exited: 2026-03-04T01:52:02.724965Z exited: 2026-03-04T01:52:02.724965Z
- phase: audit - phase: audit
entered: 2026-03-04T01:52:02.724965Z entered: 2026-03-04T01:52:02.724965Z
exited: 2026-03-04T01:55:40.000000Z exited: 2026-03-04T01:55:40Z
- phase: qa - phase: qa
entered: 2026-03-04T01:55:40.000000Z entered: 2026-03-04T01:55:40Z
exited: 2026-03-04T01:55:48.000000Z exited: 2026-03-04T01:55:48Z
- phase: merge - phase: merge
entered: 2026-03-04T01:55:48.000000Z entered: 2026-03-04T01:55:48Z
exited: 2026-03-04T01:55:48.195642Z exited: 2026-03-04T01:55:48.195642Z
- phase: released - phase: released
entered: 2026-03-04T01:55:48.195642Z entered: 2026-03-04T01:55:48.195642Z
exited: null exited: null
dependencies: [] dependencies: []
archived: false archived: false
schema_version: 3 schema_version: 4

View File

@ -1,4 +1,3 @@
id: m9-leave-revocation
slug: m9-leave-revocation slug: m9-leave-revocation
title: Leave & Stop-Forward title: Leave & Stop-Forward
description: 'User leaves community layer: stop forwarding new signals, snapshot current contribution boundary, allow opt-back-in path' description: 'User leaves community layer: stop forwarding new signals, snapshot current contribution boundary, allow opt-back-in path'
@ -99,4 +98,4 @@ phase_history:
exited: null exited: null
dependencies: [] dependencies: []
archived: false archived: false
schema_version: 3 schema_version: 4

View File

@ -1,4 +1,3 @@
id: m9-purge-rematerialization
slug: m9-purge-rematerialization slug: m9-purge-rematerialization
title: Re-materialization after Purge title: Re-materialization after Purge
description: 'Background re-materialization engine: replay community WAL minus purged contributions, verify aggregate convergence, emit audit log' description: 'Background re-materialization engine: replay community WAL minus purged contributions, verify aggregate convergence, emit audit log'
@ -99,4 +98,4 @@ phase_history:
exited: null exited: null
dependencies: [] dependencies: []
archived: false archived: false
schema_version: 3 schema_version: 4

View File

@ -1,4 +1,3 @@
id: m9-retroactive-purge
slug: m9-retroactive-purge slug: m9-retroactive-purge
title: Retroactive Signal Purge title: Retroactive Signal Purge
description: 'On explicit purge request: remove user''s contributed signals from community aggregates with deterministic re-materialization, preserving correctness' description: 'On explicit purge request: remove user''s contributed signals from community aggregates with deterministic re-materialization, preserving correctness'
@ -65,28 +64,76 @@ artifacts:
tasks: tasks:
- id: T1 - id: T1
title: 'T1: CohortContributionLog' title: 'T1: CohortContributionLog'
status: done description: null
status: completed
created_at: 2026-08-16T15:43:26.081106Z
started_at: null
completed_at: null
blocker: null
depends_on: []
- id: T2 - id: T2
title: 'T2: Ledger Retraction Methods' title: 'T2: Ledger Retraction Methods'
status: done description: null
status: completed
created_at: 2026-08-16T15:43:26.081108Z
started_at: null
completed_at: null
blocker: null
depends_on: []
- id: T3 - id: T3
title: 'T3: Tag::PurgeManifest Storage Key' title: 'T3: Tag::PurgeManifest Storage Key'
status: done description: null
status: completed
created_at: 2026-08-16T15:43:26.081109Z
started_at: null
completed_at: null
blocker: null
depends_on: []
- id: T4 - id: T4
title: 'T4: PurgeCoordinator and PurgeManifest' title: 'T4: PurgeCoordinator and PurgeManifest'
status: done description: null
status: completed
created_at: 2026-08-16T15:43:26.081110Z
started_at: null
completed_at: null
blocker: null
depends_on: []
- id: T5 - id: T5
title: 'T5: TidalDb Struct Fields' title: 'T5: TidalDb Struct Fields'
status: done description: null
status: completed
created_at: 2026-08-16T15:43:26.081111Z
started_at: null
completed_at: null
blocker: null
depends_on: []
- id: T6 - id: T6
title: 'T6: Wire Contribution Log into Signal Hot Path' title: 'T6: Wire Contribution Log into Signal Hot Path'
status: done description: null
status: completed
created_at: 2026-08-16T15:43:26.081116Z
started_at: null
completed_at: null
blocker: null
depends_on: []
- id: T7 - id: T7
title: 'T7: Public API db/purge.rs' title: 'T7: Public API db/purge.rs'
status: done description: null
status: completed
created_at: 2026-08-16T15:43:26.081117Z
started_at: null
completed_at: null
blocker: null
depends_on: []
- id: T8 - id: T8
title: 'T8: Integration Tests' title: 'T8: Integration Tests'
status: done description: null
status: completed
created_at: 2026-08-16T15:43:26.081118Z
started_at: null
completed_at: null
blocker: null
depends_on: []
comments: [] comments: []
next_comment_seq: 0 next_comment_seq: 0
blockers: [] blockers: []
@ -99,4 +146,4 @@ phase_history:
exited: null exited: null
dependencies: [] dependencies: []
archived: false archived: false
schema_version: 3 schema_version: 4

View File

@ -1,4 +1,3 @@
id: p1-briefing-ux-reason-labels
slug: p1-briefing-ux-reason-labels slug: p1-briefing-ux-reason-labels
title: Briefing UX & Reason Labels title: Briefing UX & Reason Labels
description: Card UI spec with reasons taxonomy and source exposure rules — users see why each item was surfaced description: Card UI spec with reasons taxonomy and source exposure rules — users see why each item was surfaced
@ -162,4 +161,4 @@ phase_history:
exited: null exited: null
dependencies: [] dependencies: []
archived: false archived: false
schema_version: 3 schema_version: 4

View File

@ -1,4 +1,3 @@
id: p1-feedback-loop-ux
slug: p1-feedback-loop-ux slug: p1-feedback-loop-ux
title: Feedback Loop UX title: Feedback Loop UX
description: Mute/hide/like controls with immediate next-refresh reflection; negative feedback visible in ranking within one refresh cycle description: Mute/hide/like controls with immediate next-refresh reflection; negative feedback visible in ranking within one refresh cycle
@ -113,4 +112,4 @@ phase_history:
exited: null exited: null
dependencies: [] dependencies: []
archived: false archived: false
schema_version: 3 schema_version: 4

View File

@ -1,4 +1,3 @@
id: p1-quality-diversity-baseline
slug: p1-quality-diversity-baseline slug: p1-quality-diversity-baseline
title: Quality & Diversity Baseline title: Quality & Diversity Baseline
description: Quality gates (min completion rate, score threshold) and diversity constraints active in top results; no creator dominates the brief description: Quality gates (min completion rate, score threshold) and diversity constraints active in top results; no creator dominates the brief
@ -126,4 +125,4 @@ phase_history:
exited: null exited: null
dependencies: [] dependencies: []
archived: false archived: false
schema_version: 3 schema_version: 4

View File

@ -1,4 +1,3 @@
id: p2-cohort-context-views
slug: p2-cohort-context-views slug: p2-cohort-context-views
title: Cohort & Context Views title: Cohort & Context Views
description: Cohort-trending surface ('what's trending for people like you') and session context mode visible in the product description: Cohort-trending surface ('what's trending for people like you') and session context mode visible in the product
@ -72,4 +71,4 @@ phase_history:
exited: null exited: null
dependencies: [] dependencies: []
archived: false archived: false
schema_version: 3 schema_version: 4

View File

@ -1,4 +1,3 @@
id: p2-self-serve-onboarding
slug: p2-self-serve-onboarding slug: p2-self-serve-onboarding
title: Self-Serve Onboarding title: Self-Serve Onboarding
description: Onboarding flow with defaults and profile bootstrap; new user goes from signup to first ranked brief in under 3 minutes description: Onboarding flow with defaults and profile bootstrap; new user goes from signup to first ranked brief in under 3 minutes
@ -72,4 +71,4 @@ phase_history:
exited: null exited: null
dependencies: [] dependencies: []
archived: false archived: false
schema_version: 3 schema_version: 4

View File

@ -1,4 +1,3 @@
id: p2-trust-controls
slug: p2-trust-controls slug: p2-trust-controls
title: Trust Controls & Transparency title: Trust Controls & Transparency
description: Mute/hide persistence across sessions, quality signals visible to user, explanation UX for why items were surfaced description: Mute/hide persistence across sessions, quality signals visible to user, explanation UX for why items were surfaced
@ -72,4 +71,4 @@ phase_history:
exited: null exited: null
dependencies: [] dependencies: []
archived: false archived: false
schema_version: 3 schema_version: 4

View File

@ -1,4 +1,3 @@
id: p3-launch-support-playbook
slug: p3-launch-support-playbook slug: p3-launch-support-playbook
title: Launch & Support Playbook title: Launch & Support Playbook
description: Launch checklist, incident roles, communication templates — team can respond to production issues within defined SLA description: Launch checklist, incident roles, communication templates — team can respond to production issues within defined SLA
@ -72,4 +71,4 @@ phase_history:
exited: null exited: null
dependencies: [] dependencies: []
archived: false archived: false
schema_version: 3 schema_version: 4

View File

@ -1,4 +1,3 @@
id: p3-quality-operations
slug: p3-quality-operations slug: p3-quality-operations
title: Quality Operations title: Quality Operations
description: Quality floor checks, regression dashboards, and alerting — no launch-day quality regressions ship undetected description: Quality floor checks, regression dashboards, and alerting — no launch-day quality regressions ship undetected
@ -72,4 +71,4 @@ phase_history:
exited: null exited: null
dependencies: [] dependencies: []
archived: false archived: false
schema_version: 3 schema_version: 4

View File

@ -1,4 +1,3 @@
id: p3-reliability-slos
slug: p3-reliability-slos slug: p3-reliability-slos
title: Reliability & SLOs title: Reliability & SLOs
description: Launch SLOs defined, monitoring active, error budgets tracked — briefing generation latency and availability within targets description: Launch SLOs defined, monitoring active, error budgets tracked — briefing generation latency and availability within targets
@ -72,4 +71,4 @@ phase_history:
exited: null exited: null
dependencies: [] dependencies: []
archived: false archived: false
schema_version: 3 schema_version: 4

View File

@ -1,4 +1,3 @@
id: p4-monetization-experiments
slug: p4-monetization-experiments slug: p4-monetization-experiments
title: Monetization Experiments title: Monetization Experiments
description: Pricing tests, conversion funnel instrumentation — measure which monetization model converts without degrading quality metrics description: Pricing tests, conversion funnel instrumentation — measure which monetization model converts without degrading quality metrics
@ -72,4 +71,4 @@ phase_history:
exited: null exited: null
dependencies: [] dependencies: []
archived: false archived: false
schema_version: 3 schema_version: 4

View File

@ -1,4 +1,3 @@
id: p4-quality-safe-growth
slug: p4-quality-safe-growth slug: p4-quality-safe-growth
title: Quality-Safe Growth title: Quality-Safe Growth
description: Guardrails that prevent revenue-over-quality regressions as user volume scales — D7 retention and useful-item rate monitored against growth rate description: Guardrails that prevent revenue-over-quality regressions as user volume scales — D7 retention and useful-item rate monitored against growth rate
@ -72,4 +71,4 @@ phase_history:
exited: null exited: null
dependencies: [] dependencies: []
archived: false archived: false
schema_version: 3 schema_version: 4

View File

@ -1,4 +1,3 @@
id: p4-segment-expansion-plan
slug: p4-segment-expansion-plan slug: p4-segment-expansion-plan
title: Segment Expansion Plan title: Segment Expansion Plan
description: Data-backed expansion strategy and milestone proposal for next target segment or market description: Data-backed expansion strategy and milestone proposal for next target segment or market
@ -72,4 +71,4 @@ phase_history:
exited: null exited: null
dependencies: [] dependencies: []
archived: false archived: false
schema_version: 3 schema_version: 4

View File

@ -1,4 +1,3 @@
id: pg1-baseline-comparison
slug: pg1-baseline-comparison slug: pg1-baseline-comparison
title: Baseline Comparison Study title: Baseline Comparison Study
description: A/B comparison against a non-personalized baseline feed — measure click-through, completion, and return rate lift description: A/B comparison against a non-personalized baseline feed — measure click-through, completion, and return rate lift
@ -153,4 +152,4 @@ phase_history:
exited: null exited: null
dependencies: [] dependencies: []
archived: false archived: false
schema_version: 3 schema_version: 4

View File

@ -1,4 +1,3 @@
id: pg1-instrumented-metrics
slug: pg1-instrumented-metrics slug: pg1-instrumented-metrics
title: Instrumented Metrics Pipeline title: Instrumented Metrics Pipeline
description: Signal write rates, ranking latency p50/p99, personalization staleness, and feedback-loop latency all observable in production description: Signal write rates, ranking latency p50/p99, personalization staleness, and feedback-loop latency all observable in production
@ -162,4 +161,4 @@ phase_history:
exited: null exited: null
dependencies: [] dependencies: []
archived: false archived: false
schema_version: 3 schema_version: 4

View File

@ -1,4 +1,3 @@
id: pg1-personalization-correctness
slug: pg1-personalization-correctness slug: pg1-personalization-correctness
title: Personalization Correctness Verification title: Personalization Correctness Verification
description: Verify the personalization loop (signal write → decay → ranking) is mathematically correct and updates within 100ms of signal write description: Verify the personalization loop (signal write → decay → ranking) is mathematically correct and updates within 100ms of signal write
@ -144,4 +143,4 @@ phase_history:
exited: null exited: null
dependencies: [] dependencies: []
archived: false archived: false
schema_version: 3 schema_version: 4