Untitled Session
2026-05-24 09:05 UTC · 31 messages · cli
You2026-05-24 09:10 UTC
Write build plans for T43-T51 (Modules 8-10). 9 plans total.
Donna2026-05-24 09:10 UTC
Tool2026-05-24 09:10 UTC
{"content": " 1|# Past Faults Log — Profe Core Modules\n 2|\n 3|> **Purpose:** Every bug, design miss, and edge case discovered during development is recorded here.\n 4|> Future modules (and future TBs) MUST read this log before writing code.\n 5|\n 6|---\n 7|\n 8|## ...
Tool2026-05-24 09:10 UTC
{"content": " 1|# Build Plan V3: Profe Core — Modules 2-10 (COMPLETE)\n 2|\n 3|**Document ID:** BUILD-PLAN-SA-003-V3-COMPLETE \n 4|**Author:** SA (Super Architect) \n 5|**Date:** 2026-05-24 \n 6|**Status:** AUTHORITATIVE \n 7|**Phase 1 Status:** ✅ COMPLETE & LOCKED (P...
Donna2026-05-24 09:10 UTC
Tool2026-05-24 09:10 UTC
{"content": " 501|- ⚠️ **Idempotency guards** — `profe_webhook_events.event_id` UNIQUE KEY. `isDuplicate()` check before processing.\n 502|- ⚠️ **Webhook exempt route** — Register `'stripe-webhook'` via `CsrfMiddlewareInterface::addExemptRoute()`.\n 503|- ⚠️ **Rate limiter** — Redis-backed tok...
Donna2026-05-24 09:10 UTC
Tool2026-05-24 09:10 UTC
{"content": " 1001| - Module management interface\n 1002| - User management\n 1003| - System configuration\n 1004|\n 1005|**Critical Design Decisions:**\n 1006|- ⚠️ **Trigger loop prevention** — Automator tracks execution depth. Halts at depth > 3.\n 1007|- ⚠️ **admin_app architecture** — ...
Donna2026-05-24 09:10 UTC
Now let me check existing build plans for format reference.
Tool2026-05-24 09:10 UTC
{"total_count": 25, "files": ["/root/.hermes/plans/task-t35-build-plan.md", "/root/.hermes/plans/task-t34-build-plan.md", "/root/.hermes/plans/task-t33-build-plan.md", "/root/.hermes/plans/task-t32-build-plan.md", "/root/.hermes/plans/task-t31-build-plan.md", "/root/.hermes/plans/task-t30-build-plan...
Donna2026-05-24 09:10 UTC
Tool2026-05-24 09:10 UTC
{"content": " 1|# Build Plan — T35: MediaAdmin (Module 6 — Media Pipeline)\n 2|\n 3|## 1. Overview\n 4|\n 5|**Module Name:** `media_admin`\n 6|**Namespace:** `Profe\\\\MediaAdmin`\n 7|**Responsibility:** Media library administration API — central admin surface for the ent...
Tool2026-05-24 09:10 UTC
{"content": " 1|# Build Plan — T29: CrmAdmin (Module 5 — CRM)\n 2|\n 3|## 1. Overview\n 4|\n 5|**Module Name:** `crm_admin`\n 6|**Namespace:** `Profe\\\\CrmAdmin`\n 7|**Responsibility:** CRM administration API — contact management UI endpoints, tag management, sync dashbo...
Donna2026-05-24 09:10 UTC
Let me check a plan with new tables (T11 or T12) for the migration pattern.
Tool2026-05-24 09:10 UTC
{"content": " 1|# Build Plan: T11 — mem_levels (Membership Tier Definitions)\n 2|\n 3|**Module:** Module 2 — Membership\n 4|**Build Order:** 1 of 4 (Module 2)\n 5|**Subsequent Tasks:** T12 (mem_data), T13 (access_control), T14 (member_admin)\n 6|**Status:** PLANNED\n 7|**...
Tool2026-05-24 09:10 UTC
{"content": " 1|# Build Plan: T12 — mem_data (Membership Data / Subscription Tracking)\n 2|\n 3|**Module:** Module 2 — Membership\n 4|**Build Order:** 2 of 4 (Module 2)\n 5|**Depends On:** T11 (mem_levels) — reads tier definitions\n 6|**Subsequent Tasks:** T13 (access_control...
Donna2026-05-24 09:10 UTC
Now I have all the context. Let me write all 9 build plans.
Tool2026-05-24 09:10 UTC
{"bytes_written": 17748, "dirs_created": true, "lint": {"status": "skipped", "message": "No linter for .md files"}}
Tool2026-05-24 09:10 UTC
{"bytes_written": 13234, "dirs_created": true, "lint": {"status": "skipped", "message": "No linter for .md files"}}
Tool2026-05-24 09:10 UTC
{"bytes_written": 11362, "dirs_created": true, "lint": {"status": "skipped", "message": "No linter for .md files"}}
Donna2026-05-24 09:10 UTC
Tool2026-05-24 09:10 UTC
{"bytes_written": 12609, "dirs_created": true, "lint": {"status": "skipped", "message": "No linter for .md files"}}
Tool2026-05-24 09:10 UTC
{"bytes_written": 11441, "dirs_created": true, "lint": {"status": "skipped", "message": "No linter for .md files"}}
Tool2026-05-24 09:10 UTC
{"bytes_written": 15974, "dirs_created": true, "lint": {"status": "skipped", "message": "No linter for .md files"}}
Donna2026-05-24 09:10 UTC
Tool2026-05-24 09:10 UTC
{"bytes_written": 11098, "dirs_created": true, "lint": {"status": "skipped", "message": "No linter for .md files"}}
Tool2026-05-24 09:10 UTC
{"bytes_written": 18094, "dirs_created": true, "lint": {"status": "skipped", "message": "No linter for .md files"}}
Tool2026-05-24 09:10 UTC
{"bytes_written": 14253, "dirs_created": true, "lint": {"status": "skipped", "message": "No linter for .md files"}}
Donna2026-05-24 09:10 UTC
Let me verify all 9 files were created correctly.
Tool2026-05-24 09:10 UTC
{"output": "-rw-r--r-- 1 root root 17748 May 24 09:07 /root/.hermes/plans/task-t43-build-plan.md\n-rw-r--r-- 1 root root 13234 May 24 09:07 /root/.hermes/plans/task-t44-build-plan.md\n-rw-r--r-- 1 root root 11362 May 24 09:07 /root/.hermes/plans/task-t45-build-plan.md\n-rw-r--r-- 1 root root 12609 M...
Donna2026-05-24 09:10 UTC
## Summary
**What I did:** Wrote all 9 build plans for T43-T51 (Modules 8-10) — Forms, SEO, and Automation & Polish.
**Files created (9 total, 2,888 lines):**
| File | Task | Module | Lines | New Tables |
|---|---|---|---|---|
| `/root/.hermes/plans/task-t43-build-plan.md` | T43 | FormEngine | 379 | `profe_form_schemas`, `profe_form_conditional_rules` |
| `/root/.hermes/plans/task-t44-build-plan.md` | T44 | FormEntries | 297 | `profe_form_entries` |
| `/root/.hermes/plans/task-t45-build-plan.md` | T45 | FormAdmin | 279 | None |
| `/root/.hermes/plans/task-t46-build-plan.md` | T46 | SchemaRenderer | 290 | None (transient storage) |
| `/root/.hermes/plans/task-t47-build-plan.md` | T47 | SitemapGenerator | 279 | None (in-memory) |
| `/root/.hermes/plans/task-t48-build-plan.md` | T48 | RedirectManager | 371 | `profe_redirects`, `profe_404_log` |
| `/root/.hermes/plans/task-t49-build-plan.md` | T49 | SeoAdmin | 267 | None |
| `/root/.hermes/plans/task-t50-build-plan.md` | T50 | Automator | 408 | `profe_automator_rules`, `profe_automator_logs` |
| `/root/.hermes/plans/task-t51-build-plan.md` | T51 | AdminApp | 318 | None |
**Fault rules enforced across all plans:**
- **FAULT-004** — All mutation endpoints specify `checkAdminAccessWithCsrf()` calling `requireValidNonce()`
- **FAULT-005/009** — All plans specify ≥12 tests (13-14 tests each)
- **FAULT-006** — All modules with new tables have PHP migration classes (T43, T44, T48, T50). Modules without new tables explicitly state "No migration needed"
- **FAULT-008** — All declared dependencies are documented as constructor-injected; test plans include `testConstructStoresAllDependencies()` for each
- **FAULT-002/007** — All direct `profe_users` queries documented with explicit code samples in a dedicated "FAULT-002 Workaround" section
- **FAULT-01** — Factory closure pattern for `register()` methods
- **FAULT-04** — Bare table names, no `$wpdb->prefix`
- **FAULT-05** — Prepared statements for all queries
- **FAULT-09** — No stubs, all methods fully implemented
**Key design decisions:**
- T46/T47: No new tables per task spec — schema stored in transients (WordPress cache), sitemap URLs built on-the-fly from content
- T50: Execution depth limit at 3 to prevent trigger loops (PB critical design decision)
- T51: Assumes React SPA architecture with PHP API backend (FS-1 resolution)
- All admin-only modules (T45, T49, T51) follow the orchestration pattern — no own tables, delegate to child module interfaces