Build out MS19 (7 phases); extend MS18; finding-doc convention#67
Conversation
Corrected homepage lastmod (2026-03-18 → 2026-04-12) and BTCPay alternatives lastmod (2026-04-18 → 2026-04-21) to match git history. All five SEO verification checks pass — URLs, lastmod, canonical/OG, staging noindex, and robots.txt. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…r restructure Scanned all 6 published pages for promises — added 13 new entries (homepage, BTCPay alternatives, What Is a Bitcoin Invoice). Verified every open entry against the codebase. Restructured catalog into major (9 entries needing individual MS19 reconciliation) and minor (18 entries for bulk verification). Fixed stale staging source paths. Scoped the 0% fee claim to beta only: table now reads "0% (beta)", CZ description adds "No fees during beta. Long-term pricing hasn't been decided; free is still on the table, and if not, the intent is to keep it very low." Staging copy synced. Added MS19 objective to sweep "pre-release"/"Release Candidate" copy to "open beta" across all published pages. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Moved low-concern entries (custodial, open-source, self-host, hosted onboarding, "Full" invoicing) from Major to Minor. Deleted entries for promises CZ would only violate through deliberate architectural redesign (custodial framing, noncustodial listing, self-custody ethos). Added DELETED_PROMISES.md so future scans skip already-triaged items. Added curation note to catalog preamble. Added Resolved section for the fee omission entry. Merged duplicate unique-address entries. Major is now 3 entries (fee hypocrisy, 0% beta, stated limitations). Minor is 17. Resolved is 1. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Phase 2 was left in Active status with 11 unchecked articles and an untouched video section while Phase 3 was started. Fixed: articles 5-15 annotated as queued in CONTENT_PLAN.md (not Phase 2 deliverables), video deferred to Phase 3 with cross-reference, all exit criteria checked and documented, status set to Complete. Also updated CONTENT_PLAN.md video section to point to 18.3. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Shooting script for first YouTube video. Rachel teaches Nate how to invoice someone in Bitcoin using CryptoZing as the concrete example. Educational, not an ad. 14-minute target with talking head + narrated screen recordings. Banter beats brainstormed throughout. Decisions captured: topic, format, cast (Rachel + Nate), target length, YouTube hosting, optional real-client shoot with Leo/ANC. Strategy doc items 1 and 3 checked off, item 2 (full script) outlined and partially fleshed out — needs final pass before recording. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Extra week gives the video production breathing room. Script moved out of the public repo into gitignored .cybercreek/video/. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Check off the script-writing task (full shooting script now lives at .cybercreek/video/how-to-invoice-bitcoin-script.md) and add a HyperFrames note on the edit-and-review step. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The "Videos for n8 to watch" list is a personal learning queue, not project documentation. Loaded into agent context on every UX-related task with no behavioral effect. Moved to .cybercreek/ux_learning.md (local-only); UX_GUARDRAILS.md now only contains the rules agents actually need to apply. Part of the context-efficiency audit at .cybercreek/agent_context_audit_2026-04-25.md. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Cut four sections that duplicated Claude Code's built-in system prompt
or described auto-loaded systems without changing behavior:
- Tool Preferences: Claude already prefers Read/Edit/Write/Glob/Grep
over shell equivalents — no project override here, just a restatement
of defaults.
- Subagents descriptive bullets: Agent/Explore/Plan are documented in
Claude's system prompt. The project-specific coordination pointer
("follow AGENTS.md multi-agent rules") is preserved.
- Persistent Memory: the memory index is auto-loaded by the harness;
describing it here changed nothing.
- Confirmation Defaults: meta-commentary that pointed back at the
AGENTS.md rules as already-aligned. Tautological.
Down from 33 lines to 15. All cut content logged in
.cybercreek/agent_context_cuts_log.md with reasoning.
Part of the context-efficiency audit at
.cybercreek/agent_context_audit_2026-04-25.md.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Removed the line under "Environment Notes" that restated the rule already in "Working Style": Whenever docs/** changes, commit/push those updates right away. Exception: single-item checklist checkoffs in the same active workstream do not need to be pushed right away and may be committed together later. The earlier instance (under Working Style) is broader — it covers AGENTS.md changes too — so it supersedes this duplicate. Part of the context-efficiency audit at .cybercreek/agent_context_audit_2026-04-25.md. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Harvey (Devil's Advocate Progress Reporter) is invoked on demand by the user, not on every task. Moving the description out of always- loaded AGENTS.md and into AgentRoles/HARVEY.md keeps it accessible when needed without paying the context cost on every session. A one-line pointer remains under "## Roles" in AGENTS.md so the agent knows where to look when Harvey is invoked. The relocated file also expands the guidance — when to invoke, what NOT to do, output format — which would have been too verbose for an always-loaded doc. Logged in .cybercreek/agent_context_cuts_log.md. Part of the context-efficiency audit at .cybercreek/agent_context_audit_2026-04-25.md. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
CLAUDE.md previously said "All rules in AGENTS.md apply" but Claude Code does not auto-load AGENTS.md — only CLAUDE.md and CLAUDE.local.md load on session start. The cross-reference was a pointer, not a load, so AGENTS.md rules only stuck when Claude actively read the file. Adding the `@AGENTS.md` import to CLAUDE.md makes Claude Code resolve and inline AGENTS.md contents at session start, alongside CLAUDE.md. This gets us reliable AGENTS.md loading without duplicating its contents into CLAUDE.md. Verified via claude-code-guide subagent: @import is the documented, supported pattern. Hooks would also work but add overhead and maintenance cost; @import is the canonical approach. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Pulled ~21 lines of doc taxonomy out of always-loaded AGENTS.md and into a new docs/DOC_ROLES.md, leaving a one-line pointer behind. Content moved: - Canonical doc list (PLAN, PRODUCT_SPEC, BACKLOG, UX_GUARDRAILS) - Doc-tree role taxonomy (milestones/, specs/, strategies/, ops/, qa/) - Strategy doc rules: authority, subagent-aware authoring, owner labels (User vs Guided User), lifecycle - Checklist-depth separation between PLAN, milestones, strategies - "Numbered tasks done in order" rule - CHANGELOG.log conventions (chronological, append-only) The relocated content is also more scannable than the original intermixed prose — strategy doc rules and checklist depth now sit together under their own headings instead of being scattered through "Working Style." Doc-roles are navigational, not behavior-shaping on most tasks. Late- load is acceptable because relevance is bounded to doc-shaping decisions. AGENTS.md down from 80 to 60 lines. Logged in .cybercreek/agent_context_cuts_log.md. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Created four small directory-level instruction files that load on demand when Claude operates in those subtrees: - tests/CLAUDE.md — Sail-prefixed test invocation, pointer to TESTING_STANDARDS.md, fixture watch-only reminder - node_scripts/CLAUDE.md — derive-address.cjs invocation contract, watch-only constraint on extending the helper - database/migrations/CLAUDE.md — spec-first rule, test requirement, no private keys in seeders/migrations - site/CLAUDE.md — GitHub Pages placeholder is NOT the Laravel app; staging-before-published authoring order Also moved the node helper architecture note (AGENTS.md line 67) into node_scripts/CLAUDE.md since its relevance is bounded to wallet- derivation code. The watch-only invariant itself stays at root because it applies repo-wide. Deliberately NOT creating app/Mail/CLAUDE.md or app/Services/CLAUDE.md: their rules apply to adjacent code (anything sending mail, any caller of HdWallet) so late-loading would miss reasoning that doesn't touch those directories. Those rules stay in AGENTS.md. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Rachel's video-shoot availability pushes the schedule out a week. New targets: MS18 2026-05-16, MS19 2026-06-11, MS20 2026-06-23, MS21 2026-07-05. Updated PLAN.md table, milestones.ics spans, and the stale narrative MS21 date in the Published Release Target block.
Eleventy was templating site/CLAUDE.md into public/CLAUDE/index.html and would have published it to GitHub Pages on the next merge to main. Add a .eleventyignore covering CLAUDE.md and AGENTS.md at any depth so agent context never leaks into the public site.
Current MS21 target (2026-07-05) sits at the front edge of "mid-2026," leaving no room for further slips. Late 2026 gives realistic cushion without overshooting the 2027 public release commitment in the same paragraph. Nobody complains about an early arrival.
Rachel's nursing program starts 2026-06-01 and removes her availability for the foreseeable timeline. The video either records by 2026-05-31 or is dropped from MS18 scope rather than slipping the milestone. Also brings stale Phase 2 / Phase 3 status indicators current: Phase 2 strategy is complete, Phase 3 is in progress (SEO verification and content promises catalog review done; video and close-out remain).
…ng 2) The label implied invoice rate behavior changed when the button only refreshes the issuer's form-input snapshot at creation/edit time. Every viewed invoice already shows current rate; the button was a form helper, not a behavior toggle. Renamed in create and edit views, JS reset paths, and helper-text references. Full rationale in docs/qa/Finding2.md.
Move ToS/Privacy Policy drafting, disclaimer copy, monetization-neutral copy review, and UI placement entirely into MS19. MS20 returns to pure mainnet cutover preparation. The previous arrangement put legal text drafting in MS20 with UI implementation "deferred" to MS19, creating a cross-milestone dependency where MS19 needed artifacts produced in MS20. The original MS20 stub (6e338e0) recorded the split as intentional, but the corresponding exit criterion ended up duplicated in both milestones rather than removed from MS20. This consolidates the entire legal layer under MS19 where it sits alongside related pre-cutover work (auth hardening, content promises reconciliation, contributor docs). Updates: MS19 doc (objectives, new Decisions Recorded section, Phase 3 expanded, exit criteria), MS20 doc (legal scope trimmed from objectives/decisions/phases/exit criteria), PLAN.md row descriptions, milestones.ics descriptions.
…nding2 Finding docs under docs/qa/Finding*.md gain a "Date fixed:" line near the top once resolved, with a brief reference to the milestone/PR/commit that landed the fix. Findings without that line are treated as still open. Convention recorded in docs/DOC_ROLES.md. Backfills: - Finding1 — fixed 2026-03-26 via MS14 (On-Chain Payment Attribution Hardening); date taken from the last MS14 work commit (Phase 5 follow-up fixes). - Finding2 — fixed 2026-05-08 in commit 33489f2.
MS19 milestone doc: drop stub note, replace flat phase list with a linked Current Focus block and a Phase Rollup section with checkboxes and one-line phase descriptions. Status flag updated to call out the skeleton state. Phase strategy docs (skeletons): each carries a "Decisions to confirm before flesh-out" section near the top with numbered questions and _Answer:_ slots for inline replies, then top-level numbered section headings (no detailed checklists yet) and an Exit Criteria placeholder. Decision counts: - 19.1 Notification Coverage Audit: 3 decisions - 19.2 Auth Hardening: 4 decisions - 19.3 Legal Layer: 6 decisions (largest — drafting source, disclaimer approach, pages location, monetization guide location, copy-review scope, "open beta" refactor placement) - 19.4 Content Promises Reconciliation: 2 decisions - 19.5 Contributor Docs: 2 decisions Flesh-out follows once the user answers in the skeleton files.
MS19 was incorrectly tagged "Not started — pending MS18 close-out" in the recent skeleton commit. Parallelism between MS18 and MS19 was explicitly approved on 2026-05-08 because MS18 is blocked end-to-end on Rachel's video deliverable; MS19 phases are independent of that work. This update restores MS19 to Active and lists both milestones under PLAN.md's Current section as parallel-active.
Parallelism between MS18 and MS19 is the natural dependency-respecting state, not a special exception requiring justification. The two milestones share no hard dependencies, so simultaneous progress is just efficient execution. Updates the language in PLAN.md and the MS19 milestone doc to reflect that.
19.1 (Notification Coverage Audit) goes from skeleton to fleshed-out strategy doc. The phase scope is leaner than the original skeleton implied: NOTIFICATIONS.md is substantively complete, with one specific self-flagged gap — the coverage matrix that MS17 was supposed to deliver but didn't. Fleshed-out plan focuses on populating that matrix using the column set the spec already specifies, reconciling drift with small in-place spec tweaks, and routing larger fixes either in-phase or to backlog per Decision 3. 19.2 (Auth Hardening) keeps its skeleton state, with the user's in-progress Decision 1 answer preserved. Decisions 2–4 are still blank; flesh-out waits for those.
…wers Phase 2 (Auth Hardening) goes from skeleton to fleshed-out strategy doc, narrowed to 419-redirect + session-expiry logout per the user's scope confirmation. Decisions captured: - 419 redirect target: investigation-then-decide via Section 1 survey. - Session expiry: keep Laravel default 120-minute rolling idle timeout. - Logout-on-expiry: inline expired-session message on the login page. - Scope: 2FA split out to a new Phase 6. Phase 6 (Two-Factor Authentication) added as a new skeleton with four decision points (TOTP cutoff trigger, recovery option, code TTL/lockout, recommendation surface). Email-based 2FA is the mandatory baseline; TOTP is opportunistic (only if Phase 6 begins with at least 5 working days remaining before MS19 close, with the cutoff confirmable). Phase 6 is positionally last in MS19 by design. Milestone doc updated: new objective bullet for 2FA, Phase 6 added to Current Focus and Phase Rollup, three new exit criteria covering email 2FA, recommendation surface, and TOTP-or-deferred. Phase 3 (Legal Layer) preserves the user's in-progress decision answers (four resolved, two pending — D1 BTCPay drafting source, D4 monetization-guide location). Doc remains skeleton; flesh-out waits.
Adds LLC formation as MS19 Phase 3 (single-member LLC in Arizona, EIN, business bank account, operating agreement) so the entity backing is in place before the legal layer (Phase 4) drafts ToS that depend on it for liability protection. Bumps existing Phases 3–6 forward by one: Phase 3 — LLC Formation (NEW) Phase 4 — Legal Layer (was Phase 3) Phase 5 — Content Promises Reconciliation (was Phase 4) Phase 6 — Contributor Docs Review (was Phase 5) Phase 7 — Two-Factor Authentication (was Phase 6, stays positionally last) Renumbering covered: strategy doc filenames (git mv), strategy doc titles, internal cross-references between strategy docs (19.2 → 19.7 link, 19.4 D6 references), milestone doc Current Focus links, Phase Rollup entries, Exit Criteria (LLC criteria added; Phase 6 → Phase 7 reference updated), PLAN.md MS19 row description, and milestones.ics MS19 description. Phase 3 LLC strategy doc lands as a near-fleshed skeleton: state, entity type, tax treatment, and statutory agent are pre-decided (Arizona, single-member, default disregarded entity, self as agent); four open decisions remain (entity name, county/publication, bank account choice, E&O insurance timing). Phase 7 (2FA) keeps the positionally-last-by-design property — if MS19 ever grows additional phases, 2FA stays at the end.
Drops the over-dramatized "MS19 must slip 5 weeks for LLC" framing. The actual structure: Phase 4 drafts the legal layer with placeholder entity names during MS19; the entity-name swap and publication to live URLs is a deploy-time finishing step in MS21 Phase 2 (cutover) — its natural home anyway, since that's when legal docs go live to real users for the first time. 19.3 (LLC Formation): - Adds Timing constraint section explaining May $0 prep / June filing split (driven by personal-budget cap, not credit cards). - Mohave County publication confirmed; moved from "to confirm" to "Decisions made" with budget guidance. - Restructures work sections into May prep (no-cost research, drafts, shortlists) and June+ execution (filing, EIN, signing, banking). - Exit criteria add the "notify Phase 4 of final entity name for the MS21 swap-and-publish" handoff. 19.4 (Legal Layer): - Goal updated to make explicit that drafting + scaffolding land here; publication is MS21. - Exit criteria softened: "drafted; ready for entity-name swap and publication at MS21 deploy time" instead of "published". 21 (RC Deployment): - Adds objective bullet for legal-layer activation at deploy. - Records the cross-milestone arrangement under "Decisions recorded" so the dependency direction is unambiguous. - Adds explicit exit criterion for legal layer being live. No MS19 target slip; no cross-phase blocking; meaningful work proceeds across all 7 MS19 phases through May and June.
All three open decisions now resolved: - Entity name: CryptoZing LLC, filed with Nate as sole member. Future restructure under a CyberCreek LLC holding company is considered but out of scope for this phase. - Business bank: America First Credit Union; account opens in §5 once formation + EIN are in hand. - E&O / Professional Liability Insurance: deferred — revenue-gated, not milestone-gated. Won't bind from day-job income. Strategy doc updates: - "Decisions to confirm before flesh-out" section removed; all entries moved into "Decisions made" with the resolution context preserved. - §5 (bank account) and §1.4 (AFCU requirements check) now reference AFCU specifically. - §7 rewritten as a deferred / revenue-gated stance with a tracking item rather than a quote-and-bind workflow. - Exit criteria updated to match (entity name, AFCU specifically, deferred-insurance documented). - Reference section gains future-restructure note for CyberCreek LLC holding company.
Phase 4 (Legal Layer) decisions all resolved and moved to "Decisions made": - Drafting source: narrow at phase start; direction locked as beta-style with strong all-bets-off lean grounded in operational reality. - Disclaimer wording: context-specific per surface, small print, ultra- concise. - Pages location: both public site and Laravel app. - Monetization-safe language guide: section in UX_GUARDRAILS.md. - Existing-copy review scope: all UI and mail copy. - "Open beta" refactor: folded into this phase as §5. Seven work sections fleshed out with concrete checklists. Exit criteria match the resolved decisions and the deferred-publication-to-MS21 split. Phase 5 (Content Promises Reconciliation) trimmed and resolved: - Approach: per-case judgment, no pre-set lean. Thorough on majors; bulk on minors with low-consequence drift routed to backlog. - 0% fee (beta) handling: not re-decided here; resolved in commit 09014b7 and treated as such. - Decisions section dropped (no genuine decisions remained); replaced with a brief Approach note. - Four work sections with concrete checklists.
Both decisions resolved: - Scope: AGENTS.md, CLAUDE.md, AgentRoles/, contributor-facing parts of docs/ops/. Don't broaden to README/DOC_ROLES (different doc shapes). Don't neutralize agent docs — solo-operator project, maintainer-style is the right voice. - Retire-or-merge candidates: discover during the review pass rather than enumerate up front. Five work sections (AGENTS, CLAUDE, AgentRoles, ops, retire/merge) with concrete checklists. Exit criteria match.
All four decisions resolved with lean defaults: - TOTP cutoff: ≥3 working days remaining at phase start. - Recovery: Option C — no recovery codes for email 2FA; locked-out users go through manual-support path with a maintainer admin tool to disable 2FA after identity verification. TOTP keeps recovery codes since "contact maintainer" can't substitute for a lost device. - Code TTL / lockout: 10-min TTL, 5 attempts, 15-min lockout. - Recommendation surface: non-blocking dashboard banner only. Five work sections (email 2FA, recovery flow, recommendation banner, opportunistic TOTP, tests) with concrete checklists. Exit criteria match.
Recovery via solo-maintainer manual support has a real gap: identity verification in lost-email scenarios is weak, and some verification levers (account dates, invoice numbers, business details) leak through invoices recipients have already seen — making social engineering plausible against a single-operator support flow. Switched to Option A — recovery codes — which is the industry standard for this scale of product. Generated at 2FA enable, displayed once, hashed-stored, single-use. User saves out-of-band; regenerate available in settings. If both email and recovery codes are lost, account recreation is the answer, documented honestly. No SMS fallback — NIST-deprecated, weak against SIM-swap, paid vendor cost not justified for a non-custodial product. Updates: D2 in "Decisions made"; §1.6 disable flow accepts code OR recovery code; §2 fully rewritten as recovery-codes flow; §5 tests include recovery-code paths; exit criteria match. Other three pre-decided defaults (3-day TOTP cutoff, 10-min TTL with 5/15 lockout, non-blocking banner) unchanged per user confirmation that "the only one that was really different was the recovery email thing."
# Conflicts: # docs/PLAN.md # docs/milestones.ics
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b5edc3bf77
ℹ️ 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".
| - Corollary that binds CZ: CZ should not be expanded to be a custodial service, or this article makes us hypocritical | ||
| - Resolution path: (a) commit to noncustodial design — Bitcoin goes directly to user-controlled wallet, CZ never holds funds — and verify product enforces this; or (b) revise the article to soften the custodial criticism (loses positioning value) | ||
| - Status: open — awaiting product confirmation | ||
| **1. [Potential hypocrisy]** — "taking a cut they expect you to absorb" |
There was a problem hiding this comment.
Preserve promise IDs when reorganizing the catalog
This reassigns the existing pricing promise from its stable ID (2.1 in the parent) to 1, while the same doc still says IDs are never reused or renumbered. During MS19 reconciliation, any existing notes or audit references to 2.1 now point nowhere, and minor entries also reuse 1, making follow-up ambiguous; keep the old IDs or add an explicit alias/mapping instead of renumbering.
Useful? React with 👍 / 👎.
| - **MS19 - RC Hardening & Ops** — pre-flight; strategy doc skeletons drafted, decisions awaiting user input before flesh-out. | ||
| - Status: `active` | ||
| - Next action: Phase 3 — site architecture, SEO verification, video production, and MS18 close-out. | ||
| - Primary next doc: [`docs/milestones/18_PRERELEASE_CONTENT_SEO.md`](milestones/18_PRERELEASE_CONTENT_SEO.md) | ||
| - Next action: MS19 strategy doc decision answers (user) → flesh-out (Claude). MS18 video gated on Rachel. |
There was a problem hiding this comment.
Update the resume pointer after fleshing out MS19
The dashboard now tells the next agent/user that MS19 is still waiting on decision answers before flesh-out, but this same commit adds the fleshed-out Phase 1–7 strategy docs with recorded decisions. Because PLAN.md is explicitly the first doc to open when resuming work, this stale next action can send the workstream back to a non-existent user-input step instead of starting Phase 1 execution.
Useful? React with 👍 / 👎.
| - [ ] ToS and Privacy Policy drafted and published to the live site. | ||
| - [ ] Disclaimer copy present at signup, wallet onboarding, and invoice/payment surfaces; footer links to ToS and Privacy Policy on every page. |
There was a problem hiding this comment.
Keep MS19 legal exit criteria aligned with MS21 activation
This milestone-level exit criterion still requires the ToS/Privacy Policy to be published to the live site during MS19, but the new Phase 4 strategy says they are only drafted/scaffolded in MS19 and the final entity-name swap plus publication happens at MS21 deploy time. If followed literally, MS19 will either block on work intentionally deferred to MS21 or publish placeholder legal docs early; change this to match the Phase 4/MS21 handoff.
Useful? React with 👍 / 👎.
InvoiceNotificationTest past-due delivery assertions have been failing in CI across every recent PR back to MS17 — expects `queued`, observes `skipped`/`sent`. Pre-existing, not caused by any specific PR's changes. Captured in 19.1 as a "Carried-in known finding" section + a matching exit criterion. Per user direction at MS19 buildout PR merge: must be resolved before Phase 1 closes.
Summary
Date fixedline standardized indocs/DOC_ROLES.md. Finding 1 backfilled (fixed via MS14 on 2026-03-26). Finding 2 documented for the rate-button rename ("Use current rate" → "Refresh rate", commit33489f2).Includes a merge of
main(commita522780milestone-date shift) into this branch, with date conflicts resolved in favor of the newer state (MS18 hard cap dominates; MS19/20/21 keep their existing post-shift targets).Test plan
docs/PLAN.mdtable reflects MS18 → 2026-05-31, MS19 → 2026-06-11, MS20 → 2026-06-23, MS21 → 2026-07-05.docs/milestones.icsmatches; Proton Calendar subscription updates after merge.docs/qa/Finding1.mdanddocs/qa/Finding2.mdboth have aDate fixed:line near the top.docs/milestones/19_RC_HARDENING_OPS.mdlists Phases 1–7 inCurrent FocusandPhase Rollup.docs/strategies/19.{1..7}_*.md.🤖 Generated with Claude Code