Schedule Core Hub stabilization checks for T02 sign-off
Add daily and closeout ActivityDefinitions, a manual stabilization script, runbook, and workplan notes for the 2026-07-03 to 2026-07-10 window.
This commit is contained in:
parent
b042a7077a
commit
e3f01a46e7
6 changed files with 236 additions and 2 deletions
5
Makefile
5
Makefile
|
|
@ -1,4 +1,4 @@
|
||||||
.PHONY: install test lint run openapi migrate-validate deployed-smoke operator-cli staging-profile-check container-build playwright-install visual-check
|
.PHONY: install test lint run openapi migrate-validate deployed-smoke stabilization-check operator-cli staging-profile-check container-build playwright-install visual-check
|
||||||
|
|
||||||
UV ?= /home/worsch/.local/bin/uv
|
UV ?= /home/worsch/.local/bin/uv
|
||||||
PYTHONPATH ?= src
|
PYTHONPATH ?= src
|
||||||
|
|
@ -28,6 +28,9 @@ migrate-validate:
|
||||||
deployed-smoke:
|
deployed-smoke:
|
||||||
PYTHONPATH=$(PYTHONPATH) $(UV) run --extra dev python scripts/core_hub_deployed_smoke.py
|
PYTHONPATH=$(PYTHONPATH) $(UV) run --extra dev python scripts/core_hub_deployed_smoke.py
|
||||||
|
|
||||||
|
stabilization-check:
|
||||||
|
bash scripts/core_hub_stabilization_check.sh
|
||||||
|
|
||||||
operator-cli:
|
operator-cli:
|
||||||
PYTHONPATH=$(PYTHONPATH) $(UV) run --extra dev python scripts/core_hub_cli.py $(CLI_ARGS)
|
PYTHONPATH=$(PYTHONPATH) $(UV) run --extra dev python scripts/core_hub_cli.py $(CLI_ARGS)
|
||||||
|
|
||||||
|
|
|
||||||
47
activity-definitions/core-hub-stabilization-closeout.md
Normal file
47
activity-definitions/core-hub-stabilization-closeout.md
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
---
|
||||||
|
id: "c5d9f3a2-7b4e-5f6c-0a1d-3e8f9b2c4d5e"
|
||||||
|
name: "Core Hub Stabilization Closeout Check"
|
||||||
|
type: activity-definition
|
||||||
|
version: "1.0"
|
||||||
|
enabled: true
|
||||||
|
owner: core-hub
|
||||||
|
governance: core-hub
|
||||||
|
status: active
|
||||||
|
created: "2026-07-07"
|
||||||
|
trigger:
|
||||||
|
type: scheduled
|
||||||
|
at: "2026-07-10T17:35:00+00:00"
|
||||||
|
timezone: UTC
|
||||||
|
context_sources:
|
||||||
|
- type: core-hub
|
||||||
|
query: stabilization_check
|
||||||
|
required: true
|
||||||
|
params:
|
||||||
|
source: activity-core
|
||||||
|
closeout: true
|
||||||
|
base_url: "https://hub.coulomb.social"
|
||||||
|
window_start: "2026-07-03T00:00:00+00:00"
|
||||||
|
window_end: "2026-07-10T17:35:00+00:00"
|
||||||
|
min_widget_types: 26
|
||||||
|
evidence_sinks:
|
||||||
|
- type: state-hub-progress
|
||||||
|
event_type: core_hub_stabilization_closeout
|
||||||
|
author: activity-core
|
||||||
|
workstream_id: a8d66822-e435-4b1e-ad81-37a298d1795e
|
||||||
|
task_id: 16eb7ce3-b574-4667-a189-c14ff5d0502b
|
||||||
|
bind_to: context.core_hub_stabilization_check
|
||||||
|
---
|
||||||
|
|
||||||
|
# ActivityDefinition: Core Hub Stabilization Closeout Check
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
One-shot closeout gate at the end of the Core Hub stabilization window. When
|
||||||
|
`overall_pass` is true, the result sets `operator_signoff_needed=true` so the
|
||||||
|
operator can approve `CORE-WP-0007-T02` (Inter-Hub rename / rollback retirement).
|
||||||
|
|
||||||
|
## Output Contract
|
||||||
|
|
||||||
|
- one State Hub progress event with `event_type: core_hub_stabilization_closeout`
|
||||||
|
- fails the activity run when closeout checks do not pass
|
||||||
|
- operator records the retirement decision separately in State Hub
|
||||||
55
activity-definitions/core-hub-stabilization-daily.md
Normal file
55
activity-definitions/core-hub-stabilization-daily.md
Normal file
|
|
@ -0,0 +1,55 @@
|
||||||
|
---
|
||||||
|
id: "b4c8e2f1-6a3d-4e5b-9f0c-2d7e8a1b3c4d"
|
||||||
|
name: "Core Hub Stabilization Daily Check"
|
||||||
|
type: activity-definition
|
||||||
|
version: "1.0"
|
||||||
|
enabled: true
|
||||||
|
owner: core-hub
|
||||||
|
governance: core-hub
|
||||||
|
status: active
|
||||||
|
created: "2026-07-07"
|
||||||
|
trigger:
|
||||||
|
type: cron
|
||||||
|
cron_expression: "0 9 * * *"
|
||||||
|
timezone: Europe/Berlin
|
||||||
|
misfire_policy: skip
|
||||||
|
context_sources:
|
||||||
|
- type: core-hub
|
||||||
|
query: stabilization_check
|
||||||
|
required: true
|
||||||
|
params:
|
||||||
|
source: activity-core
|
||||||
|
closeout: false
|
||||||
|
base_url: "https://hub.coulomb.social"
|
||||||
|
window_start: "2026-07-03T00:00:00+00:00"
|
||||||
|
window_end: "2026-07-10T17:35:00+00:00"
|
||||||
|
min_widget_types: 26
|
||||||
|
evidence_sinks:
|
||||||
|
- type: state-hub-progress
|
||||||
|
event_type: core_hub_stabilization_check
|
||||||
|
author: activity-core
|
||||||
|
workstream_id: a8d66822-e435-4b1e-ad81-37a298d1795e
|
||||||
|
task_id: 16eb7ce3-b574-4667-a189-c14ff5d0502b
|
||||||
|
bind_to: context.core_hub_stabilization_check
|
||||||
|
---
|
||||||
|
|
||||||
|
# ActivityDefinition: Core Hub Stabilization Daily Check
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
Scheduled hub-visible health gate for `CORE-WP-0007-T02` during the post-cutover
|
||||||
|
stabilization window (2026-07-03 → 2026-07-10). Complements the manual
|
||||||
|
`scripts/core_hub_stabilization_check.sh` script with fleet-side evidence in
|
||||||
|
State Hub progress.
|
||||||
|
|
||||||
|
## Trigger
|
||||||
|
|
||||||
|
Daily at 09:00 Europe/Berlin while the stabilization window is open. Runs
|
||||||
|
outside the window are recorded as `skipped` with
|
||||||
|
`reason=outside_stabilization_window`.
|
||||||
|
|
||||||
|
## Output Contract
|
||||||
|
|
||||||
|
- one State Hub progress event with `event_type: core_hub_stabilization_check`
|
||||||
|
- compact pass/fail detail for public production surface checks
|
||||||
|
- no LLM call and no direct workplan edits
|
||||||
65
docs/deployment/stabilization-signoff.md
Normal file
65
docs/deployment/stabilization-signoff.md
Normal file
|
|
@ -0,0 +1,65 @@
|
||||||
|
# Core Hub production stabilization
|
||||||
|
|
||||||
|
Post-cutover checks for `CORE-WP-0007-T02` operator sign-off after
|
||||||
|
`CORE-WP-0005` moved `hub.coulomb.social` to Core Hub (2026-07-03).
|
||||||
|
|
||||||
|
## Window
|
||||||
|
|
||||||
|
- **Start:** 2026-07-03 (production cutover)
|
||||||
|
- **End:** 2026-07-10T17:35:00Z (closeout job)
|
||||||
|
- **Daily job:** 09:00 Europe/Berlin via activity-core
|
||||||
|
|
||||||
|
## Automated checks
|
||||||
|
|
||||||
|
The `core-hub` context resolver query `stabilization_check` verifies:
|
||||||
|
|
||||||
|
| Check | Expected |
|
||||||
|
| --- | --- |
|
||||||
|
| `GET /healthz` | 200 |
|
||||||
|
| `GET /readyz` | 200 |
|
||||||
|
| `GET /api/v2/widget-types` | 200, count ≥ 26 |
|
||||||
|
| `GET /api/v2/hubs` (unauthenticated) | 401 |
|
||||||
|
|
||||||
|
State Hub progress events:
|
||||||
|
|
||||||
|
- `core_hub_stabilization_check` — daily while the window is open
|
||||||
|
- `core_hub_stabilization_closeout` — one-shot at window end
|
||||||
|
|
||||||
|
Activity definitions live in `activity-definitions/` and are projected into
|
||||||
|
`activity-core/k8s/railiance/20-runtime.yaml`.
|
||||||
|
|
||||||
|
## Manual companion script
|
||||||
|
|
||||||
|
```bash
|
||||||
|
CORE_HUB_BASE_URL=https://hub.coulomb.social \
|
||||||
|
STATE_HUB_URL=http://127.0.0.1:8000 \
|
||||||
|
./scripts/core_hub_stabilization_check.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Optional full bootstrap smoke (needs approved operator token):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
CORE_HUB_BASE_URL=https://hub.coulomb.social \
|
||||||
|
CORE_HUB_OPERATOR_TOKEN_FILE=/secure/path/to/token \
|
||||||
|
make deployed-smoke
|
||||||
|
```
|
||||||
|
|
||||||
|
## Operator sign-off for T02
|
||||||
|
|
||||||
|
Sign-off is a human decision recorded in State Hub after:
|
||||||
|
|
||||||
|
1. Daily checks (or closeout) show `overall_pass=true` through the window
|
||||||
|
2. No rollback was invoked since cutover
|
||||||
|
3. Operator approves retiring the Inter-Hub k8s rollback deployment
|
||||||
|
|
||||||
|
Post a progress note or decision referencing workstream
|
||||||
|
`a8d66822-e435-4b1e-ad81-37a298d1795e` / task `16eb7ce3-b574-4667-a189-c14ff5d0502b`,
|
||||||
|
then proceed with `CORE-WP-0007-T02`.
|
||||||
|
|
||||||
|
## Deploy / enable
|
||||||
|
|
||||||
|
1. Rebuild and deploy `activity-core` on railiance01 with the new `core-hub`
|
||||||
|
context resolver.
|
||||||
|
2. Apply the updated `activity-core/k8s/railiance/20-runtime.yaml` ConfigMap
|
||||||
|
projection for the two new ActivityDefinitions.
|
||||||
|
3. Confirm events appear at `GET /progress/?event_type=core_hub_stabilization_check`.
|
||||||
49
scripts/core_hub_stabilization_check.sh
Executable file
49
scripts/core_hub_stabilization_check.sh
Executable file
|
|
@ -0,0 +1,49 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# Core Hub production stabilization snapshot for CORE-WP-0007-T02.
|
||||||
|
# Complements the scheduled activity-core job (core_hub_stabilization_check).
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
BASE_URL="${CORE_HUB_BASE_URL:-https://hub.coulomb.social}"
|
||||||
|
STATE_HUB_URL="${STATE_HUB_URL:-http://127.0.0.1:8000}"
|
||||||
|
|
||||||
|
echo "=== Core Hub public surface (${BASE_URL}) ==="
|
||||||
|
for path in /healthz /readyz /api/v2/widget-types; do
|
||||||
|
code=$(curl -sS -o /dev/null -w '%{http_code}' "${BASE_URL}${path}")
|
||||||
|
echo "${path} -> ${code}"
|
||||||
|
done
|
||||||
|
hubs_code=$(curl -sS -o /dev/null -w '%{http_code}' "${BASE_URL}/api/v2/hubs")
|
||||||
|
echo "/api/v2/hubs -> ${hubs_code} (expect 401 hardened contract)"
|
||||||
|
widget_count=$(curl -fsS "${BASE_URL}/api/v2/widget-types" | python3 -c "
|
||||||
|
import json,sys
|
||||||
|
payload=json.load(sys.stdin)
|
||||||
|
items=payload if isinstance(payload,list) else payload.get('data',[])
|
||||||
|
print(len(items))
|
||||||
|
")
|
||||||
|
echo "widget_types count=${widget_count} (expect >= 26)"
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "=== optional deployed smoke (needs approved token) ==="
|
||||||
|
if [[ -n "${CORE_HUB_OPERATOR_TOKEN_FILE:-}" && -f "${CORE_HUB_OPERATOR_TOKEN_FILE}" ]]; then
|
||||||
|
make deployed-smoke
|
||||||
|
else
|
||||||
|
echo "skip: set CORE_HUB_OPERATOR_TOKEN_FILE for full bootstrap smoke"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "=== optional ops-hub gate probe ==="
|
||||||
|
if command -v make >/dev/null && [[ -d "${HOME}/ops-hub" ]]; then
|
||||||
|
(cd "${HOME}/ops-hub" && make interhub-gate IHUB_BASE="${BASE_URL}") || true
|
||||||
|
else
|
||||||
|
echo "skip: ops-hub checkout unavailable"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "=== last 6 core_hub_stabilization_check events ==="
|
||||||
|
curl -fsS "${STATE_HUB_URL}/progress/?event_type=core_hub_stabilization_check&limit=6" | python3 -c "
|
||||||
|
import json,sys
|
||||||
|
for e in json.load(sys.stdin):
|
||||||
|
d=e.get('detail') or {}
|
||||||
|
probe=d.get('probe') or {}
|
||||||
|
print(e['created_at'][:19], (e.get('summary') or '')[:72],
|
||||||
|
'pass='+str(probe.get('overall_pass')))
|
||||||
|
" 2>/dev/null || echo "no stabilization events yet"
|
||||||
|
|
@ -121,4 +121,19 @@ Related finished workplans: `CORE-WP-0004` (compatibility smokes),
|
||||||
triggers)
|
triggers)
|
||||||
|
|
||||||
Forgejo repo archived on `gitea.coulomb.social` (2026-07-07); git history and
|
Forgejo repo archived on `gitea.coulomb.social` (2026-07-07); git history and
|
||||||
diagnostic docs remain available read-only.
|
diagnostic docs remain available read-only.
|
||||||
|
|
||||||
|
|
||||||
|
## Progress 2026-07-07 — stabilization job scheduled
|
||||||
|
|
||||||
|
Post-cutover stabilization checks for T02 operator sign-off:
|
||||||
|
|
||||||
|
- `activity-core` `core-hub` context resolver: `stabilization_check`
|
||||||
|
- Activity definitions: `activity-definitions/core-hub-stabilization-{daily,closeout}.md`
|
||||||
|
- Manual script: `scripts/core_hub_stabilization_check.sh` (`make stabilization-check`)
|
||||||
|
- Runbook: `docs/deployment/stabilization-signoff.md`
|
||||||
|
- Window: 2026-07-03 → 2026-07-10 (daily 09:00 Europe/Berlin; closeout 2026-07-10T17:35Z)
|
||||||
|
- State Hub events: `core_hub_stabilization_check`, `core_hub_stabilization_closeout`
|
||||||
|
|
||||||
|
Requires activity-core image rebuild + k8s ConfigMap apply on railiance01 before
|
||||||
|
the schedule is live.
|
||||||
Loading…
Add table
Add a link
Reference in a new issue