7f-4 Alignment Audit Report
7f-4 Alignment Audit Report
Date: 2026-03-08
Auditor: Dottie
Phase:
Scope: 263 notes across 16 note types
Auditor: Dottie
Phase:
phase-postgres-7f-4-attribute-augmentation, deliverable #5Scope: 263 notes across 16 note types
Summary Statistics
| Metric | Count |
|---|---|
| Total notes audited | 263 |
| TOCs checked | 263 (all types sampled; SOPs, conventions, agents, templates, plans, phases checked exhaustively) |
| Content sections reviewed | SOPs (14), conventions (12), agents (5), templates (10) = 41 deep reads |
| Critical findings | 3 |
| Medium findings | 12 |
| Low findings | 8 |
| Total findings | 23 |
Dimension 1: Structural Quality
Notes with ZERO Headings (Empty TOC)
These notes have no headings at all, meaning block-first convention (
convention-block-first-access) cannot navigate them via get_note_toc + get_section.Convention (1 note) — CRITICAL
| Slug | Issue | Suggested Fix |
|---|---|---|
| <code>convention-dockerfile-pypi-pattern</code> | Completely empty content (0 bytes). Title exists but body is blank. Tagged as active. | Either populate with the Dockerfile/PyPI pattern content or delete as abandoned stub. This is an active convention with no content — agents cannot reference it. |
Phase (21 notes) — MEDIUM
These are pre-template legacy phases from older plans. They lack the Goal/Scope/Related heading structure required by
template-phase. All are from plans created before the phase template was enforced (pre-2026-03-03).| Parent Plan | Empty-TOC Phases |
|---|---|
| <code>plan-2026-02-25-platform-observability</code> | <code>phase-observability-1-project-page</code>, <code>phase-observability-2-verify-baseline</code>, <code>phase-observability-3-alerting</code>, <code>phase-observability-4-dashboard</code>, <code>phase-observability-5-architecture</code> |
| <code>plan-2026-03-01-note-decomposition</code> | <code>phase-note-decomp-1-baseline</code>, <code>phase-note-decomp-2-schema</code>, <code>phase-note-decomp-3-mcp</code>, <code>phase-note-decomp-4-composition</code>, <code>phase-note-decomp-5-dogfood</code> |
| <code>plan-2026-03-01-pal-e-sprints</code> | <code>phase-sprints-1-tables-api</code>, <code>phase-sprints-2-issue-sync</code>, <code>phase-sprints-3-token-metrics</code> |
| <code>plan-2026-02-28-knowledge-system-consolidation</code> | <code>phase-knowledge-1-convention</code>, <code>phase-knowledge-2-schema</code>, <code>phase-knowledge-3-data-migration</code>, <code>phase-knowledge-4-privacy</code>, <code>phase-knowledge-5-skills</code> (h4 only, no h3) |
| <code>plan-2026-02-26-tf-modularize-postgres</code> | <code>phase-postgres-1-tf-modularize</code>, <code>phase-postgres-2-deploy-cnpg</code>, <code>phase-postgres-2b-cleanup-platform</code> |
| <code>plan-2026-03-03-sprint-workflow-automation</code> | <code>phase-2026-03-03-1-forgejo-labels</code>, <code>phase-2026-03-03-2-sop-updates</code> |
Suggested fix: Backfill these with minimal Goal/Scope/Related sections if the plan is still active. For completed/deferred plans, accept as legacy. Prioritize the 3 postgres phases (active plan) and 3 sprint phases (active plan).
Singleton Types (2 notes) — LOW
| Slug | Type | Issue |
|---|---|---|
| <code>priv-1</code> | journal | Empty TOC. Private journal entry — acceptable for freeform type. |
| <code>post-1</code> | post | Empty TOC. Blog post — acceptable for freeform type. |
Todo Notes (7 notes) — LOW
Lightweight todo notes from early in the project. These are quick-capture notes without heading structure:
todo-rename-deployments-repotodo-parent-profile-pagetodo-outreach-strategytodo-coach-west-partnershiptodo-pale-branding-stripetodo-donation-link-websitetodo-fox-news-story
Suggested fix: Todos are lightweight by design. No action unless promoting to a plan/issue.
Phase Template Compliance
The
template-phase requires two shapes: (1) Feature phases need Goal/Scope/Related, (2) Bug-fix phases need Problem/Fix/Related. Of 59 phases:- 36 phases have proper heading structure matching the template
- 21 phases have empty TOCs (listed above)
- 2 phases have h4-only headings (
phase-knowledge-5-skills,phase-2026-03-03-4-betty-sue-skill,phase-2026-03-03-3-agent-configs,phase-2026-03-03-5-hooks,phase-sprints-schema-expansion) — these have content under h4 but no h3 sections, soget_sectionat h3 level returns nothing useful
Dimension 2: Content Accuracy
SOPs (14 notes)
| Slug | Severity | Finding | Suggested Fix |
|---|---|---|---|
| <code>sop-litestream-restore</code> | CRITICAL | Describes SQLite/Litestream restore. pal-e-docs migrated to Postgres in Phase 3 (completed). This SOP describes a backup system that no longer exists for the primary app. | Either archive/deprecate (pal-e-docs is now Postgres + CNPG backup) or repurpose as a generic Litestream reference if any other services still use SQLite. |
| <code>solo-dev-pr-workflow</code> | MEDIUM | Only has Steps section — no Related. Very thin. Doesn't reference current agent model or Forgejo. | Consolidate into <code>pr-lifecycle</code> or add Related section referencing <code>pr-lifecycle</code>, <code>pr-review-loop</code>. |
| <code>service-onboarding-sop</code> | MEDIUM | Minimal structure (3 headings). May not reflect current Kustomize/ArgoCD onboarding flow. References <code>var.services</code> Terraform pattern. | Review against current service onboarding reality. Cross-reference with <code>plan-2026-02-26-kustomize-service-bases</code>. |
| <code>sop-index</code> | LOW | Index page — should list all 14 SOPs. Verify it's current. | Audit that all 14 SOP slugs appear in the index. |
SOPs verified current:
sop-note-deletion, agent-workflow, sop-secrets-management, sop-postgres-restore, deployment-lessons, pr-lifecycle, sop-post-merge-docs, sop-claude-config-development, worktree-workflow, pr-review-loop.Conventions (12 notes)
| Slug | Severity | Finding | Suggested Fix |
|---|---|---|---|
| <code>convention-dockerfile-pypi-pattern</code> | CRITICAL | Empty content. Active convention with no body. | Populate or delete. See Dimension 1 above. |
| <code>branch-protection</code> | LOW | Minimal (3 headings). May not reflect Forgejo-specific branch protection settings currently in use. | Verify against actual Forgejo repo settings. |
| <code>ci-rules</code> | LOW | Very minimal (2 headings). May benefit from expansion with Woodpecker-specific CI rules. | Low priority — functional but thin. |
Conventions verified current and enforced by hooks:
agent-spawn-conventions— enforced bycheck-agent-spawn.shconvention-block-first-access— enforced by agent personality insession-start-context.shconvention-subphase— enforced bycheck-phase-template.shconvention-agent-skill-mcp-wiring— structural convention, enforced byinject-subagent-context.shhtml-style-guide— not hook-enforced but documentedmermaid-authoring— not hook-enforcednamespace-conventions— not hook-enforcedtagging-conventions— partially superseded bynote-conventionsnote-conventions— enforced bycheck-note-template.sh
Agent Profiles (5 notes)
| Slug | Severity | Finding | Suggested Fix |
|---|---|---|---|
| <code>agent-issue-creator</code> | CRITICAL | Status is <code>deprecated</code> but has <code>active</code> tag. Content still describes the 5th agent. MEMORY.md says "issue-creator REMOVED" and "PR #58 merged". Betty Sue now creates issues directly. | Remove <code>active</code> tag. Add <code>deprecated</code> tag. Add a deprecation banner at the top referencing <code>phase-7f-1-deprecate-issue-creator</code>. |
| <code>agent-betty-sue</code> | OK | Correctly references Four Agents model with Dottie. Current. | None. |
| <code>agent-dottie</code> | OK | Correct role as librarian. Current. | None. |
| <code>agent-dev</code> | OK | Current. Proper MCP access boundaries. | None. |
| <code>agent-qa</code> | OK | Current. Proper MCP access boundaries. | None. |
Templates (10 notes)
All 10 templates have proper heading structure. Cross-referenced with enforcement hooks:
| Template | Hook | Status |
|---|---|---|
| <code>template-phase</code> | <code>check-phase-template.sh</code> | Enforced |
| <code>template-issue</code> | <code>check-issue-template.sh</code> | Enforced |
| <code>template-pr-body</code> | <code>check-pr-template.sh</code> | Enforced |
| <code>template-plan</code> | <code>check-note-template.sh</code> | Enforced (via note template check) |
| <code>template-agent</code> | No dedicated hook | Not enforced |
| <code>template-skill</code> | No dedicated hook | Not enforced |
| <code>template-project-page</code> | No dedicated hook | Not enforced |
| <code>template-repo-page</code> | No dedicated hook | Not enforced |
| <code>template-bug</code> | No dedicated hook | Not enforced |
| <code>template-sprint-item</code> | No dedicated hook | Not enforced |
Finding (MEDIUM): 6 of 10 templates have no hook enforcement. The 4 enforced templates cover the high-traffic paths (phases, issues, PRs, plans). Low risk but worth noting for the enforcement architecture.
Dimension 3: Metadata Gaps
Project Assignment
Known API limitation:
list_notes returns project: null for all 263 notes in summaries. Project data exists on individual notes (verified via get_note) but is not exposed in the list endpoint. This is documented in MEMORY.md as "list_notes API missing project field" (7f-4 deliverable #6).Impact: Cannot audit project assignment at scale without calling
get_note for each of 263 notes. This audit focused on parent_slug instead.Parent Slug Gaps
Only 70 of 263 notes (27%) have
parent_slug set: 59 phases + 10 docs + 1 todo.Types That Should NOT Have Parents (top-level by design)
- Plans (40) — top-level, correct
- Project pages (11) — top-level, correct
- SOPs (14) — top-level, correct
- Conventions (12) — top-level, correct
- Templates (10) — top-level, correct
- Skills (10) — top-level, correct
Types Where Parent Is Situational
- Docs (21): 10 have parents, 11 orphaned. The 11 orphaned docs include 3 repo pages (
repo-pal-e-docs-sdk,repo-woodpecker-mcp,repo-forgejo-mcp), 2 bug docs, and general docs likeagent-paradigm,tf-environment-strategy. Repo pages should arguably be children of their project-page. - Todos (51): Only 1 has a parent. Most todos are freestanding quick-capture. Acceptable.
- References (24): None have parents. References are standalone by nature. Acceptable.
Orphan Docs That Should Have Parents — MEDIUM
| Slug | Suggested Parent | Reasoning |
|---|---|---|
| <code>repo-pal-e-docs-sdk</code> | <code>project-pal-e-docs</code> | Repo page should be child of project page |
| <code>repo-woodpecker-mcp</code> | <code>project-pal-e</code> | Repo page should be child of project page |
| <code>repo-forgejo-mcp</code> | <code>project-pal-e</code> | Repo page should be child of project page |
| <code>decision-agent-dottie</code> | <code>project-ai-agency</code> or a phase | Decision doc should trace to the context that produced it |
Slug-Type Mismatches — MEDIUM
8 notes typed as
todo have slug prefixes that don't match their type:| Slug | Current Type | Status | Suggested Fix |
|---|---|---|---|
| <code>bug-argocd-image-updater-ghost-override</code> | todo | null | Re-slug or note: was a bug discovery, resolved via <code>concept-argocd-ghost-override</code> |
| <code>bug-ci-ruff-format-migrate-script</code> | todo | null | If open, status should be <code>open</code>. Slug suggests bug. |
| <code>plan-skill-enforcement-gap</code> | todo | done | Slug starts with <code>plan-</code> but is typed todo. Rename slug to <code>todo-skill-enforcement-gap</code> or retype to plan. |
| <code>bug-grafana-crashloop</code> | todo | done | Resolved. Could archive. |
| <code>bug-update-note-ignores-project-slug</code> | todo | done | Resolved. Could archive. |
| <code>bug-nftables-service-running-oneshot</code> | todo | done | Resolved. Could archive. |
| <code>bug-plan-template-hook-large-content</code> | todo | open | Still open. Slug/type mismatch is cosmetic. |
| <code>bug-forgejo-mcp-missing-create-repo</code> | todo | open | Still open. Slug/type mismatch is cosmetic. |
Null Status Notes — LOW
77 notes have
status: null. Breakdown by type:- References (24/24) — references don't have a lifecycle, null is acceptable
- Todos (22/51) — these should have status (
open/done/deferred). 22 undecided. - Docs (15/21) — docs are reference-like, null acceptable for most
- Skills (10/10) — skills don't have lifecycle state, null acceptable
- Sprints (2/2), Incident (1), Issue (1), Journal (1), Post (1) — singleton types, null acceptable
Action: The 22 todos with null status are the main gap. Each should be triaged to
open, done, or deferred.Tag vs Status Contradictions
| Slug | Status | Tags | Issue |
|---|---|---|---|
| <code>agent-issue-creator</code> | deprecated | active, agent | <code>active</code> tag contradicts <code>deprecated</code> status. Remove <code>active</code> tag. |
Recommendations (Prioritized)
Critical (Fix Now)
convention-dockerfile-pypi-pattern: Populate or delete. Empty active convention is a data quality violation.sop-litestream-restore: Mark as deprecated or repurpose. Describes a backup system no longer in use for the primary app.agent-issue-creator: Removeactivetag, add deprecation banner. Status already correct.
Medium (Fix in 7f-5 or 7f-6)
- 21 legacy phases with empty TOCs: Backfill minimal structure for the 6 phases under active plans. Accept legacy for completed/deferred plans.
- 6 unenforced templates: Document as known gap in enforcement architecture. Low risk but track for future.
- 3 orphan repo-page docs: Set parent_slug to appropriate project page.
- 8 slug-type mismatches in todos: Fix slug prefixes or retype. Cosmetic but confusing for queries.
- 22 todos with null status: Triage to open/done/deferred.
solo-dev-pr-workflow: Consolidate intopr-lifecycleor expand with Related section.service-onboarding-sop: Verify against current Kustomize/ArgoCD reality.
Low (Track for Later)
- 7 lightweight todos without headings: Acceptable for quick-capture type. No action unless promoted.
branch-protection,ci-rules: Thin conventions. Expand when relevant.sop-index: Verify all 14 SOPs are listed.- Journal and post empty TOCs: Freeform types, no template expected.
list_notesAPI project gap: Already tracked as 7f-4 deliverable #6 and Forgejo issue #115.
Related
phase-postgres-7f-4-attribute-augmentation— parent phasephase-postgres-7f-doc-cleanup-sop— parent of the broader cleanup effortconvention-block-first-access— the convention this audit validates againsttemplate-phase— the template phase notes should comply withnote-conventions— slug naming and type conventionssop-index— SOP master list to cross-reference