core-hub/workplans/CORE-WP-0007-haskell-retirement.md
tegwick 3b399d2c94
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 5s
CORE-WP-0007: document stabilization job deployment details
Expand T02 and progress notes with schedule, probes, ActivityDefinition ids,
railiance01 deployment evidence, and cluster State Hub event routing.
2026-07-08 11:21:59 +02:00

195 lines
No EOL
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
id: CORE-WP-0007
type: workplan
title: "Retire Haskell/IHP infrastructure after Core Hub cutover"
domain: infotech
repo: core-hub
status: active
owner: codex
topic_slug: custodian
created: "2026-06-27"
updated: "2026-07-08"
state_hub_workstream_id: "a8d66822-e435-4b1e-ad81-37a298d1795e"
---
# Retire Haskell/IHP infrastructure after Core Hub cutover
Remove the Haskell dependency from the production interaction framework after the replacement is proven.
`CORE-WP-0005` finished 2026-07-03: `hub.coulomb.social` ingress now serves Core
Hub; Inter-Hub compatibility, staging import, dual-run smokes, and production
cutover gates are closed. Haskell retirement no longer waits on migration work —
it waits on a short post-cutover stabilization window, operator approval to
retire the Inter-Hub rollback deployment, and the four tasks below.
## Retire Probe Repo
```task
id: CORE-WP-0007-T01
status: done
priority: medium
state_hub_task_id: "d3a494a3-dc23-491f-af32-1d19120b3aae"
```
Rename or archive `ihp-railiance-probe` (`coulomb/ihp-railiance-probe`),
preserving `INTENT.md` and `DeploymentBlueprint.md` notes about the failed
IHP/GHC/Nix build path. `IRP-WP-0001` is already `done`; this task is
unblocked and can proceed independently of T02T04.
## Rename Production Inter-Hub Repo
```task
id: CORE-WP-0007-T02
status: wait
priority: high
state_hub_task_id: "16eb7ce3-b574-4667-a189-c14ff5d0502b"
```
Rename `inter-hub` to `inter-hub-haskell` after operator stabilization sign-off
and approval to retire the Inter-Hub rollback path. Compatibility, migration,
and production cutover gates from `CORE-WP-0005` are satisfied; the Inter-Hub
k8s deployment in namespace `inter-hub` still runs as rollback-only (ingress
already moved — see `k8s/railiance-production/README.md`).
Stabilization evidence is collected automatically through 2026-07-10 by the
scheduled `core_hub_stabilization_check` / `core_hub_stabilization_closeout`
jobs (see runbook `docs/deployment/stabilization-signoff.md`). T02 unblocks
when the closeout passes (`operator_signoff_needed=true`) and the operator
records retirement approval in State Hub.
Scope when unblocked: Forgejo repo rename, registry/Helm/CI path updates in
`railiance-apps` and `railiance-forge`, and eventual scale-down of the
rollback deployment after the stabilization window closes.
## Decommission Haskell Build Lane
```task
id: CORE-WP-0007-T03
status: wait
priority: medium
state_hub_task_id: "bea9943c-916f-402f-a6d9-7907bb48137c"
```
Retire or park haskelseed runner labels, the `haskell-build` VM profile,
IHP/GHC/Nix/devenv docs, and build-machine workplans after T02 completes and no
active repo still needs Haskell image builds. Primary touchpoints:
`railiance-forge` runner substrate docs, `sand-boxer` `profile.vm-haskell-build`,
and `ops-bridge` haskelseed tunnel notes.
## Update Cross-Repo References
```task
id: CORE-WP-0007-T04
status: wait
priority: medium
state_hub_task_id: "ed7f8e01-5305-465c-8bfc-04bc47bfdf40"
```
After T02, update docs and workplans in consuming repos so production Inter-Hub
references point to Core Hub and historical Haskell context explicitly names
`inter-hub-haskell`. Known stale surfaces: `ops-hub` INTENT/SCOPE/README and
readiness docs; `activity-core` railiance probes and sink vocabulary;
`the-custodian` service catalog and drain plans. Core Hub specs and migration
fixtures already use `inter-hub-haskell` as the bundle `source` name.
## Progress 2026-07-07 — upstream gate cleared
`CORE-WP-0005` archived (`260703-CORE-WP-0005-data-migration-and-cutover.md`).
Production cutover executed 2026-07-03: Core Hub serves `hub.coulomb.social`;
post-flip reconcile import was idempotent (0 created / 28 updated / 0 errors);
rollback remains one kubectl command while the Inter-Hub deployment stays
running through stabilization.
Revised sequencing:
1. **T01** — unblocked; archive `ihp-railiance-probe` first (low risk).
2. **T02** — cutover prerequisites met; blocked on operator stabilization
sign-off and approval to retire the Inter-Hub rollback deployment.
3. **T03** — blocked on T02 and confirmation that no repo still schedules
Haskell builds through haskelseed.
4. **T04** — blocked on T02 so references use the final repo name.
Related finished workplans: `CORE-WP-0004` (compatibility smokes),
`CORE-WP-0005` (migration/cutover), `CORE-WP-0008` (deployed ops evidence).
## Completion 2026-07-07 — T01 probe repo archived
`ihp-railiance-probe` retired in-repo:
- `README.md` marks the repo archived and points to preserved docs
- `INTENT.md` and `SCOPE.md` updated with retirement context
- `IRP-WP-0001` moved to
`workplans/archived/260707-IRP-WP-0001-pipeline-validation.md` (`status:
archived`)
- Gitea/Forgejo CI workflows switched to `workflow_dispatch` only (no push
triggers)
Forgejo repo archived on `gitea.coulomb.social` (2026-07-07); git history and
diagnostic docs remain available read-only.
## Progress 2026-07-07 — stabilization job live on railiance01
Post-cutover stabilization checks for T02 operator sign-off are implemented and
deployed. Runbook: `docs/deployment/stabilization-signoff.md`.
### Window and schedule
| Item | Value |
| --- | --- |
| Window start | 2026-07-03 (production cutover) |
| Window end | 2026-07-10T17:35:00Z |
| Daily check | 09:00 Europe/Berlin |
| Closeout | one-shot at window end |
Runs outside the window record `skipped` with `reason=outside_stabilization_window`.
### Automated checks (`core-hub` / `stabilization_check`)
| Probe | Expected |
| --- | --- |
| `GET /healthz` | 200 |
| `GET /readyz` | 200 |
| `GET /api/v2/widget-types` | 200, count ≥ 26 |
| `GET /api/v2/hubs` (unauthenticated) | 401 |
Closeout sets `operator_signoff_needed=true` when `overall_pass=true`.
### Activity definitions (canonical in core-hub)
| Job | ActivityDefinition id | State Hub `event_type` |
| --- | --- | --- |
| Daily | `b4c8e2f1-6a3d-4e5b-9f0c-2d7e8a1b3c4d` | `core_hub_stabilization_check` |
| Closeout | `c5d9f3a2-7b4e-5f6c-0a1d-3e8f9b2c4d5e` | `core_hub_stabilization_closeout` |
Files: `activity-definitions/core-hub-stabilization-{daily,closeout}.md`, projected
into `activity-core/k8s/railiance/20-runtime.yaml`. Progress events bind to
workstream `a8d66822…` / task `16eb7ce3…` (T02).
### Manual companion
```bash
make stabilization-check # scripts/core_hub_stabilization_check.sh
```
Optional: `make deployed-smoke` with `CORE_HUB_OPERATOR_TOKEN_FILE` for full
bootstrap evidence; `ops-hub` `make interhub-gate` against `hub.coulomb.social`.
### activity-core deployment (railiance01)
- Image: `activity-core:railiance01-prod` rebuilt and imported into k3s
- Resolver: `activity-core` `core-hub` context adapter (`stabilization_check`)
- Evidence sink fix: `core-hub` sources now post State Hub progress
(`activity-core` `726da05`)
- Deployed: `actcore-api`, `actcore-worker`, `actcore-event-router` rolled out;
`actcore-sync` registered both schedules on Temporal
- First live event (cluster State Hub
`http://state-hub.state-hub.svc.cluster.local:8000`, 2026-07-07T22:43:55Z):
`Core Hub stabilization daily: pass; base=https://hub.coulomb.social;
widget_types=26/26`
Note: activity-core posts to the **cluster** State Hub on railiance01, not the
workstation fallback at `127.0.0.1:8000`. Query via `state-hub-primary` tunnel or
from inside the `activity-core` pod when reviewing evidence.