# Controller Verification ## Recomputed metrics | Check | Command | Expected | Actual | Result | |---|---|---|---|---| | raw_file_count | python3 .../process/controller_verify.py | 38 | 38 | PASS | | raw_line_count | same | observed | 10,649 | PASS | | matrix_row_count | same | 38 | 38 | PASS | | matrix_path_set | same | missing=0, extra=0 | 0, 0 | PASS | | duplicate_paths | same | 0 | 0 | PASS | | nonexistent_paths | same | 0 | 0 | PASS | | malformed_matrix_rows | same | 0 | 0 | PASS | | READ_FULL / BLOCKED | same | 38 / 0 | 38 / 0 | PASS | | per_file_sections | same | 38 | 38 | PASS | | lane_finding_count / unique | same | 60 / 60 | 60 / 60 | PASS | | duplicate / missing finding IDs | same | 0 / 0 | 0 / 0 | PASS | | finding_schema_failures | same | 0 | 0 | PASS | | sed_proof_rows / unique | same | 60 / 60 | 60 / 60 | PASS | | quote commands / failed | python3 .../process/verify_quotes.py | greater than 0 / 0 | 107 / 0 | PASS | | verified quote output lines | same | at least 120 | 158 | PASS | | adversarial rows / unique | controller_verify.py | 60 / 60 | 60 / 60 | PASS | | adversarial generic hits | same | 0 | 0 | PASS | | unresolved priority IDs | same | 0 | 0 | PASS | | broken internal links | same | 0 | 0 | PASS | | forbidden word hits | same | 0 | 0 | PASS | | missing required artifacts | same | 0 | 0 | PASS | | Decision Evidence Map files | same | 38 | 38 | PASS | | Claims Extracted files / missing | same | 38 / 0 for full Claim traceability | 2 / 36 | FAIL | | UNSUPPORTED_DECISION files / occurrences | same | reported | 32 / 125 | PASS | | BROKEN_CLAIM_REFERENCE literal labels | same | reported | 0 | PASS | ## Exact observed output — quote validation ~~~text $ python3 docs/superpowers/specs/2026-07-18-keycloak-branch-note-consistency/process/verify_quotes.py inventory_rows=38 inventory_unique=38 read_full=38 finding_ids=60 expected_finding_ids=60 commands_passed=107 commands_failed=0 verified_output_lines=158 findings_without_commands=0 ~~~ ## Exact observed output — controller validation ~~~text $ python3 docs/superpowers/specs/2026-07-18-keycloak-branch-note-consistency/process/controller_verify.py raw_file_count=38 raw_line_count=10649 matrix_rows=38 read_full_rows=38 blocked_rows=0 missing_paths=0 extra_paths=0 duplicate_paths=0 nonexistent_paths=0 malformed_matrix_rows=0 lane_finding_count=60 unique_finding_ids=60 duplicate_finding_ids=0 missing_finding_ids=0 finding_schema_failures=0 per_file_sections=38 sed_proof_rows=60 sed_proof_unique_ids=60 adversarial_rows=60 adversarial_unique_ids=60 adversarial_generic_hits=0 priority_unique_ids=17 unresolved_priority_ids=0 broken_internal_links=0 forbidden_word_hits=0 missing_required_artifacts=0 decision_evidence_map_files=38 claims_extracted_files=2 missing_claims_extracted=36 unsupported_decision_files=32 unsupported_decision_occurrences=125 broken_claim_reference_literal_occurrences=0 ~~~ ## Deterministic consistency checker | Metric | Observed | |---|---:| | Repository files | 102 | | Repository findings | 144 | | BARE_OWNER_REF | 74 | | BARE_DECISION_REF | 70 | | Keycloak-scope BARE_DECISION_REF | 8 | | Keycloak-scope DANGLING_DECISION_REF | 0 | | Keycloak-scope DANGLING_SECTION_REF | 0 | | Keycloak-scope exact DUAL_OWNERSHIP | 0 | ## Nine gates | Gate | Expected | Actual | Result | |---|---|---|---| | scope_gate | path sets equal, duplicate=0, nonexistent=0 | 38=38, 0, 0 | PASS | | matrix_gate | 38 valid four-column rows and allowed status | 38 valid, READ_FULL=38 | PASS | | finding_gate | 38 file sections, 60 unique IDs, full finding schema, Claim traceability | 38, 60, schema failure=0, Claims Extracted missing=36 | FAIL | | quote_gate | one VERIFIED proof row per finding and source output | 60 rows, 158 output lines | PASS | | adversarial_gate | 60 substantive rows, no generic rows | 60, generic=0 | PASS | | priority_gate | each referenced ID exists | unresolved=0 | PASS | | link_gate | all internal Markdown links resolve | broken=0 | PASS | | language_gate | forbidden terms outside quoted source=0 | 0 | PASS | | artifact_gate | master, two root files, six subfolder files exist | missing=0 | PASS | ## Claim traceability status | Metric | Value | Interpretation | |---|---:|---| | Decision Evidence Map | 38/38 | branch decision tables present | | Claims Extracted | 2/38 | 36 files require migration or equivalent source-claim audit | | UNSUPPORTED_DECISION | 125 occurrences in 32 files | labels reported; label presence alone is not a defect | | BROKEN_CLAIM_REFERENCE literal | 0 | absence of the label does not prove every target resolves | | Lane 2 lexical sample | 152/153 IDs resolved | KC-HOST-C6 is the one unarchived candidate and was not supporting evidence | ## Verdict | Rule | Result | |---|---| | Every gate PASS | no | | scope_gate and matrix_gate PASS, source reads available, at least one non-core gate FAIL | yes | | Computed verdict | PARTIAL | ## Failed gates | Gate | Expected | Actual | |---|---|---| | finding_gate | full local finding schema plus source Claim traceability | local schema 60/60, Claims Extracted only 2/38 |