Commit graph

19 commits

Author SHA1 Message Date
f41cf14977 feat(legacy-meter): schedule 8h capture activity on railiance01
All checks were successful
CI Smoke / host-smoke (push) Successful in 1s
CI Smoke / container-smoke (push) Successful in 49s
Build and Publish Container Image / build-and-push (push) Successful in 2m50s
Add legacy-meter-8h-capture cron (0 */8 * * * UTC), pass hours through the
state-hub resolver, and label progress summaries by window size.
2026-07-09 09:29:41 +02:00
f314bfc7f2 Use /workplans routes in state_hub context resolver
Replace /workstreams/workplan-index and per-workplan fetches with /workplans/index
and /workplans/{id}; task list queries use workplan_id param.
2026-07-09 00:29:25 +02:00
efa361541b STATE-WP-0069: schedule weekly legacy-meter review monitoring
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 36s
Add legacy_meter_weekly_review state-hub resolver query, weekly activity
definition (Mon 08:30 Berlin), Railiance runtime projection, and progress
sink posting for STATE-WP-0069 retirement gating.
2026-07-08 20:55:06 +02:00
69fe69041f CUST-WP-0055 T05: workplan-first progress scope in sinks and resolvers
Prefer workplan_id in State Hub progress writes while dual-writing
workstream_id for wire-compat. Extend schedule_health, evidence/report
sinks, phase5 checks, k8s triage prose, and SCOPE terminology.
2026-07-08 20:00:35 +02:00
7947961ed4 refactor(terminology): workplan-first state hub resolver internals (CUST-WP-0055 T05)
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 8s
Build and Publish Container Image / build-and-push (push) Successful in 1m1s
Rename open-workplan digest helpers, expose open_workplans alongside legacy
open_workstreams in daily triage digests, and update custodian runtime prompt
prose while preserving wire-compat API paths and query params.
2026-07-08 16:41:28 +02:00
00917696dd Add todo_md_staleness State Hub context resolver
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 13s
Build and Publish Container Image / build-and-push (push) Successful in 1m1s
Supports daily TODO.md stale-review ActivityDefinition via
GET /repos/todo-md-staleness.
2026-07-08 13:19:06 +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
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
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
faf5d60ae8 feat(STATE-WP-0064): enable cluster consistency sweep schedule
Enable the definition in k8s projection and pass activity-core source tags.
2026-06-21 21:46:43 +02:00
3a981cc98f feat(STATE-WP-0064): wire consistency_sweep_remote_all state-hub query
Add POST /consistency/sweep/remote-all resolver support with a 330s
timeout and k8s projection for the consistency sweep definition.
2026-06-21 20:19:22 +02:00
23e2316dff Harden coding retro resolver selection 2026-06-18 15:13:08 +02:00
14b2d40eb7 Implement weekly coding retro schedule 2026-06-07 20:58:34 +02:00
20d4f26166 Implement post-triage operational hardening 2026-06-04 12:15:07 +02:00
a8d3cc2782 Fix repo_sbom_status resolver — close ADHOC-2026-06-01-T01
The state-hub resolver was calling GET /sbom/status?repo={slug}, which State
Hub does not expose. Real SBOM routes are /sbom/, /sbom/{slug},
/sbom/snapshots/, /sbom/snapshots/{id}, /sbom/ingest/, /sbom/report/licences/.
The weekly-sbom-staleness ActivityDefinition was passing params {repos: all}
and the resolver was reading params.get("repo_slug", ""), so the URL
collapsed to /sbom/status?repo= and 404'd. _fetch_json swallowed the error,
the rule context.repos.sbom_age_days > 30 evaluated against {} and never
matched, and the weekly SBOM check has been a silent no-op for as long as
the route mismatch has existed.

Resolver now supports two modes selected by params:
- single-repo: {repo_slug: foo} → GET /sbom/{foo}, returns
  {repo_slug, last_sbom_at, sbom_age_days, has_sbom}
- bulk: {repos: all} → GET /repos/, computes per-repo age, returns the
  worst repo's fields hoisted to the top of the result alongside
  stale_count, total_count, worst_* fields, and the full per-repo list

Never-scanned repos get a 99999 sentinel age so threshold rules treat
them as very stale without forcing the rule to special-case None.

Hoisting the worst entry to the top preserves the existing rule
expression context.repos.sbom_age_days > 30 (and target_repo:
context.repos.repo_slug, though that field is a separate interpolation
gap tracked as ADHOC-2026-06-01-T02). The integration tests'
aspirational per-repo iteration model is left intact.

Live validation against State Hub on 2026-06-01:
- single: activity-core → 36 days since 2026-04-26 ingest
- bulk: 48 repos total, 46 stale (>30d), worst is info-tech-canon (never
  scanned), rule expression evaluates True

Tests: 120 passed, 1 skipped.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-02 03:31:56 +02:00
ca6d80ec07 Enable hourly RecentlyOnScope rollout 2026-05-23 02:51:54 +02:00
5055f3eaca Add State Hub RecentlyOnScope invocation 2026-05-22 16:14:10 +02:00
6cb0718e90 Add curated daily triage digest 2026-05-19 19:09:21 +02:00
0e7084207e Extend State Hub context resolver for daily triage 2026-05-19 15:59:12 +02:00