# P1-0e — nullability and repository-hygiene closure

| Row | Field | Route | Decision |
|---|---|---:|---|
| `EF0000000` | `FlagCategory` | 1 | `NULL`; a reference row for the absence of a detector has no rule category. |
| `EF0000000` | `RiskFactor` | 1 | `NULL`; a reference row may have no assessed risk. |
| `EF0000000` | `AutoReviewable` | 1 | `NULL`; unspecified automation grants no authority. |
| `EF0000000` | `Summary` | 1 | `NULL`; a rule may have no second prose summary beyond its category. |
| `EF0000000` | `FlowDimension` | 1 | `NULL`; a reference-only rule may have no detector dimension. |
| `EF0000000` | `PolicyReference` | 1 | `NULL`; a reference-only rule may cite no policy. |
| `EF0000000` | `RequiredAction` | 1 | `NULL`; a reference-only rule may require no action. |
| `EF0000000` | `AutoActionAllowed` | 1 | `NULL`; unspecified automation grants no authority. |
| `EF0000000` | `ReviewOwnerRole` | 1 | `NULL`; a non-Decision reference row may have no route owner. |
| `EF0000000` | `ReviewPriority` | 1 | `NULL`; a non-Decision reference row may have no route priority. |
| `EF0000000` | `ResolutionEvidenceRequired` | 1 | `NULL`; a reference-only rule may require no resolution evidence. |
| `EF0000000` | `EffectiveFrom` | 1 | `NULL`; a rule not authored in FDR has no FDR authoring time. |
| `EF0000000` | `EnforcementStartsAt` | 1 | `NULL`; a non-blocking Annotation reference row enforces nothing. |
| `EF0000053` | `FlagCategory` | 1 | `NULL` while inactive; the activation command must supply a governed value. |
| `EF0000053` | `RiskFactor` | 1 | `NULL`; not every rule has an assessed numeric risk. |
| `EF0000053` | `AutoReviewable` | 1 | `NULL`; unspecified automation grants no authority. |
| `EF0000053` | `FlowDimension` | 1 | `NULL`; a rule may await a governed dimension without inventing one. |
| `EF0000053` | `PolicyReference` | 1 | `NULL`; C12 cites no governed policy. |
| `EF0000053` | `AutoActionAllowed` | 1 | `NULL`; unspecified automation grants no authority. |
| `EF0000053` | `ReviewOwnerRole` | 1 | `NULL` while inactive; the activation command must supply the owner. |
| `EF0000053` | `ReviewPriority` | 1 | `NULL` while inactive; the activation command must supply the priority. |
| `EF0000053` | `BlockingLevel` | 1 | `NULL` while inactive; the activation command must supply the blocking decision. |
| `EF0000053` | `EffectiveFrom` | 1 | `NULL`; a rule not authored in FDR has no FDR authoring time. |
| `EF0000053` | `EnforcementStartsAt` | 1 | `NULL` while inactive; the activation command supplies the immutable start. |
| `BT000012` | `ReconciliationType` | 1 | `NULL`; a classifier need not belong to a named reconciliation family. |
| `BT000012` | `AutoProposeAllowed` | 1 | `NULL`; unspecified proposal authority is denied. |
| `BT000012` | `AutoCloseAllowed` | 1 | `NULL`; unspecified closure authority is denied. |
| `BT000012` | `RequiresReview` | 2 | `Yes`, authored; D6's distinct visible result emits Decision-class review work. |
| `BT000012` | `MaxDateWindowDays` | 1 | `NULL`; this deterministic result uses no date-window match. |
| `BT000012` | `ToleranceAmount` | 1 | `NULL`; this deterministic result uses no amount tolerance. |

**Result:** all thirty previously forbidden blank cells are seedable without placeholder literals:
29 take route 1 and one takes route 2. Route 3 is unused, so this assignment creates no project
item; O5 remains the only open item.

## Constraint and activation decisions

`DOCEFL` uses `UNIQUE NULLS NOT DISTINCT (FlagReasonCategory, FlowDimension)`. Two equal categories
with NULL dimensions therefore collide; nullable `FlowDimension` does not silently escape the
identity constraint.

`EF0000053` seeds with `Active=No`. The named `RequireRunnableActiveDecisionDOCEFL` CHECK requires
every active Decision detector to have non-NULL `FlagCategory`, `ReviewOwnerRole`,
`ReviewPriority`, `BlockingLevel`, and `EnforcementStartsAt`. The authenticated, company-scoped and
audited `ActivateDOCEFLRule` command supplies all five in one operation and refuses a partial
activation. P1-1b must use that command when the governed values are provided; no seed literal is
inferred.

## Whole-tree stale-state and heading scan

The scan found and corrected current-authority B1 wording in `docs/p1-0-schema-mapping.md` and
`docs/p1-0-signoff.md`. It also found and corrected B1 wording in the dated
`docs/HANDOFF-2026-08-05.md` and superseded `docs/AGENT-PROMPT-v5-P1-0c.md`, and replaced obsolete
O1/O2/O4 and four-domain-choice statements in `docs/p1-0c-status.md` and
`docs/p1-0-review-findings.md`. The follow-up scan corrected the live instructions in
`docs/AGENT-PROMPT-v5-P1-1.md` and every current-presented P1-0e finding in
`docs/project-evolution.html`: authored-row nullability, inactive governed activation for the
Monthly-gap rule, `BT000012.RequiresReview=Yes`, closed per-capture B1, the two repaired headings, and
the completed line-ending policy and empty renormalization commit. Dated letters and review
recommendations explicitly catalogued as history by `docs/PROJECT-STATE.md` remain historical
records and are not current state claims.

The final-review focused scan found remaining stale current-facing text in two target documents and
corrected it: `docs/p1-0-signoff.md` now frames its four-item carve-out, D6, A3 and former P1-0c
actions as historical conditions closed by P1-0d, and explicitly says that superseded P1-0c must
not be rerun; `docs/project-evolution.html` now records its P1-0b seed snapshot and seed/C3/group-A
callout as closed history, including P1-0d provenance and A3 measurement plus P1-0e
nullability/activation closure. The page names O5 security as the only current open risk and marks
the metric-integrity note as acceptance discipline, not an open project item. The post-fix scan
finds no current-facing claim that C9/C11/C12/C15, C3, group A, B1, O1–O4, the P1-0 carve-out, or
the P1-0e defects remain open.

The final-gate scan then corrected three remaining current-instruction findings:
`docs/AGENT-PROMPT-v5-P1-1.md` now treats A1–A7 and C3 as closed decisions to implement, names
`docs/PROJECT-STATE.md` as the sole state authority, and identifies `project-todo.md` as the rev. 4
execution backlog only; `docs/p1-0-signoff.md` retains the B2–B4 defect history while recording the
three operative P1-0d lifecycle fixes; and `docs/project-evolution.html` makes its prompt-current
claim conditional on these corrections and replaces obsolete #1/#4 parallel sequencing with #1
complete, #4 continuing now, and O5 dependent on nobody.

The remaining-high-gate scan corrected the last two findings and directly related stale statements
in the same sections. `docs/p1-0-a-group-decisions.md` now records P1-0d provenance, the closed A3
identity split and BRCode key, the final A5 separation of recorded status, governed-rule code and
source-only reconciliation text, P1-0d closure of B2/B3/B4/B12,
and current P1-0c/P1-0d/P1-0e/P1-1a sequencing while preserving B1's explicit superseded history.
`docs/p1-0-discard-purge-lifecycle.md` and
`docs/p1-0-user-ai-roles-responsibilities-policy.md` now name the exact existing `DocumentStatus`
values for fresh, malformed-response, schema-valid `NOT_A_DOCUMENT`, and `RestoreForReview` paths.
Focused post-fix scans find no stale A3 two-bucket instruction, parallel P1-0c sequencing, deferred
B2/B3/B4/B12 statement, or generic operational-status phrase in those operative sections.

A line-start scan found exactly two leaked patch markers. They were removed from
`docs/p1-0-codes-taxonomy-archive.md` and `docs/p1-0-schema-mapping.md`; the post-fix scan finds no
Markdown heading beginning with `+`.

The release-gate scan aligned A5 and BNKREC on the operative three-column model: source
`MatchType` persists/renders as `RecordedMatchStatus` with all 12 source statuses plus D6,
nullable `GovernedMatchRuleCode` references `BNKMAT(BTCode)`, and `ReconciliationMatchType` stays
source-only free text without an FK. BNKREC now declares non-null unique `BRCode`, binds it
restrictively to the single surviving `BNKREC` CodeLedger bucket through a generated constant and
composite FK, and uses exactly `(Company, BMCode, EntryCode, FindingDiscriminator) NULLS NOT
DISTINCT` as its permanent alternate key; run-scoped `MatchGroupID` is absent from both the key and
the ledger. The same scan made the sign-off's closed status explicit, made the P1-0b/P1-0c and
residual-triage documents fail-safe as history, and corrected both P1-1a branch references.

The final-audit stale scan found one remaining current-facing contradiction in
`docs/project-todo.md`: its rev. 4 correction note still said C1–C19 were unapplied and its P1-1
gate still suspended the migration prompt. The note now records P1-0d/P1-0e closure, the operative
draft precedence, and `docs/PROJECT-STATE.md` as the only project-state authority; the historical
gate is closed and records active P1-1a with its corrected prompt and branch. The post-fix scan
finds no current-facing suspension/reissue instruction or claim that C1–C19 remain unapplied.

## Line endings and changed paths

Repository text is governed by root `.gitattributes` as LF, including SVG, PowerShell, and command
scripts; PDF, PNG, and XLSX are binary. `git add --renormalize .` produced no content delta because the
index was already LF. The dedicated renormalization commit is therefore intentionally empty, and
`git diff --ignore-all-space HEAD~1` is empty for it.

Exact paths changed across the required three-commit P1-0e stack:

- `.gitattributes`
- `docs/AGENT-PROMPT-v5-P1-0b.md`
- `docs/AGENT-PROMPT-v5-P1-0c.md`
- `docs/AGENT-PROMPT-v5-P1-1.md`
- `docs/HANDOFF-2026-08-05.md`
- `docs/PROJECT-STATE.md`
- `docs/p1-0-a-group-decisions.md`
- `docs/p1-0-c20-authored-rows.md`
- `docs/p1-0-codes-taxonomy-archive.md`
- `docs/p1-0-discard-purge-lifecycle.md`
- `docs/p1-0-residual-triage.md`
- `docs/p1-0-review-findings.md`
- `docs/p1-0-schema-mapping.md`
- `docs/p1-0-signoff.md`
- `docs/p1-0-user-ai-roles-responsibilities-policy.md`
- `docs/p1-0c-status.md`
- `docs/p1-0e-status.md`
- `docs/project-evolution.html`
- `docs/project-todo.md`

## Verification evidence

On 2026-08-05, the host command `dotnet build GOTT.Sibyla.slnx` succeeded with 0 warnings and
0 errors.

External clone note: `C:\WIP\GOTT.Sibyla\.git\index.lock` is reported as a stale zero-byte lock.
It was not touched from this development checkout; the user must delete it in that clone.
