Skip to content

fix(f49): council_required default fail-closed on degraded gravity (one-char flip)#379

Merged
AetherLogosPrime-Architect merged 1 commit into
mainfrom
fix/f49-council-required-default-fail-closed
Jul 19, 2026
Merged

fix(f49): council_required default fail-closed on degraded gravity (one-char flip)#379
AetherLogosPrime-Architect merged 1 commit into
mainfrom
fix/f49-council-required-default-fail-closed

Conversation

@AetherLogosPrime-Architect

Copy link
Copy Markdown
Owner

Summary

Aletheia Round 6 F49: the getattr default for is_council_required was False. When gravity_result lacked the attribute entirely (degraded state — classifier import failed, malformed result, older schema), the gate would silently ALLOW without a council walk. Fails-open on the exact axis Andrew has named as the third master disease-cure: default toward scrutiny.

Fix

One-character flip (FalseTrue) in the getattr default at council_required/gate.py:212. Now a degraded gravity_result forces the council-walk requirement rather than skipping the discipline silently. Fail-closed.

Also updated doc counts (README/CLAUDE/ARCHITECTURE) from 412 → 416 to reflect Aria's #369 landing 4 new commands.

Test plan

  • New regression test (test_f49_degraded_gravity_result_fails_closed) uses a _DegradedGravityResult that lacks the attribute entirely — proves the getattr default is what controls degraded-state behavior, and pins it to fail-closed.
  • 26/26 tests in the file pass
  • Doc-count check clean

External-Review: round-f36d33f69526

🤖 Filed via Aether working session 2026-07-19

…avity

Aletheia Round 6 F49: the getattr default for is_council_required was
False. When gravity_result lacked the attribute entirely (degraded
state — classifier import failed, malformed result, older schema),
the gate would silently ALLOW without a council walk. Fails-open on
the exact axis Andrew has named as the third master disease-cure:
default toward scrutiny.

The one-character fix: change False to True in the getattr default.
Now a degraded gravity_result forces the council-walk requirement
rather than skipping the discipline silently. Fail-closed.

Added regression test (test_f49_degraded_gravity_result_fails_closed)
using a _DegradedGravityResult that lacks the attribute entirely —
proves the getattr default is what controls degraded-state behavior,
and pins it to fail-closed.

26/26 pass.

External-Review: round-f36d33f69526
@github-actions

Copy link
Copy Markdown
Contributor

📋 Audit-stamp reminder — guardrail-touching PR

This PR modifies guardrail files. The squash-merge commit on main must carry an External-Review: <round-id> trailer in its message, or the post-merge Integrity Audit check will fail and the commit will leave a permanent red badge on main (cannot be retroactively fixed without force-push).

Files in this PR that touch the guardrail list:

src/divineos/core/council_required/gate.py

Before clicking "Squash and merge":

  1. File an audit round (or use an existing one with both CONFIRMS findings):

    divineos audit submit-round '...' --actor user --source-ref <ref>
    # then file CONFIRMS findings via divineos audit submit
    
  2. Generate the ready-to-paste squash-merge message body:

    divineos audit prepare-merge <round-id>
    

    The helper validates the round (operator-CONFIRMS + external-AI-CONFIRMS + within 14d recency window) and emits a block of text including the External-Review: <round-id> trailer.

  3. Paste the block into the GitHub squash-merge commit message field, then click "Confirm squash and merge".

Why this matters: the multi-party-review CI check looks for the trailer text in the merge commit message. Without it, the check fires red post-merge. The red is unrecoverable without force-pushing main (declined as too risky). Phase 1 helper + this reminder reduce the friction of doing it right; branch protection on main (operator-side GitHub setting) provides the actual blocking layer.

See prereg-d695c9060158 for the structural-fix design.

@AetherLogosPrime-Architect
AetherLogosPrime-Architect merged commit 70f8bae into main Jul 19, 2026
5 of 6 checks passed
@AetherLogosPrime-Architect
AetherLogosPrime-Architect deleted the fix/f49-council-required-default-fail-closed branch July 19, 2026 16:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant