Commit graph

1861 commits

Author SHA1 Message Date
20f8b2f31f docs(CORE-WP-0007): update ops evidence target to Core Hub
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 4s
2026-07-08 12:48:04 +02:00
726da055dc Fix core-hub stabilization evidence sink posting
All checks were successful
CI Smoke / host-smoke (push) Successful in 1s
CI Smoke / container-smoke (push) Successful in 2s
Build and Publish Container Image / build-and-push (push) Successful in 57s
Allow persist_ops_evidence to emit State Hub progress for core-hub context
sources so scheduled stabilization checks record hub-visible evidence.
2026-07-08 00:44:49 +02:00
1a2e0770c1 docs(workplan): align ACTIVITY-WP-0009 closeout with ESO deployment
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 2s
Update T02 and closeout notes to reflect ExternalSecret-managed
ISSUE_CORE_API_KEY rather than a manual secret patch step.
2026-07-08 00:29:08 +02:00
151512a8fa Add Core Hub production stabilization scheduled checks
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Build and Publish Container Image / build-and-push (push) Successful in 35s
Introduce the core-hub context resolver stabilization_check query, State Hub
progress summaries, activity-definition projections, and unit tests for the
CORE-WP-0007 post-cutover window.
2026-07-08 00:27:12 +02:00
c253139ee3 Archive custodian-WP-0003 and align task statuses with DB
All checks were successful
CI Smoke / host-smoke (push) Successful in 1s
CI Smoke / container-smoke (push) Successful in 3s
The superseded monolithic event-bridge workplan duplicated T34-T57 task
bindings already tracked in custodian-WP-0003a/b/c. Mark all frontmatter
tasks done, set status archived, and move to workplans/archived/ to clear
fix-consistency C-03/C-15 assessment failures.
2026-07-08 00:14:41 +02:00
9a7ae8b59a Add ExternalSecret for ISSUE_CORE_API_KEY on Railiance
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 6s
Build and Publish Container Image / build-and-push (push) Successful in 13s
Sync the shared issue-core ingestion key from OpenBao into
actcore-runtime-secret via External Secrets, with an interim coulombcore
ClusterSecretStore bootstrap script and deploy docs. Removes manual key
injection from bootstrap-secrets.sh.
2026-07-08 00:04:38 +02:00
custodian-sync
7dab19b0d7 chore(consistency): sync task status from DB [auto]
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 2s
Updated by fix-consistency on 2026-07-07:
  - update .custodian-brief.md for activity-core
2026-07-07 22:34:37 +02:00
1f1b698c35 Finish ACTIVITY-WP-0009 issue-core task emission promotion
All checks were successful
CI Smoke / host-smoke (push) Successful in 1s
CI Smoke / container-smoke (push) Successful in 53s
Build and Publish Container Image / build-and-push (push) Successful in 51s
Close the intent-gap workplan by documenting the weekly-sbom-staleness
promotion path, adding a null-sink and live REST smoke script, and recording
rollback steps for Railiance. Update SCOPE and deployment docs to reflect
ISSUE_SINK_TYPE=rest and the remaining actcore-runtime-secret key patch.
2026-07-07 22:30:46 +02:00
d563d516f5 Add pending_decisions state-hub query + monthly secrets-elevation review
All checks were successful
CI Smoke / host-smoke (push) Successful in 1s
CI Smoke / container-smoke (push) Successful in 3s
Build and Publish Container Image / build-and-push (push) Successful in 1m4s
New context_resolvers/state_hub.py query type: pending_decisions, a thin
GET /decisions/ passthrough (topic_id/workstream_id/workplan_id/decision_type
passed through, status defaults to open). Generic -- not special-cased to
any one decision.

New activity-definitions/monthly-secrets-elevation-review.md: fires 08:00
Berlin on the 1st of each month, sweeps open State Hub decisions under the
infotech/reuse-surface topic, and opens a review task for each. First
target: the temporary autoMode.allow/permissions.allow elevation added to
~/.claude/settings.json on 2026-07-07 (decision 11bf5cbf-458d-4275-a870-
77a82b4058b9, deadline 2026-07-31) for ops-warden/kubectl/OpenBao secret
reads.

Requested by Bernd: no existing scheduling mechanism (session-only cron,
cloud routines with no local access) can durably re-check a local security
posture a month out -- this closes that gap using activity-core's own
durable Temporal-backed trigger instead.

Verified: definition_parser.parse_file + scan_and_parse load it cleanly
alongside the two existing definitions; new resolver tests pass (20/20 in
that file); pending_decisions confirmed against the live local State Hub.
Full suite: 241 passed, 2 pre-existing unrelated failures (confirmed via
git stash -- present before this change too).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-07 15:26:00 +02:00
ce03e78e26 feat(T06): hostPath working-memory sync and repo-relative sink paths
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 3s
Build and Publish Container Image / build-and-push (push) Successful in 1m36s
Mount the-custodian memory/working from the railiance01 clone (hostPath)
so sweep writeback commits daily-triage notes; worker runs as uid 1000;
progress events store repo-relative working_memory_path; ops inventory
defaults use custodian:// URIs.
2026-07-07 01:00:49 +02:00
70e3154b05 feat: Phase 5 stabilization schedules and custodian path URIs
All checks were successful
CI Smoke / host-smoke (push) Successful in 1s
CI Smoke / container-smoke (push) Successful in 9s
Build and Publish Container Image / build-and-push (push) Successful in 2m58s
Add phase5_stabilization_check State Hub resolver with progress evidence
sinks, schedule projections for daily and closeout checks, custodian:// and
activity-core:// runtime path resolution, and Railiance mounts under /var/custodian.
2026-07-07 00:48:36 +02:00
5c3a89c495 deploy(railiance): in-cluster STATE_HUB_URL; retire state-hub bridge
All checks were successful
CI Smoke / host-smoke (push) Successful in 1s
CI Smoke / container-smoke (push) Successful in 2s
Point activity-core at state-hub.state-hub.svc.cluster.local and scale
actcore-state-hub-bridge to 0 after CUST-WP-0054 Phase 3 cutover.
2026-07-06 18:57:44 +02:00
34c6492013 Add Forgejo CI smoke and image workflow (tier 3 T04)
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 2s
Build and Publish Container Image / build-and-push (push) Successful in 1m12s
2026-07-06 17:11:17 +02:00
6e3e7e6176 Include ranked suggestions in daily triage digest (STATE-WP-0061).
Expose State Hub ranked_suggestions from /state/summary in the
daily_triage_digest resolver so WSJF triage can prioritize gated needs.
2026-07-06 10:52:52 +02:00
d7d7c966fa chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-07-03:
  - update .custodian-brief.md for activity-core
2026-07-03 19:22:06 +02:00
f36af682e4 Reevaluate blocked workplans WP-0008/0009/0010/0015
Unblock lifecycle statuses after daily triage trust evidence closed
(06-28 through 07-03 clean scheduled runs). Finish WP-0010, return
WP-0008/0009/0015 to active with accurate wait reasons, and document
the scheduled-wait vs hard-blocker distinction.
2026-07-03 19:19:52 +02:00
3bbc122ae7 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-07-03:
  - update .custodian-brief.md for activity-core
2026-07-03 18:28:12 +02:00
a1e2a426b9 ISSUE-WP-0003-T06: issue-core REST sink via actcore-issue-core-bridge (node-local tunnel 18765)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 14:20:12 +02:00
9113206974 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-07-02:
  - update .custodian-brief.md for activity-core
2026-07-02 11:55:47 +02:00
79fd3406a3 ACTIVITY-WP-0016: finished
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 11:55:07 +02:00
ef9a1a76c2 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-07-02:
  - update .custodian-brief.md for activity-core
2026-07-02 11:54:43 +02:00
0da655979d ACTIVITY-WP-0016: T05 done via live railiance01 proof, T01 cancelled (evidence unrecoverable)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 11:54:04 +02:00
7612112e7e RAIL-BS-WP-0008-T02: bounded top-7 + NDJSON per-item framing in daily-triage Instruction
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 10:44:00 +02:00
6a5321525e chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-07-02:
  - update .custodian-brief.md for activity-core
2026-07-02 02:19:57 +02:00
2f55167215 Add automation inventory surface 2026-07-02 02:15:39 +02:00
ffe10f098e Add automation status surface 2026-07-01 20:12:04 +02:00
3f85274916 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-06-30:
  - update .custodian-brief.md for activity-core
2026-06-30 12:38:50 +02:00
bb14d08212 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-06-30:
  - update .custodian-brief.md for activity-core
2026-06-30 12:36:50 +02:00
92629e7a91 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-06-30:
  - update .custodian-brief.md for activity-core
2026-06-30 01:50:22 +02:00
951ec56f7a chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-06-29:
  - update .custodian-brief.md for activity-core
2026-06-29 13:45:41 +02:00
9440d539c6 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-06-29:
  - update .custodian-brief.md for activity-core
2026-06-29 13:33:21 +02:00
2ff852da29 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-06-29:
  - update .custodian-brief.md for activity-core
2026-06-29 12:57:25 +02:00
30043348f0 Add Core Hub ops evidence sink 2026-06-27 20:34:25 +02:00
18fcce87fe Update daily triage stabilization status 2026-06-27 09:58:47 +02:00
17b787fad0 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-06-27:
  - update .custodian-brief.md for activity-core
2026-06-27 08:07:46 +02:00
6c8cb1b7b6 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-06-27:
  - ACTIVITY-WP-0010-T03: progress → wait
2026-06-27 08:07:42 +02:00
ec66e06066 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-06-27:
  - update .custodian-brief.md for activity-core
2026-06-27 08:00:51 +02:00
919edd98ac chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-06-26:
  - update .custodian-brief.md for activity-core
2026-06-26 18:20:26 +02:00
bf877b7f0d test(ACTIVITY-WP-0016-T05): regression coverage incl. real 06-26 payload + over-depth
Add a test driving the actual captured 2026-06-26 failure payload
(tests/fixtures/wp0016/...partial.json): it now recovers 6+ valid recommendations
and quarantines the truncated tail, where before WP-0016 it discarded the whole run.
Add an over-depth guardrail test. Together with T03/T04 the regression set now covers
truncation, one-bad-item, oversized-string, over-depth, allow-list/injection-shaped,
and happy-path count cap.

In-repo portion of T05 complete; the live railiance01 graceful-degradation smoke is
operator-owned cluster work (deploy-coupled with the T02 bundle changes) and remains
outstanding. Hand-back notes posted to WP-0006-T03 and WP-0010-T04. Full suite: 220
passed, 1 skipped.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 18:18:37 +02:00
9be4ddbdb7 feat(ACTIVITY-WP-0016-T04): producer trust-boundary guardrails + ADR-004
Add ADR-004 documenting the producer trust boundary: untrusted producers (LLM,
agent, human; erroneous and malicious), the trust-but-handle vs verify-and-mitigate
postures, error-locality and quarantine-with-provenance principles, and the concrete
activity-core mechanisms.

Implement producer-agnostic guardrails in executor.py, applied uniformly on the
happy path and the recovery path via _partition_items: structural-type -> schema ->
structural caps (_MAX_DEPTH, _MAX_STRING_LEN) -> reference allow-list -> count cap.
Each quarantine carries a reason. Closes the happy-path maxItems count cap deferred
from T03 (valid 9-item report keeps 7, quarantines 2). Reference allow-list reads
context["known_candidates"] via _allow_list_from_context; inert until a resolver
populates it. SCOPE.md updated (executor bullet + ADR list); no INTENT drift.

New tests: happy-path count cap, oversized-string guardrail, allow-list rejection.
Full suite: 218 passed, 1 skipped.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 18:10:17 +02:00
c5440e8429 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-06-26:
  - update .custodian-brief.md for activity-core
2026-06-26 18:04:07 +02:00
53dc0f6e93 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-06-26:
  - ACTIVITY-WP-0016-T03: progress → done
2026-06-26 18:03:50 +02:00
a70c00a789 feat(ACTIVITY-WP-0016-T03): resilient per-item report recovery with quarantine lane
When the whole-document parse + one retry still fail, report instructions now run
_resilient_report before the total-loss path. A brace/quote-aware scanner
(_extract_object_spans) recovers each recommendation object whether pretty-printed
across many lines or NDJSON one-per-line; a truncated tail gets a best-effort
_try_repair; _partition_items validates each recovered object against the T02 item
schema. Valid items survive (output_validated=True, partial=True), malformed/
over-maxItems items are quarantined with provenance (index, error, raw, reason),
capped at 20. Error locality now matches the unit of work: one bad item costs one
item, not the whole report.

Verified against the real 06-26 shape: 7 valid recommendations + a truncated tail
now recovers all 7 and quarantines the broken tail (previously the whole run was
discarded). Happy-path maxItems top-N enforcement is deferred to T04 (count caps).
Full suite: 215 passed, 1 skipped.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 17:56:28 +02:00
b41b6034ee chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-06-26:
  - update .custodian-brief.md for activity-core
2026-06-26 17:52:46 +02:00
960fb05268 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-06-26:
  - ACTIVITY-WP-0016-T03: todo → progress
2026-06-26 17:52:30 +02:00
b7b0b5bf6e chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-06-26:
  - ACTIVITY-WP-0016-T02: todo → progress
2026-06-26 17:52:29 +02:00
14f76fb6d9 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-06-26:
  - ACTIVITY-WP-0016-T01: todo → wait
2026-06-26 17:52:28 +02:00
caa2608092 chore(consistency): renormalize lifecycle state [auto]
Updated by fix-consistency on 2026-06-26:
  - workplan status: proposed → active
2026-06-26 17:52:28 +02:00
61f278d643 feat(ACTIVITY-WP-0016-T02): strict bounded daily-triage output schema
Replace the accept-anything recommendations.items ({type: object}) with a strict
per-item contract (required [rank, candidate, action, why] + typed wsjf) and a
maxItems:7 hint. Strict item structure is what lets the T03 boundary parser
validate each recommendation independently and quarantine only malformed ones.

maxItems is a producer hint (prompt + llm-connect json_schema + T03 mitigation),
NOT a hard reject — a hard maxItems reject would discard a whole 16-item report,
the blast-radius bug WP-0016 removes. DEPLOY COUPLING: the strict schema is also
consumed by the current whole-doc validator, so it must ship with T03's per-item
quarantine parser; until then it increases whole-doc hard-fails. Prompt + max_tokens
headroom + NDJSON framing are documented as a runtime-bundle handoff.

Updated four tests to the strict contract; the forwarded-schema test now reads the
live schema file instead of hard-coding it. Full suite: 213 passed, 1 skipped.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 17:36:24 +02:00
0e9e18a59a chore(ACTIVITY-WP-0016-T01): record root-cause findings + partial failure fixture
Local analysis of the 2026-06-26 daily-triage validation failure: the unbounded
~1-recommendation-per-workstream list (16 active workstreams; JSON break at char
5268, ~rank 8-9) is the structural cause; both the first attempt and the retry
failed. The exact offending token and finish_reason are unrecoverable from
activity-core data — complete() drops finish_reason/usage, the report sink caps
raw output at 4000 chars (< 5268), and the log preview at 2000. Confirming the
exact token needs llm-connect producer-side logs on railiance01 (operator-owned);
mitigation (T02/T03) is identical regardless. Partial fixture captured.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 15:04:27 +02:00