Problem
_is_stage_relevant_constraint correctly gates aspect-classified constraints by session_aspect_ids (fixed in #116). But several PROFILE/LOCKED tactical rules that are task-specific have no aspect_classification in their hints, so they bypass that gate entirely and fall through to the MUST+LOCKED always-pass check (lines 6677-6681).
Affected constraints (confirmed via DB query):
| Constraint |
UID |
rule_kind |
Problem |
| C2F framing cap 15m |
tactical_focus/c2f_framing_cap_15m/v1 |
capacity |
Only relevant when a C2F task exists |
| Artifact-first scheduling gate |
tactical_focus/artifact_first/v1 |
sequencing |
Relevant for any session with unclarified tasks |
| Block exit criteria + hard stop |
tactical_focus/block_exit_hard_caps/v1 |
— |
Could be universal, needs review |
Observed in session 1773616609.406049: All three appear in every constraints_active_snapshot regardless of session content.
Root cause
These constraints were created before the aspect_classification schema was introduced. They lack an aspect_id, so _is_stage_relevant_constraint cannot gate them by session context.
Acceptance criteria
Scope
data/admonish.db — timeboxing_constraints table, hints column for uid starting with tactical_focus/c2f_*
Possible new Alembic migration to backfill aspect_classification
Related
Fixes the code-side gate: PR for #116
Problem
_is_stage_relevant_constraintcorrectly gates aspect-classified constraints bysession_aspect_ids(fixed in #116). But several PROFILE/LOCKED tactical rules that are task-specific have noaspect_classificationin theirhints, so they bypass that gate entirely and fall through to the MUST+LOCKED always-pass check (lines 6677-6681).Affected constraints (confirmed via DB query):
tactical_focus/c2f_framing_cap_15m/v1tactical_focus/artifact_first/v1tactical_focus/block_exit_hard_caps/v1Observed in session
1773616609.406049: All three appear in everyconstraints_active_snapshotregardless of session content.Root cause
These constraints were created before the
aspect_classificationschema was introduced. They lack anaspect_id, so_is_stage_relevant_constraintcannot gate them by session context.Acceptance criteria
aspect_classificationwith an appropriateaspect_id(e.g.c2f_work) — code-only change once data is updatedhintscolumn intimeboxing_constraintsfor affected rowsconstraints_active_snapshotc2f_workaspect insession_aspect_ids→ C2F framing cap included; session without → excludedScope
data/admonish.db—timeboxing_constraintstable,hintscolumn foruidstarting withtactical_focus/c2f_*Possible new Alembic migration to backfill
aspect_classificationRelated
Fixes the code-side gate: PR for #116