Skip to content

finalaudit: record the #579 release and the 0177 production-migration blocker - #582

Merged
NewWorldVenture merged 1 commit into
mainfrom
claude/youthful-turing-ppwrkl
Sep 27, 2026
Merged

NewWorldVenture merged 1 commit into
mainfrom
claude/youthful-turing-ppwrkl

Conversation

@NewWorldVenture

Copy link
Copy Markdown
Owner

This PR changes only finalaudit.md. It adds a release record for #579:

  • Final audit C1-K: member-write boundaries (0344–0380), trust fail-safes, merged with main #579 merged to main as 671c5f6a. It merged only after every check passed on its head, ebb95528, including the migration replay with all boundary probes and the full E2E suite.
  • www.bubaly.com/api/build-info serves 671c5f6a as of 2026-09-27T00:04:54Z, so the application code is in production.
  • The database changes are not in production. The "Supabase production migrations" workflow failed on this push the same way it did on 533554be and 7e54596d. It stops at 0177_remove_synthetic_auth_users.sql with a statement timeout (SQLSTATE 57014), so none of the later migrations (0178–0380) are applied. This is the historical F-001 / F5 operator-owned blocker. No agent applied or retried anything against production.

🤖 Generated with Claude Code

https://claude.ai/code/session_01KRUgA6hD6QgzmtpSP6TUmP


Generated by Claude Code

…p at 0177

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KRUgA6hD6QgzmtpSP6TUmP
@vercel

vercel Bot commented Sep 27, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated
bubaly Ignored Ignored Sep 27, 2026 12:05am UTC

Request Review

@NewWorldVenture
NewWorldVenture marked this pull request as ready for review September 27, 2026 00:21
@NewWorldVenture
NewWorldVenture merged commit 6ff770d into main Sep 27, 2026
7 checks passed
NewWorldVenture pushed a commit that referenced this pull request Sep 27, 2026
Brings in PR #579 (34 migrations renumbered into 0344–0380) and #582's
release note. Five files conflicted; each resolution keeps both sides'
intent and both sides' tests:

- lib/guardian/twilio.ts: main's xml() escapes text and attribute values
  alike (a superset of this branch's escapeXmlText/escapeXmlAttr), so every
  builder uses it; this branch's twimlDial rationale and its
  findOwnedNumberSid/releaseNumber additions stay.
- lib/contact-center/phone.ts: both functions. normalizeFallbackPhone is the
  write-side rule (E.164, country code required, letters refused);
  toCallableE164 is main's read-side normalizer for rows written before it,
  and its header now says how the two relate.
- app/(app)/dashboard/contact-center/actions.ts: the save goes through
  normalizeFallbackPhone and refuses with actions.enterTheFallbackNumberIn,
  which this branch's test asserts by sentence; main's account of why is
  folded into the comment. main's actions.forwardingNumberNotCallable stays
  in the seven catalogues, unused.
- lib/services/approvals/index.ts: main's re-read-and-retry on a lost write
  race (attempt < VOTE_RETRIES) around this branch's changed/changedByMe
  audit note.
- tests/migration-version-safety.test.ts: main's paragraph on 0344–0380,
  then this branch's seven paragraphs for 0381–0387; the pin is 0388.

Two files main alone changed had to move for this branch's tests:

- app/api/contact-center/voice/route.ts: a stored fallback that reads as a
  number is normalized and dialled (main). One that does not is no longer
  treated as "no number": it goes into the <Dial> escaped, as this branch's
  test asserts, and the message-taking verbs follow it, so the caller is
  still asked for a message when that Dial fails. 0384 clears such rows.
- tests/a-child-cannot-lift-the-publish-lock-or-link-a-document-they-cannot-
  read.test.ts: its reading of social_has_permission learns the deny-list
  arm 0348 introduced (p_permission <> 'manage_access'); without it the
  admin role fell out of the matrix and the test reported the database
  refusing a parent the live probe shows it admits. No assertion changed.

finalaudit.md is the union of both sides plus #582's release section; the
index is regenerated (FIXED 98 · OPEN 11, unchanged) and the two clauses of
main's forwarding-number row that the merged code made untrue now describe
what the code does. Verified on a private database: 398 migrations applied,
0 failed; 115 probes pass twice; the version audit's next number is 0388.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KP9rt5rVQ9jDMpZp2xBy3K
NewWorldVenture pushed a commit that referenced this pull request Sep 27, 2026
…in production

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KP9rt5rVQ9jDMpZp2xBy3K
NewWorldVenture pushed a commit that referenced this pull request Sep 27, 2026
main brought PR #579 (C1-K: thirty-four member-write boundary migrations
at 0344–0380, their probes, trust fail-safes) and #582 (a finalaudit
note). Thirty-six files conflicted; finalaudit.md and the seven
catalogues auto-merged (index regenerated: 124 rows, FIXED 96 · OPEN 13,
prose tally agreeing; catalogues valid at 13,956 keys each).

Resolutions. For 34 of the 36 conflicted files this branch's side is
byte-identical to the side close-out-556 (f55f3591) resolved against the
same main content from the same base (7e54596), so its resolutions are
taken verbatim; the classes are recorded in d41ac300's message (both
sides' discarded-write bindings, wroteNoRows checks joining main's role
gates and family filters, .then().catch() rejection handlers carrying
main's log markers, toCallableE164, the shared xml() escaper, the wallet
routes' error bindings). Two were merged by hand:
- components/modules/behavior-module.tsx: main's delete handler (family
  filter, `data`/`!data?.length`, `canRemove`, which main's
  a-child-cannot-erase-their-behavior-log pins) with this branch's
  confirmed save (`data: saved` + wroteNoRows) and its manager-only Log
  control; the comment no longer cites a migration this branch dropped.
- tests/migration-version-safety.test.ts: main's paragraphs, then this
  branch's ten, pinned at 0419.

Migrations renumbered a fifth time (main's 0344–0380 collided with the
0361–0370 the author assigned in C1-S9-89) to the slots f55f3591 had
already replayed and probed against this tree:
  0361→0406 social tokens service-role only
  0362→0407 no TRUNCATE for the public roles
  0363→0408 household secrets are not child-readable
  0364→0409 marketplace parties are not editable
  0365→0410 a review belongs to whoever wrote it
  0366→0411 deleting a review is rewriting it
  0367→0414 a health record is written by a parent
  0368→0415 a paperwork stamp does not rewrite its siblings
  0369→0416 a private journal is private
  0370→0418 a public bucket serves what you put in it
0412, 0413 and 0417 stay empty: they are f55f3591's copies of the three
migrations the author dropped in C1-S9-89 (social restriction, location
trail, record-about-you; confirmed by content against c8b5c56's
0324/0325/0329), and the drop stands. The ten files take f55f3591's
content, which differs from the author's only by number citations except
0416, whose SELECT rule takes main's 0364 owner-or-manager form (a
sibling never reads another member's entry; a parent reads only one its
owner marked not private) because main's private-journal-check.sql pins
it; recorded in the header, finalaudit C1-S8-07 and
PENDING_PROD_MIGRATIONS.

Every reference rewritten: the nine probes (eight now byte-identical to
f55f3591's; health-record keeps the author's comment on the logged_by
control), sensitive-role-boundary-check (the author's own a349bd6
reconciliation of the token controls, kept, citing 0406), PENDING_PROD
rows and the 0406 header's history, finalaudit B1 / C1-S8-07 / C1-S9-89
and every backticked or path-style filename, lib/database.types.ts and
paperwork/actions.ts (0327→0415), health-visits and immunizations
(0326→0414), insurance-module (0328→0416), care-module (cites C1-S8-09
rather than the dropped 0329), and the tests that read the migrations by
name (social-tokens, household-binder, public-bucket, paperwork-stamp,
manager-gated-table).

Tests adapted (from d41ac300, assertion strength kept): a-dialled-number
reads main's shared xml(); a-forwarding-number's fake answers .select()
with the affected rows; a-voice-log-failure pins the same best-effort
properties against lib/voice/history; a-fire-and-forget's ai-settings
anchor moves to main's log wording; a-client-write-reads-what-it-changed
accepts a file whose only confirmed writes are spelt with the bare
`data` (its C1-S9-81 closet paragraph from 0cf0eb2 kept).

Verified together with the merge of dcc0b42 (#581) that follows; the
numbers are on that commit.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KP9rt5rVQ9jDMpZp2xBy3K
NewWorldVenture pushed a commit that referenced this pull request Sep 27, 2026
main's #579 (0344–0380: the C1-K member-write boundaries and trust fail-safes)
and #582 (the release note) on top of the PR author's own merge of 7e54596.
Twenty-one files conflicted, all on subjects the two lines of work had each
fixed; every one is resolved to keep both sides' intent and both sides' tests,
reusing the resolutions proven on the close-out-548 reference branch:

- finalaudit.md: UNION — main's FIXED + PASS rows for AUTHZ-002/003/005 carry
  this branch's evidence; both sides' status paragraphs stand; the Pass G rows'
  last cells open with the status their section carries so the index reads
  them; index regenerated (147 rows, 140 ids), prose tally updated to it.
- tests/migration-version-safety: main's 0344–0380 paragraphs, then this
  branch's block paragraph (rewritten and re-pinned by the renumber that
  follows — the two sides' 0361–0380 collide on this commit, by design).
- described errors and reasons: the AI quota routes read the meter's error at
  the family's midnight; the dispute action refuses with a sentence (two new
  catalogue keys, seven locales) rather than a bare `return;`.
- Guardian: main's service-role acknowledge write and error-checked learning
  reads, typed through lib/database.types.ts rather than a cast helper.
- the modules main's manager-gated-writes ratchet pins (family, settings,
  notifications, behavior, driving) take main's readback shape with this
  branch's `family_id` scope and reasoning.
- public/sw.js answers /_next/image from the network and never stores it, the
  shape main's a-private-image-does-not-outlive-logout pins.
- docs/audit/member-scope-crossing-check.sql keeps this branch's per-command
  policy names as the attribution pin, which already covers 0377's.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KP9rt5rVQ9jDMpZp2xBy3K
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.

2 participants