Keep generated orientation briefs local without Git writeback
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Build and Publish Multi-Context Image / build-and-push (push) Successful in 28s

Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a15374-f59f-7a31-86d2-d23b5d2ed181
This commit is contained in:
tegwick 2026-10-19 13:46:45 +02:00
parent eac38b76ca
commit 39b51a21a5
8 changed files with 23 additions and 68 deletions

View file

@ -1,50 +0,0 @@
<!-- custodian-brief: generated by fix-consistency — do not edit manually -->
# Custodian Brief — state-hub
**Domain:** infotech
**Last synced:** 2026-10-14 00:49 UTC
**State Hub:** http://127.0.0.1:8000 *(adjust if running on a remote machine)*
## Active Workstreams
### Supply State Hub inputs that hub-core receipt tasks wait on
Progress: 3/5 done | workplan_id: `0c68970e-295b-57fc-ac70-e472ee3a7bc4`
**Open tasks:**
- ! A4 work/repo UI caller inventory and owner asks `e6ef3381`
*(wait: Owner map delivered and switch-plan requests sent 2026-10-13 to hub-core (5e2f749b), activity-core (13cff5ff), repo-manager (0c49c989), sbom-nexus (63ce4ead) and policy-nexus (d5dda84d); waiting for their read smokes and reversible switch plans.)*
- ! Named single reader and parity window `077797c8`
*(wait: The first reader is chosen once hub-core implements the accepted feed contract (HUB-WP-0011-T01) and the feed is deployed. Per D3, choose a reader that does not rely on broadcast delivery stamps.)*
### Route human gates and expose actionable owner returns
Progress: 3/5 done | workplan_id: `2c4e96a3-ca0d-5003-b759-880976600ecc`
**Open tasks:**
- ! Integrate deduplicated owner wakeups with the supported runner `cd73e265`
*(wait: Memo 2 plan-only and submit trials wait for a live owner return; C-25 found zero findings across 13 public repos on 2026-10-04)*
- ! Prepare approved receiving promotion and assess graph freshness (P6) `ec0acd06`
*(wait: Memo 3 apply trials need a read-only Forgejo token for the Activity Core worker; then memo 4 schedule and 48 h freshness evidence. 2026-10-14: CCR-2026-0034 in railiance-platform is the keycape operator reader (applied), not this token; no Forgejo-read CCR for the Activity Core worker found.)*
### State Hub retirement strangler and disposition execution
Progress: 6/9 done | workplan_id: `ed077b62-7048-5752-bf65-f90471f45854`
**Open tasks:**
- ! Execute move/replace slices `3a454438`
*(wait: Founder authorized production writer changes on 2026-10-05 (913b924b). No route switches until hub-core, repo-manager, activity-core and ops-hub route-switch and rollback receipts exist. Hub-core receipts are HUB-WP-0011-T03 and HUB-WP-0006-T06, which wait on State Hub for parity cases, caller/alias mapping and a bounded switch window (a mutual wait). repo-manager, activity-core and ops-hub have no receipt workplan yet (requested 2026-10-13).)*
- ! Retire legacy surfaces `f6cf8c01`
*(wait: 2026-10-06 weekly review: zero retirement candidates. Three high-volume /workstreams reads need 60 quiet days (earliest 2026-10-20); two interfaces still have live callers.)*
- ! Stabilization window and archive prep `9230c99b`
*(wait: Needs T04 handoffs and T05 retirement first; legacy meter still has live callers. The primary stop follows the standing change rule (decision 2fd5849c, resolved 2026-10-11); no separate founder gate.)*
## Inbox Hygiene
**Stale unread:** 2 message(s) older than 3 day(s) — triage at session start.
**Missing thread_id:** 2 unread message(s) lack supersession chains.
---
## MCP Orientation (when available)
If the state-hub MCP server is reachable, call:
`get_domain_summary("infotech")`
This provides richer cross-domain context.
If the MCP call fails, use this file as your orientation source.

3
.gitignore vendored
View file

@ -45,3 +45,6 @@ kubectl
Thumbs.db
.idea/
.vscode/
# Local generated orientation; refreshed by State Hub.
/.custodian-brief.md

View file

@ -16,7 +16,8 @@ repository files remain authoritative for repository-owned work records.
- repo registration (classification-driven) and consistency synchronization
- read-model orientation brief rendering without Git operations (`make brief-generate` /
`brief-check`, explicit repo path and slug); rejects unavailable or malformed reads
and preserves existing briefs on failure. See `docs/brief-generation.md`.
and preserves existing briefs on failure. Briefs are ignored local orientation;
consistency refreshes no longer commit their snapshots. See `docs/brief-generation.md`.
- repo classification spine (14 market domains, `.repo-classification.yaml`)
- task-flow engine and flow definitions
- SBOM, contribution, capability, demand-weighted suggestion backlog, TPSC, DoI,

View file

@ -19,6 +19,10 @@ an atomic snapshot; inspect output if concurrent work is changing the hub.
Missing or malformed endpoint responses stop generation before writing. Symlink
targets are refused. Preserve any existing local changes before refreshing.
Review and stage the brief alongside the substantive source change that needs it.
The generated-only commit guard remains in force. This command does not install
an automatic brief hook or change existing consistency writeback defaults.
Briefs are local generated orientation, excluded by `/.custodian-brief.md` in
`.gitignore`. Both this command and ordinary consistency refreshes leave them
untracked and never stage or commit them. Existing tracked snapshots can be
removed with `git rm --cached -- .custodian-brief.md` after preserving the local
file; do not delete that local orientation. Other consistency writebacks retain
their existing behavior. The generated-only commit guard remains in force.
This command does not install a network-dependent pre-commit hook.

View file

@ -3405,8 +3405,8 @@ def _strict_brief_get(api_base: str, path: str, params=None):
def _write_custodian_brief(api_base: str, repo_slug: str, repo_path: str, *,
commit: bool = True, strict: bool = False, check: bool = False) -> bool:
"""Generate .custodian-brief.md at the repo root and git-commit if changed.
strict: bool = False, check: bool = False) -> bool:
"""Generate the local ignored .custodian-brief.md without Git operations.
The brief gives any agent — including subagents without MCP access and
workers on remote machines — instant orientation without a live hub
@ -3642,13 +3642,6 @@ def _write_custodian_brief(api_base: str, repo_slug: str, repo_path: str, *,
raise ValueError("brief differs from current read model")
brief_path.write_text(content, encoding="utf-8")
# Commit the brief so remote workers can pull it
if commit:
_git_commit_writeback(
repo_path,
brief_path,
[f"update .custodian-brief.md for {repo_slug}"],
)
return True

View file

@ -23,7 +23,7 @@ def main():
if (args.repo_path / '.custodian-brief.md').is_symlink():
raise ValueError('refuse redirected brief')
changed = _write_custodian_brief(args.api_base, args.repo_slug, str(args.repo_path),
commit=False, strict=True, check=args.check)
strict=True, check=args.check)
except (OSError, ValueError, KeyError, TypeError) as exc:
parser.exit(1, f'Brief generation refused: {exc}\n')
print(json.dumps({'repo': args.repo_slug, 'status': 'updated' if changed else 'current',

View file

@ -18,9 +18,9 @@ def test_render_does_not_commit_and_timestamp_only_retry_is_unchanged(tmp_path,
monkeypatch.setattr(owner, '_api_get', responses)
commit = Mock(side_effect=AssertionError('Git operations forbidden'))
monkeypatch.setattr(owner, '_git_commit_writeback', commit)
assert owner._write_custodian_brief('unused', 'demo', str(tmp_path), commit=False, strict=True)
assert owner._write_custodian_brief('unused', 'demo', str(tmp_path), strict=True)
before = (tmp_path / '.custodian-brief.md').read_bytes()
assert not owner._write_custodian_brief('unused', 'demo', str(tmp_path), commit=False, strict=True)
assert not owner._write_custodian_brief('unused', 'demo', str(tmp_path), strict=True)
assert (tmp_path / '.custodian-brief.md').read_bytes() == before
commit.assert_not_called()
@ -37,7 +37,7 @@ def test_partial_snapshot_preserves_existing_brief(tmp_path, monkeypatch, failed
monkeypatch.setattr(owner, '_api_get', read)
path = tmp_path / '.custodian-brief.md'; path.write_text('preserved')
with pytest.raises(ValueError, match='unavailable or malformed'):
owner._write_custodian_brief('unused', 'demo', str(tmp_path), commit=False, strict=True)
owner._write_custodian_brief('unused', 'demo', str(tmp_path), strict=True)
assert path.read_text() == 'preserved'
@ -45,5 +45,5 @@ def test_check_has_no_write(tmp_path, monkeypatch):
monkeypatch.setattr(owner, '_api_get', responses)
path = tmp_path / '.custodian-brief.md'; path.write_text('preserved')
with pytest.raises(ValueError, match='differs'):
owner._write_custodian_brief('unused', 'demo', str(tmp_path), commit=False, strict=True, check=True)
owner._write_custodian_brief('unused', 'demo', str(tmp_path), strict=True, check=True)
assert path.read_text() == 'preserved'

View file

@ -28,3 +28,7 @@ checks, document the read-model boundary in SCOPE. Supports CUST-WP-0079 provide
adoption without generated-only guard bypass. Seventeen focused tests pass and
Custodian live read-model check passes. Broader consistency validation recorded
in the session progress receipt; no runtime deployment or scheduler activation.
Operator follow-up: keep generated briefs local and stop tracking snapshots.
The owner renderer now never stages or commits briefs, including consistency
refreshes. Repository ignores preserve local orientation without Git churn.