DUNIN7 · LOOMWORKS · RECORD
record.dunin7.com
Status Current
Path phases/phase-57-marketing-engagement-creation/loomworks-phase-57-cr-amendment-scoping-note-v0_1.md

Loomworks Phase 57 CR amendment scoping note

Version. 0.1 Date. 2026-05-12 Status. Active scoping for the Phase 57 CR amendment. Drafted by Claude.ai. Operator: Marvin Percival. Phase 57 build paused at Step 2 entry per phase-57-halt-surface-2026-05-12-v0_1.md; amendment-scope absorbs the OL signin email gate fix and unblocks Step 2. Phase. 57 — Marketing Engagement Creation (amendment cycle 1). CR target. CR-2026-090 v0.2 (phase-57-cr-marketing-engagement-creation-v0_2.md), superseding v0.1. Companion documents.


What this amendment settles, in one paragraph

Phase 57 Step 2 (live usage event) cannot succeed against the v0.1 CR because the Operator Layer signin form's client-side empty-email guard at IdentifierStep.tsx:31 contradicts the engine's WebAuthn discoverable-credential identity contract and contradicts the standing DUNIN7 principle that email must not be used for identity. The amendment adds one new Sub-arc (Sub-arc 4: OL surface alignment) and one new build step (Step 2a) that removes the empty-email guard, omits the email field from the /auth/login/begin POST body when empty, and updates the field's surface text to indicate optionality. One vitest pins the corrected behavior. The fix is scoped strictly to the signin entry point CC's diagnostic identified — sign-up form, account-recovery surfaces, and other OL identity-adjacent surfaces are deliberately out of amendment scope and queue as a Phase 58+ candidate (OL surface-vs-contract audit). One of Phase 57's two reserved buffer slots is consumed; the other remains. Phase 57's product and methodology deliverables (marketing engagement live, real-Operator transcript, observation capture) are preserved unchanged. Engine substrate is correct and untouched. Methodology candidates A + B from the halt-surface carry forward to v0.21 consolidation and v0.42 manifest absorption.


How we got here — trajectory worth preserving

This is the second build-mode firing of the substrate-friction-discipline-pattern (manifest v0.39 §2), and the first such firing since Phase 49 (Step 4 → phase-49-step-4-amendment-scoping-v0_1.md → CR v0.3 → Step 4b — the canonical instance). The trajectory is worth preserving in full for v0.42 manifest absorption and for the eventual v0.21 methodology consolidation.

Position 1 — Phase 57 scoping v0.1 → v0.2 → CR-2026-090 v0_1. Phase 57 anticipated zero OL substrate changes. The CR explicitly named this at §16 test count predictions (OL vitest: 149 unchanged) and §6 (What Phase 57 does NOT deliver). Step 0 (V1–V8) verified engine-side substrate exhaustively; OL-side substrate was not Step 0's aperture because the scoping note did not anticipate OL substrate work.

Position 2 — Step 2 entry, pre-halt. Local stack readiness friction surfaced (CORS preflight 405 on OL :3001 → engine :8000). Resolved with LOOMWORKS_ENV=development added to local .env. CR §12 gate 5 (live OL stack ready) appeared met. Step 2 ready to begin. Note recorded in the halt-surface: gate 5 was met at the infrastructure layer but had not been validated at the architectural layer; the architectural validation happened only when the Operator looked at the signin surface and named the standing principle.

Position 3 — halt-surface diagnostic. Three findings against the live engine + OL source on the phase-57-marketing-engagement-creation branch:

The principle is correctly embodied in the engine; the contradiction is at the OL client-side gate only. The fix is one-line in scope.

Position 4 (this amendment). Narrow OL surface alignment scoped strictly to the signin form entry point. Sub-arc 4 added; one new build step (Step 2a) inserted before the paused Step 2 (renamed Step 2b for clarity). One vitest. Surface text updated. Engine untouched. Audit of sibling OL identity-adjacent surfaces (sign-up, claim, account recovery) queues as a Phase 58+ candidate rather than expanding amendment scope.

The four positions are preserved. Position 1 (no OL changes anticipated) is not erased by Position 4 (one OL change required). Position 1 was correct given the information accessible to Phase 57 scoping at the time; Position 4 corrects with the principle now named and the contradiction identified.


Scope confirmation — per halt-surface §5 settled list

The halt-surface §5 names five items as settled. The amendment scoping note does not re-litigate; it inherits and proceeds.

  1. Engine substrate is correct; no engine change required. Inherited. Engine repo on phase-57-marketing-engagement-creation branch at a00f4a3 stays unchanged through the amendment.
  2. The fix is small. Inherited. One client-side gate removed; POST body adjustment; surface text update.
  3. Phase 57's scope shifts from "zero OL substrate changes" to "one OL substrate change." Inherited. This amendment selects Sub-arc 4 framing (see P57-A6 below).
  4. Phase 57's product + methodology deliverables are preserved. Inherited. Marketing engagement live, real-Operator transcript, observation capture all carry through unchanged. Only the path to Step 2 changes; Step 2's content does not.
  5. The standing principle is filed for v0.21 consolidation — naming in what-dunin7-is-building is downstream, not Phase 57 scope. Inherited. This amendment does not draft methodology consolidation. The principle is named in the halt-surface §3 for the first-time-in-a-Loomworks-document record; the canonical naming happens at v0.21.

Open construction decisions — settled

The halt-surface §5 names ten open items. Each gets a P57-Ax decision code (A = Amendment) and a construction-level settlement.

P57-A1 — Exact fix shape

Settled. Remove the empty-email guard entirely; omit the email field from the /auth/login/begin POST body when empty; update the field's label / placeholder / helper text to indicate the field is optional. The email field stays present (it narrows allowCredentials per halt-surface Finding 1 when supplied as a passkey hint), but the form proceeds without it.

Rejected alternative. Keep the field as required-looking with a separate "use passkey only" affordance plus helper text. Rejected because it treats the discoverable-credential path as exotic-and-needing-explanation when the engine treats it as the normal path. A separate affordance also adds UI surface that the amendment does not need; surface-text optionality indication does the same work with less code.

Construction shape.

P57-A2 — OL test surface

Settled. One new vitest, exercising the discoverable-credential path: empty email → form does not show emailEmptyError → POST body to /auth/login/begin omits the email field → mock returns a WebAuthn challenge → form transitions to passkey step.

Rejected alternatives. Zero (relies on existing 149 + live exercise; regression-prone for a one-line client-side gate); two (with-email + without-email; the with-email path is already covered by existing tests, so a second test inflates the surface without adding coverage).

Test placement. Existing vitest convention in the OL repo's test surface — likely under tests/components/signin/ or analogous (CR-amendment-drafting verifies the exact path against current branch state and Phase 48/56 precedents). The test file name follows the existing convention.

P57-A3 — OL-side audit scope

Settled. Narrow audit limited to the signin form only. The amendment does not extend to sign-up, claim-flow, account-recovery, or other identity-adjacent surfaces.

Rejected alternative. Broader OL-side audit of every form that touches email or identity. Rejected because:

Queued direction added. OL surface-vs-contract audit — a Phase 58+ candidate phase. Reads every OL surface that touches identity, contact, or any other engine-side data contract; verifies each surface against the engine contract; corrects any drift surfaced. The Phase 57 halt-surface methodology candidates A (engine-correct-surface-drifted) and B (standing-principle-not-named-in-source-of-truth-documents-allows-contradicting-surface-to-ship) feed the eventual phase's scoping. Filed for inclusion in loomworks-queued-directions-and-deferred-work-v0_12.md (next bump from v0.11) at Phase 57 close.

P57-A4 — Public marketing form

Settled. Out of scope of this amendment. The Phase 51 public form takes email + jurisdiction as contact metadata for grant-request intake; the grant flows through Companion-as-Authority approval (Phase 50), not through email-keyed authentication. The principle (email-not-identity) distinguishes identity from contact; the marketing form correctly handles email as contact.

CR-amendment-drafting verification. The CR amendment drafter confirms by reading the Phase 51 marketing form's submission handler (engine side) — verifies that no auth surface keys off the submitted email. Expected verdict: HOLDS. If the verdict were CONTRADICTED, amendment scope re-opens; not anticipated.

P57-A5 — CR version

Settled. CR amendment lands at phase-57-cr-marketing-engagement-creation-v0_2.md. v0.1 is preserved alongside as superseded. Both are archived at engine repo docs/phase-crs/.

P57-A6 — Sub-arc placement

Settled. New Sub-arc 4 — OL surface alignment with engine identity contract. The work is OL-side substrate; Sub-arcs 1, 2, and 3 are engine-side or live-usage-event scoped. A new sub-arc keeps the engine / OL boundary visible in the CR's structure and makes the amendment legible as a distinct piece of work.

Rejected alternative. Sub-arc 1e (extension of Field 6 prompt authoring). Rejected because the Field 6 work is engine-side prompt content; the signin fix is OL-side React substrate. Forcing them under the same sub-arc muddies the boundary the CR was deliberate about.

P57-A7 — Test count update

Settled. OL vitest count: 149 → 150. Engine test counts unchanged (2,280 always-run + 32 skipped — the Step 1 substrate that already landed on the branch). Alembic head: 0064 unchanged.

The CR §16 test count predictions update to reflect the new OL vitest count.

P57-A8 — Acceptance gate update

Settled. Two gate-level updates to CR §12:

Total gate count: 17 → 18.

P57-A9 — Carry-forward

Settled. Both halt-surface methodology candidates carry forward unchanged.

Plus one amendment-time observation added (new):

P57-A10 — Reserved-slot consumption

Settled. One of Phase 57's two reserved buffer slots is consumed by Sub-arc 4 work. Phase 57 at amendment close will have:

Methodology observation. Eight consecutive phases of zero reserved-slot consumption (Phases 50 / 51 / 52 / 53 / 54 / 55 / 56 / planned Phase 57 going in) ended at Phase 57's amendment. The reserved-slot-as-halt-condition-pre-commitment reformulation (manifest v0.39 §2) fires as designed — the slot's availability is what enables a halt-without-derailment; the slot's consumption is the use-the-budget signal. Pattern is sound.


Revised build sequencing

Phase 57 v0.1 CR §10 ordering plus the inserted Step 2a. The original Step 2 is renamed Step 2b for clarity; subsequent step numbers are unchanged. Reserved slot accounting adjusts.

Eight consecutive zero-consumption phases ended at this amendment; one slot consumed; one remains.


Revised acceptance gates

The CR v0.1 had 17 gates per scoping v0.2's Acceptance gates §. The amendment changes Gate 5 and adds Gate 5b. Other gates are unchanged.

The amended CR §12 acceptance gates list at v0.2:

  1. Step 0 findings absorbed; v0.2 produced; CR drafting handoff filed. (Unchanged.)
  2. Field 6 per-field elicitation prompt component landed at prompts/intent_instructions/create_engagement/additional_assertions.md; +1 test green. (Unchanged; satisfied pre-halt.)
  3. field_coverage map extended to include the Field 6 entry; dispatcher splice route exercised. (Unchanged; satisfied pre-halt.)
  4. Active-template scaffolding at prompts/create_engagement_active.md updated for Field 6 elicitation; existing tests still green. (Unchanged; satisfied pre-halt.)
  5. Amended. Live OL stack ready at Step 2 entry: /operator/create-engagement accessible; banner revision present; Sub-arc 4 fix landed (see Gate 5b); lint/tsc/build/test clean on OL including the new sign-in vitest at OL count 150.
  6. New. OL signin surface accepts empty email and proceeds to the WebAuthn discoverable-credential path. IdentifierStep.tsx empty-email guard removed; signin-flow.ts POST body omits the email field when empty; field label / placeholder / helper text indicate optionality; SIGNIN.emailEmptyError constant deleted or orphaned-but-harmless; new vitest pins the corrected behavior at the OL count-150 boundary.
  7. Marketing engagement created live in the local engine database via /operator/create-engagement. (Was gate 6 in v0.1; renumbered.)
  8. Discovery record produced and uploaded via Phase 16 pipeline; visible in Memory. (Was 7.)
  9. Phase 53 extract_discovery_to_seed_skill produced a candidate seed against the Discovery record. (Was 8.)
  10. induct_seed produced an induction-pass-clean Status on the marketing engagement. (Was 9.)
  11. Marketing v0.3 content (Fields 1–6 with eight Field-6 entries) fully reflected in the inducted seed. (Was 10.)
  12. (through 18) — remaining gates per v0.1's full list, each renumbered with the +1 offset from Gate 6 onwards. CR-amendment-drafting reproduces the full list at v0.2.

Total gate count: 17 → 18.


Carry-forward inventory

To Phase 57's existing carry-forward list (no change). Per v0.1 §14 and scoping v0.2 §Carry-forward inventory: Phase 31 voice residue; §1.3 refactor candidates; Phase 56 explain-affordance investigation; etc. All carry unchanged.

New to the amendment (per §P57-A9):

New queued direction (per §P57-A3):


Standing build-protocol inheritance

Carries unchanged from Phase 57 v0.1 / scoping v0.2 / manifest v0.41 §2:


Discovery-trajectory observations preserved

Positions 1 through 4 are preserved above in How we got here. The Discovery-record posture: prior positions named alongside corrections, never silently rewritten.

Open at v0.42 manifest absorption time:


What this amendment scoping note does NOT do


DUNIN7 — Done In Seven LLC — Miami, Florida Loomworks Phase 57 CR amendment scoping note — v0.1 — 2026-05-12