Skip to content

feat: add LP6 backup, restore, retention, and DR proof - #11

Merged
Sythos merged 3 commits into
mainfrom
milestone/lp6
Aug 26, 2026
Merged

feat: add LP6 backup, restore, retention, and DR proof#11
Sythos merged 3 commits into
mainfrom
milestone/lp6

Conversation

@Sythos

@Sythos Sythos commented Aug 26, 2026

Copy link
Copy Markdown
Owner

Summary

  • add typed backup and retention contracts with compatibility bridges
  • add an offline, synthetic dual-stack Compose backup/restore/DR rehearsal with persistent volumes
  • wire LP6 static, typed, AMD64-first, and final ARM64 gates
  • document the local-only boundary and keep the repository layout current

Validation

  • npm run test:lp6
  • npm test
  • Docker Compose proof runs in GitHub Actions; Docker is not installed locally

LP6 remains bounded local synthetic evidence, not a production RPO/RTO claim.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a9c9f77fe3

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +47 to +50
const existing = JSON.parse(await readFile(manifestPath, 'utf8'));
const verification = verifyArchiveManifest(existing, source.entries);
if (!verification.complete) throw new Error('existing LP6 archive is incomplete');
console.log(JSON.stringify({ milestone: 'LP6', archiveId: existing.archiveId, idempotent: true, status: 'verified' }, null, 2));

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Validate the envelope before taking the idempotent path

If the initial worker invocation writes archive-manifest.json but terminates before metadata-envelope.json is written—such as from a full volume or process interruption—the next invocation validates only the manifest and exits successfully with status: 'verified'. The restore worker then necessarily fails when reading the missing envelope, so a reported successful backup can remain unusable; validate/decrypt both persisted files or publish them atomically before treating the backup as complete.

Useful? React with 👍 / 👎.

Comment on lines +32 to +36
const sourceEntries = Object.freeze({
'mail/INBOX/0001.eml': 'From: alice@example.test\nSubject: LP6 synthetic backup\n\nSynthetic only.\n',
'calendar/home.ics': 'BEGIN:VCALENDAR\nVERSION:2.0\nEND:VCALENDAR\n',
'contacts/alice.vcf': 'BEGIN:VCARD\nVERSION:4.0\nFN:Alice\nEND:VCARD\n',
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Verify restored content from the backup volume

In the inspected LP6 Compose flow, the backup worker persists only a manifest and metadata envelope, while the restore worker supplies archive member bodies from these literals compiled into its image. Consequently, the checksum and restore validation passes even when no backed-up payload exists on lp6-backup-data, and the generated evidence still reports isolatedRestore and checksumsVerified; read actual archived members from the read-only backup volume, or do not report this as a restore proof.

Useful? React with 👍 / 👎.

@Sythos
Sythos merged commit d2bcfc2 into main Aug 26, 2026
3 checks passed
@Sythos
Sythos deleted the milestone/lp6 branch August 26, 2026 09:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant