Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 16 additions & 3 deletions .console/log.md
Original file line number Diff line number Diff line change
@@ -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).
Expand All @@ -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=[<lowercased repo form>])` 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
Expand Down
2 changes: 2 additions & 0 deletions .custodian/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ src_root: src
tests_root: tests

audit:
reconcile_enforce: true

cross_repo:
platform_manifest_repo: ../PlatformManifest

Expand Down
Loading