diff --git a/.console/log.md b/.console/log.md index 8346313..2a64711 100644 --- a/.console/log.md +++ b/.console/log.md @@ -1,18 +1,31 @@ # Log +## 2026-06-04 — Console reconciliation: scrub + enforce + +Reconciled `.console/` per the console-reconciliation spec (scrub-target boundary, I2). + +- Scrubbed scrub-target private identifiers from `.console/log.md` historical entries + (three hits in the 2026-05-22 and 2026-05-23 narration). Genericized in place to + "a private downstream repo" / "canonical name" / "lowercased repo form" while + preserving meaning. Numbered detector-ID forms (the `VF2`-style codes) left untouched by design. +- Log is under the 400-line budget, so no prune was performed. +- `.custodian/config.yaml`: set `audit.reconcile_enforce: true` (opt-in R1/R2 detectors) + now that this repo's tracked `.console/` is scrub-clean. +- Verified `git grep` for scrub-target identifiers over `.console` and `docs` is empty. + ## 2026-05-23 — Custodian guard to zero + pre-push hook onboarded Drove `custodian-multi` from 30 findings to `0 findings | clean` on branch `chore/custodian-clean`. - C13: `registry.py` resolves the registry path from `REPOGRAPH_REGISTRY` / `XDG_CONFIG_HOME`; it IS the config/env-access layer, so added it to `c13_allowed_paths` (rationale in config). No code change. - RUFF: removed unused `default_registry_path` import (F401) and a placeholder-free f-string (F541) in `cli.py`. -- B1 (PUBLIC repo): the illustrative `VideoFoundry`/`videofoundry`/`video_foundry` (+ `VideoFoundryA/B`) example names in `authorization.py` docstrings and `tests/test_authorization.py` are now forbidden by the boundary artifact. Genericized to the neutral placeholder `MediaForge` (and `mediaforge`/`media_forge`/`MediaForgeA/B`), preserving the alias-resolution semantics each test asserts. Repo's own name "RepoGraph" is not forbidden, so no privacy exclude needed. +- B1 (PUBLIC repo): the illustrative example names referencing a private downstream repo (canonical, lowercased, and snake_case forms, plus their A/B variants) in `authorization.py` docstrings and `tests/test_authorization.py` are now forbidden by the boundary artifact. Genericized to the neutral placeholder `MediaForge` (and `mediaforge`/`media_forge`/`MediaForgeA/B`), preserving the alias-resolution semantics each test asserts. Repo's own name "RepoGraph" is not forbidden, so no privacy exclude needed. - T1/T6/T7: wrote genuine unit tests rather than over-excluding — `tests/test_authorization_models.py` (direct-import coverage of `AlsoHostsEntry`/`ManifestRecord`/`AuthorizationView`), `tests/test_cli.py` (CliRunner coverage of all `manifest_*` commands), and appended registry-discovery tests to `tests/test_registry.py` (`discover_manifest_yaml`, `discover_all_manifest_yamls`, `iter_yaml_documents`). `cli.py` added to T1 exclude only because T1 keys on the python symbol name while CliRunner invokes commands by CLI string ("manifest add"); behaviour is fully tested. - Hooks: added `.hooks/pre-push` (custodian regression guard, fail-closed on missing boundary artifact); `pre-commit` already present. `core.hooksPath` set to `.hooks`. - 61 tests pass; audit clean. ## 2026-05-22 — can_anchor_host accepts canonical_name OR snake_case key (alias resolution) -Follow-up to e2e test of ADR 0002. Operators naturally refer to repos by either form: `VideoFoundry` (canonical_name) or `videofoundry` (the dict key in PM-style YAML, or just the lowercased canonical). Before this change, only canonical_name resolved; other forms returned "not registered in any manifest", which masked real boundary violations behind a misleading error. +Follow-up to e2e test of ADR 0002. Operators naturally refer to repos by either form: the canonical_name or its lowercased form (the dict key in PM-style YAML, or just the lowercased canonical). Before this change, only canonical_name resolved; other forms returned "not registered in any manifest", which masked real boundary violations behind a misleading error. Changes: - `ManifestRecord` gains `repo_aliases: dict[str, str]` (lowercased alias → canonical). @@ -24,7 +37,7 @@ Changes: 5 new tests in `test_authorization.py`: canonical match, alias match, case-insensitive variants, block-reason names canonical even when called via alias, alias conflict fatal. 43/43 passing (was 38). -E2E re-verified: `capture(repos_touched=["videofoundry"])` from a PM anchor now raises BoundaryViolation with the canonical 'VideoFoundry' in the reason, instead of the previous misleading "not registered". +E2E re-verified: `capture(repos_touched=[])` from a PM anchor now raises BoundaryViolation with the canonical name in the reason, instead of the previous misleading "not registered". ## 2026-05-22 — P2: manifest registry + authorization API diff --git a/.custodian/config.yaml b/.custodian/config.yaml index cc27b6a..524d3ba 100644 --- a/.custodian/config.yaml +++ b/.custodian/config.yaml @@ -3,6 +3,8 @@ src_root: src tests_root: tests audit: + reconcile_enforce: true + cross_repo: platform_manifest_repo: ../PlatformManifest