68 Commits

Author SHA1 Message Date
jonathan 04b86c517f Merge pull request 'app: minimal root-layout shell - theme + env-config session providers (M3 slice 1, coreci-chat#16)' (#17) from po/m3-slice-1-root-shell into main
ci / test-pglite (PGlite, default) (push) Successful in 3m24s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Successful in 1m32s
Reviewed-on: #17
2026-11-05 20:39:32 +00:00
coreci-chat-po 754222083c feat(app): minimal root-layout shell - theme + env-config session providers
ci / test-pglite (PGlite, default) (push) Successful in 3m53s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Successful in 2m21s
ci / test-pglite (PGlite, default) (pull_request) Successful in 3m44s
ci / test-postgres (Postgres 16, G-022 RLS) (pull_request) Successful in 2m3s
M3 slice 1 (coreci-chat#16): wrap the root layout's children with a theme
provider (light/dark/system, persisted, no external dep) and a session
wrapper over @coreci/auth's session lane (identity via GET /api/me, client
config from NEXT_PUBLIC_API_BASE_URL, default same-origin). Additive only:
no redirects or gates, SSR pages keep server-side session resolution, and
no boot-time DDL (deploy owns DDL, app boots schema-check only). Pure
logic extracted to app/shell/_lib.ts + unit tests, repo Wave-J convention.
2026-11-03 18:57:24 +00:00
jonathan bd3a7a5c89 Merge pull request 'ci: build the control-plane app in the gate (next build) + one-step coverage-upload tolerance (coreci-chat#10, coreci-chat#1)' (#15) from po/ci-app-build-step into main
ci / test-pglite (PGlite, default) (push) Successful in 3m19s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Successful in 1m56s
Reviewed-on: #15
2026-10-31 07:35:13 +00:00
coreci-chat-po 410e62bd30 fix(app): teach the bundler the repo's .js -> .ts import convention
ci / test-pglite (PGlite, default) (push) Successful in 3m16s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Successful in 1m55s
ci / test-pglite (PGlite, default) (pull_request) Successful in 3m12s
ci / test-postgres (Postgres 16, G-022 RLS) (pull_request) Successful in 1m58s
The control-plane app follows the repo-wide ESM convention - a './x.js'
specifier for a './x.ts' source - in all 79 of its relative imports.
TypeScript resolves that (moduleResolution: bundler), webpack does not, so
the new `next build` gate step failed with "Module not found: Can't resolve
'../../../../lib/db.js'" on the first app build this repo ever ran.

resolve.extensionAlias maps a '.js' request to the '.ts'/'.tsx' source
behind it, so the bundler honours the same convention the type-checker and
the packages already do. One resolver-level change, no import churn.

Evidence: run 69747, job 72065 - the app-build step fails to compile with
5 module-not-found errors across 4 route files.
2026-10-31 01:14:05 +00:00
coreci-chat-po b17e009dd5 fix(control-plane): drop the phantom @coreci/audit from transpilePackages
ci / test-pglite (PGlite, default) (push) Failing after 1m16s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Successful in 1m57s
ci / test-pglite (PGlite, default) (pull_request) Failing after 1m18s
ci / test-postgres (Postgres 16, G-022 RLS) (pull_request) Successful in 1m57s
`@coreci/audit` names a package that does not exist in this repo: the audit
code ships as @coreci/db/audit (packages/db/src/audit.ts, exported through
packages/db's exports map) and @coreci/db is already in this list. Measured on
the whole tree at main - 354 blobs - the only occurrence of the string
"coreci/audit" in the repository is this line. Next.js resolves every
transpilePackages entry at build time, so the phantom is a build-time failure
waiting to happen the moment the app is built in CI - which is what this branch
adds. Removing it costs nothing: no import anywhere references it.
2026-10-31 00:27:32 +00:00
coreci-chat-po a77b2dc9c2 ci: tolerate the coverage upload leg alone - the runner's artifact endpoint is refused (coreci-chat#1)
ci / test-pglite (PGlite, default) (push) Failing after 1m19s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Successful in 1m57s
The artifact endpoint the runner hands the job answers ECONNREFUSED from the
shared pool - the cache restore warns with the identical text and the identical
hint, so it is one runner value behind both. That reddens the pglite job on its
LAST step and nothing else, which is why "both jobs GREEN" has never been
reachable on this lane.

This adds continue-on-error to ONE step: the pglite coverage upload. The
postgres job runs no coverage step, so its upload matches no files and never
calls the endpoint - it needs no tolerance. Every code step in both jobs still
gates, and the app-build step in this branch still gates.

This is @coreci-cpo's scope call, asked on coreci-chat#1: the merge of this
merge request is the approval of that one-step tolerance.
2026-10-31 00:27:31 +00:00
coreci-chat-po a86a801784 ci: build the control-plane app in the gate (next build) - the app build was never machine-verified (coreci-chat#10)
ci / test-pglite (PGlite, default) (push) Failing after 1m3s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Successful in 1m51s
The M2 acceptance gate requires both jobs GREEN, but no step in either job ran
`next build`: the workflow builds the eight library packages and typechecks and
lints the app, so the App Router tree itself was never compiled by a machine.
This adds the build as a gate step, after the package build and the @coreci/mcp
dist build, because the app resolves @coreci/db, @coreci/auth, @coreci/secrets
and @coreci/mcp through their published dist/*.d.ts.

coreci-chat#10 closes on a green app build on main.
2026-10-31 00:27:25 +00:00
jonathan 74902f21de Merge pull request 'fix(ci): quote the 7 step names that start with "[" — the gate file was invalid YAML, so no run could ever be created (coreci-chat#1)' (#9) from po/ci-fix-invalid-workflow-yaml into main
ci / test-pglite (PGlite, default) (push) Failing after 2m30s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Successful in 2m0s
Reviewed-on: #9
2026-10-27 22:38:40 +00:00
coreci-chat-po f8a36b9e29 test(db): cover the tenant-scope pinning (coreci-chat#14)
ci / test-pglite (PGlite, default) (push) Failing after 1m48s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Successful in 1m33s
ci / test-pglite (PGlite, default) (pull_request) Failing after 1m48s
ci / test-postgres (Postgres 16, G-022 RLS) (pull_request) Successful in 1m34s
2026-10-27 08:36:20 +00:00
coreci-chat-po 41566a1987 fix(db): make the R-009 pen test isolation-proof against the shared CI database
ci / test-pglite (PGlite, default) (push) Failing after 1m47s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Successful in 1m32s
ci / test-pglite (PGlite, default) (pull_request) Failing after 1m48s
ci / test-postgres (Postgres 16, G-022 RLS) (pull_request) Successful in 1m33s
2026-10-27 08:33:16 +00:00
coreci-chat-po 063cf85248 test(db): cover the tenant-scope pinning (coreci-chat#14)
ci / test-pglite (PGlite, default) (push) Failing after 1m48s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Failing after 1m33s
ci / test-pglite (PGlite, default) (pull_request) Failing after 1m48s
ci / test-postgres (Postgres 16, G-022 RLS) (pull_request) Failing after 1m32s
2026-10-27 08:32:51 +00:00
coreci-chat-po cf098f2b9d fix(db): pin the tenant scope to one connection (coreci-chat#14)
ci / test-pglite (PGlite, default) (push) Failing after 1m49s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Failing after 1m34s
ci / test-pglite (PGlite, default) (pull_request) Failing after 1m49s
ci / test-postgres (Postgres 16, G-022 RLS) (pull_request) Failing after 1m34s
2026-10-27 08:32:18 +00:00
coreci-chat-po 53532fbdb5 fix(db): pin the tenant scope to one connection (coreci-chat#14)
ci / test-pglite (PGlite, default) (push) Failing after 1m50s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Failing after 1m32s
ci / test-pglite (PGlite, default) (pull_request) Failing after 1m50s
ci / test-postgres (Postgres 16, G-022 RLS) (pull_request) Failing after 1m33s
2026-10-27 08:32:00 +00:00
coreci-chat-po d9da54b3bf fix(db): pin the tenant scope to one connection (coreci-chat#14)
ci / test-pglite (PGlite, default) (push) Failing after 1m50s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Failing after 1m33s
ci / test-pglite (PGlite, default) (pull_request) Failing after 1m50s
ci / test-postgres (Postgres 16, G-022 RLS) (pull_request) Failing after 1m35s
2026-10-27 08:31:45 +00:00
coreci-chat-po db158255c0 fix(db): one DROP+CREATE per policy (drop the duplicated targets block) (coreci-chat#13)
ci / test-pglite (PGlite, default) (push) Failing after 1m50s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Failing after 1m33s
ci / test-pglite (PGlite, default) (pull_request) Failing after 1m51s
ci / test-postgres (Postgres 16, G-022 RLS) (pull_request) Failing after 1m31s
2026-10-27 06:58:49 +00:00
coreci-chat-po 1c75282736 fix(test): add back the tenant-scoped DELETE that wipes mcp_adapters (coreci-chat#12)
ci / test-pglite (PGlite, default) (push) Failing after 1m51s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Failing after 1m34s
2026-10-27 06:58:48 +00:00
coreci-chat-po 05df13bf55 fix(test): wipe mcp_adapters with a tenant-scoped DELETE, not an ALTER (coreci-chat#12)
ci / test-pglite (PGlite, default) (push) Failing after 1m11s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Failing after 1m24s
ci / test-pglite (PGlite, default) (pull_request) Failing after 1m10s
ci / test-postgres (Postgres 16, G-022 RLS) (pull_request) Failing after 1m23s
2026-10-27 06:58:14 +00:00
coreci-chat-po 68139ea307 fix(auth): resolve the tenant membership inside the tenant scope (coreci-chat#13)
ci / test-pglite (PGlite, default) (push) Failing after 1m50s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Failing after 1m24s
ci / test-pglite (PGlite, default) (pull_request) Failing after 1m49s
ci / test-postgres (Postgres 16, G-022 RLS) (pull_request) Failing after 1m24s
2026-10-27 06:58:13 +00:00
coreci-chat-po 9b4bbd01af fix(db): harden the RLS tenant scope against an empty app.tenant_id (coreci-chat#13)
ci / test-pglite (PGlite, default) (push) Failing after 1m50s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Failing after 1m22s
ci / test-pglite (PGlite, default) (pull_request) Failing after 1m49s
ci / test-postgres (Postgres 16, G-022 RLS) (pull_request) Failing after 1m22s
2026-10-27 06:57:51 +00:00
coreci-chat-po 311dfe5ac0 fix(app): add the App Router root layout so the control-plane app can build (coreci-chat#10)
ci / test-pglite (PGlite, default) (push) Failing after 1m51s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Failing after 1m24s
ci / test-pglite (PGlite, default) (pull_request) Failing after 1m50s
ci / test-postgres (Postgres 16, G-022 RLS) (pull_request) Failing after 1m25s
2026-10-27 05:54:02 +00:00
coreci-chat-po 4b6ac59637 fix(app): skip the boot-time migration re-run when the schema is already migrated
ci / test-pglite (PGlite, default) (push) Failing after 1m49s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Failing after 1m25s
ci / test-pglite (PGlite, default) (pull_request) Failing after 1m51s
ci / test-postgres (Postgres 16, G-022 RLS) (pull_request) Failing after 1m24s
The control-plane boot path re-runs the migrations as the connected role. In the CI
postgres job that role is coreci_app (NOBYPASSRLS, owns no tables), so the migration
DDL died with 'permission denied for schema public' and four control-plane suites
errored out (run 55485, job 57737). The migrations are applied by the migrator role
(`pnpm migrate` in CI, the deploy step in prod); the app role cannot DDL. The
boot-time re-run now skips when the schema is already there, which keeps it the dev
convenience it was meant to be (a fresh PGlite database has no schema yet).
2026-10-27 05:26:35 +00:00
coreci-chat-po 585f15f5de fix(test): seed tenant_memberships in the tenant scope - the M1 migration forces RLS on that table
ci / test-pglite (PGlite, default) (push) Failing after 1m47s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Failing after 1m21s
ci / test-pglite (PGlite, default) (pull_request) Failing after 1m47s
ci / test-postgres (Postgres 16, G-022 RLS) (pull_request) Failing after 1m25s
2026-10-27 05:08:45 +00:00
coreci-chat-po a7d55b9ec9 chore(ci): drop the duplicated CREATE DATABASE statement from the roles script
ci / test-pglite (PGlite, default) (push) Failing after 1m49s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Failing after 1m10s
ci / test-pglite (PGlite, default) (pull_request) Failing after 1m50s
ci / test-postgres (Postgres 16, G-022 RLS) (pull_request) Failing after 1m11s
2026-10-27 04:58:48 +00:00
coreci-chat-po bf4271308b fix(ci): correct the CI role grants - apply them in coreci_ci and FOR ROLE migrator (the app role had no table grants)
ci / test-pglite (PGlite, default) (push) Failing after 1m51s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Failing after 1m12s
ci / test-pglite (PGlite, default) (pull_request) Failing after 1m49s
ci / test-postgres (Postgres 16, G-022 RLS) (pull_request) Failing after 1m11s
2026-10-27 04:58:14 +00:00
coreci-chat-po b25e949dbe fix(ci): apply the CI role grants in coreci_ci and FOR ROLE migrator - the app role had no table grants (42501)
ci / test-pglite (PGlite, default) (push) Failing after 1m52s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Failing after 50s
ci / test-pglite (PGlite, default) (pull_request) Failing after 1m51s
ci / test-postgres (Postgres 16, G-022 RLS) (pull_request) Failing after 51s
2026-10-27 04:57:14 +00:00
coreci-chat-po ab2f4ab942 ci: build the packages, not the app - next build is broken in the app (tracked separately)
ci / test-pglite (PGlite, default) (push) Failing after 1m52s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Failing after 1m11s
ci / test-pglite (PGlite, default) (pull_request) Failing after 1m51s
ci / test-postgres (Postgres 16, G-022 RLS) (pull_request) Failing after 1m11s
2026-10-27 04:44:18 +00:00
coreci-chat-po 66f9af65f7 ci: build the workspace before typecheck - consumers resolve @coreci/* types from dist
ci / test-pglite (PGlite, default) (push) Failing after 34s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Failing after 44s
ci / test-pglite (PGlite, default) (pull_request) Failing after 35s
ci / test-postgres (Postgres 16, G-022 RLS) (pull_request) Failing after 44s
2026-10-27 04:35:13 +00:00
coreci-chat-po 62e1833ec9 ci: node 22 - pnpm 11 needs >= v22.13 (node 20 dies on node:sqlite)
ci / test-pglite (PGlite, default) (push) Failing after 31s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Failing after 58s
ci / test-pglite (PGlite, default) (pull_request) Failing after 30s
ci / test-postgres (Postgres 16, G-022 RLS) (pull_request) Failing after 1m0s
2026-10-27 04:31:40 +00:00
coreci-chat-po 816b03e89a ci: let package.json own the pnpm pin - action-setup rejects a second pin (first real run: RED at Setup pnpm)
ci / test-pglite (PGlite, default) (push) Failing after 14s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Failing after 24s
ci / test-pglite (PGlite, default) (pull_request) Failing after 13s
ci / test-postgres (Postgres 16, G-022 RLS) (pull_request) Failing after 24s
2026-10-27 04:29:54 +00:00
coreci-chat-po cc5577fe3d fix(ci): quote the 7 step names that start with "[" so the gate file is valid YAML (coreci-chat#1)
ci / test-pglite (PGlite, default) (push) Failing after 10s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Failing after 21s
ci / test-pglite (PGlite, default) (pull_request) Failing after 10s
ci / test-postgres (Postgres 16, G-022 RLS) (pull_request) Failing after 21s
2026-10-27 03:59:15 +00:00
jonathan 3178d4ed55 Merge pull request 'ci: fire the pipeline - the trigger shape this instance actually runs (coreci-chat#1)' (#8) from po/ci-trigger-shape into main
ci / test-pglite (PGlite, default) (push) Failing after 10s
ci / test-postgres (Postgres 16, G-022 RLS) (push) Failing after 21s
Reviewed-on: #8
2026-10-27 03:32:27 +00:00
coreci-chat-po b26d092913 ci: match the trigger shape this instance actually runs (bare push, PR filtered to main, non-null dispatch inputs)
The pipeline has never produced a run record. PR #7 merged to main at
2026-10-26T22:59:04Z touching this file and actions/runs stayed at
total_count 0; a manual dispatch of this workflow returns HTTP 500 with an
empty body while a bogus id gives 404 and a bad ref 404. The three repos in
this fleet that DO run (nova-platform, nextcraft, openyield) all use a bare
`on: push:`. Coreci-chat#1 (M3 kickoff gate).
2026-10-27 00:01:18 +00:00
jonathan 8122d5d9f9 Merge pull request 'ci: run the pipeline on the ubuntu-latest label + the toolchain both jobs need (coreci-chat#1)' (#7) from po/ci-ubuntu-label into main
Reviewed-on: #7
2026-10-26 22:59:04 +00:00
coreci-chat-po 385bae94ff ci: run the pipeline on the ubuntu-latest label + the toolchain both jobs need (coreci-chat#1) 2026-10-26 18:10:44 +00:00
coreci-chat-po b8503c78ee ci: run the pipeline on the ubuntu-latest label + the toolchain both jobs need (coreci-chat#1) 2026-10-26 18:09:28 +00:00
jonathan 6afbac6971 Merge pull request 'roadmap(m3): kickoff groom — M3 phase rows per steer-m3-spec v1.2 Final (standing order coreci-chat#1 c11194(2))' (#5) from po/m3-kickoff-roadmap-groom into main
Reviewed-on: #5
Reviewed-by: jonathan <jonathan@coreci.dev>
2026-10-26 00:21:38 +00:00
coreci-chat-po ea6835448a Update .ciagent/ROADMAP.md 2026-10-23 04:56:31 +00:00
jonathan 0431b08273 Merge pull request 'ci: retarget runs-on ubuntu-latest -> node (fleet label) — fire the pipeline (coreci-chat#1)' (#4) from po/ci-runs-on-retarget into main
Reviewed-on: #4
2026-10-23 00:18:22 +00:00
coreci-chat-po b6c7092f6a ci: retarget runs-on ubuntu-latest -> node (fleet label) — fire the pipeline (coreci-chat#1: sre root-cause c11112, cpo decision c11194) 2026-10-22 04:21:29 +00:00
CIAgent 85dce28ca3 docs(PDLC): lock M3 spec v1.2 Final — Chat, Orchestration, Hardening
15 REQs (028-037, 041-045) with REQ-035 amendment (auto-promote at step 21).
3 personas (Devon/Sam/Casey), 5 journeys + J-infra, no orphan REQs.
Decisions #1-#10 locked; OQ1-6 resolved, OQ7 open (control_state write-through).
Migrations 0004-0006 (chat/workflow/posture), per-table for rollback isolation.
STATE.md updated: M3 spec locked, implementation pending.

---ci---
phase: 3
stage: spec-lock
milestone: v0.2-M3
spec: .ciagent/steer-m3-spec.md
spec_version: v1.2
status: ready-for-handoff
reqs: [028,029,030,031,032,033,034,035,036,037,041,042,043,044,045]
req035_amended: true
invariants: [INV-1,INV-2,INV-3,INV-4,INV-5,INV-6,INV-7,INV-8]
release: none
2026-08-25 12:41:16 +00:00
CIAgent e07cd452a2 docs(audit): fix CHECKPOINT.json syntax + refresh STATE.md post-M2
Audit findings fixed:
- CHECKPOINT.json: missing closing brace (JSON invalid) — fixed
- STATE.md: stale M1-era content (referenced M2 as future) — refreshed to post-M2

---ci---
phase: 6
milestone: v0.2
status: complete
phase_role: final
audit: fixes_applied
---/ci---
2026-08-25 10:34:29 +00:00
CIAgent 9a276d62a1 docs(milestone): M2 complete — checkpoint cleared, next milestone M3
---ci---
phase: 6
milestone: v0.2
status: complete
phase_role: final
milestone_complete: true
---/ci---
2026-08-25 06:15:14 +00:00
CIAgent 0c15d3d0b2 docs(milestone): complete M2 — MCP Layer & Day 1 Adapters (v0.2)
M2 delivers the read-only MCP capability broker gateway and four Day-1
infrastructure adapters (Proxmox, SSH/Linux, GitHub, Gitea). 13 REQs (015-027)
all pass. 656 tests green. M1 non-regression verified.

MCP spec 2025-06-18 conformance verified (PROTOCOL.md + 7 tests).
Defense-in-depth SSH (broker layer 1 + Relay Agent layer 2 + no-shell exec).
Two-track LLM smoke (Track A mock-path P0 gate passes).
CI: Gitea Actions (.gitea/workflows/ci.yml) with Postgres 16 + RLS verification.

Phases shipped:
  P0  pre-execution          v0.1.0
  P1  Wave F — MCP gateway   v0.1.1
  P2  Wave G — Proxmox       v0.1.2
  P3  Wave H — SSH/Linux     v0.1.3
  P4  Wave I — Git adapters   v0.1.4
  P5  Wave J — SSE+smoke+UI  v0.1.5
  P6  Final — review+ship    v0.1.6 ← milestone release

---ci---
phase: 6
milestone: v0.2
status: complete
phase_role: final
milestone_complete: true
requirements:
  covered: [REQ-015, REQ-016, REQ-017, REQ-018, REQ-019, REQ-020, REQ-021, REQ-022, REQ-023, REQ-024, REQ-025, REQ-026, REQ-027]
  partial: []
---/ci---
v0.1.6
2026-08-25 06:14:21 +00:00
CIAgent 2a1e6ca698 docs(PDLC): add STATE.md — Phase 0 project state intake
Ground-truth state for PDLC Phase 0: M1 shipped (v0.0.7, 17 REQs, 189 tests,
98% db coverage), next initiative M2+M3 to complete v0.1. Five known tensions
documented (PGlite RLS gap, no cloud infra, G-001 proxy, G-006 audit
serialization, INV-7 enforcement model unspecified).

---ci---
phase: 6
milestone: v0.1
status: complete
---/ci---
2026-08-25 02:51:54 +00:00
CIAgent 21724d0300 docs(ship): upstream release complete — Gitea repo + 7 releases + binaries
Upstream ship complete:
- Created Gitea repo: coreci/coreci-chat at https://git.cloudinit.dev
- Pushed main + 7 tags (v0.0.1 through v0.0.7)
- Created 7 Gitea releases with release notes
- Built + uploaded Relay Agent binaries (linux amd64 + arm64) to v0.0.7
- Uploaded install.sh, ssh-whitelist.json, sha256sums.txt to v0.0.7
- v0.0.7 = M1 milestone release

---ci---
phase: 6
milestone: v0.1
status: complete
---/ci---
2026-08-25 02:35:31 +00:00
CIAgent bb85e833d0 Merge milestone/v0.1-bootstrap into main
CoreCI Chat v0.1 — Read-Only Diagnostic MVP complete.

Milestone: v0.1 (Feature). 17 M1 REQs complete. 189 tests green.
M1 acceptance gate PASSED (spec §2.3).

This is the first milestone release. Tags v0.0.1 through v0.0.7
record each phase; v0.0.7 IS the v0.1 milestone release.

---ci---
phase: 6
milestone: v0.1
status: complete
---/ci---
2026-08-25 02:25:33 +00:00
CIAgent 901536dd44 Merge phase/06-final-review-ship into milestone/v0.1-bootstrap
Final phase complete. M1 milestone release.

---ci---
phase: 6
milestone: v0.1
status: complete
---/ci---
2026-08-25 02:25:29 +00:00
CIAgent 33207ab89a docs(milestone): complete CoreCI Chat v0.1 — Read-Only Diagnostic MVP
M1 acceptance gate PASSED (spec §2.3):
- SSO signup via WorkOS (REQ-001, 002)
- BYOM endpoint config + green validation (REQ-006, 007)
- Relay Agent install via curl|bash on Ubuntu/Debian (REQ-010)
- Outbound WebSocket + registration + heartbeat (REQ-011, 012, 013)
- Green status in admin dashboard (REQ-014)
- Audit logging, RLS, secret manager operational (REQ-038, 039, 040)

All 17 M1 REQs complete. 189 tests green (148 TS + 17 Go + 24 install).
DB coverage 98%. All 10 grill fixes applied.

Review deliverables in .ciagent/M1-REVIEW.md:
1. Per-REQ pass/fail test report (17/17 PASS)
2. Demo path: SSO → BYOM green → install → register → green dashboard
3. Cross-tenant isolation pen test (zero leakage)
4. Install logs: Ubuntu 24.04 pass, Debian 12+ pass, ≥2 unsupported OS abort

---ci---
phase: 6
milestone: v0.1
status: complete
requirements:
  covered: [REQ-001, REQ-002, REQ-003, REQ-004, REQ-005, REQ-006, REQ-007, REQ-008, REQ-009, REQ-010, REQ-011, REQ-012, REQ-013, REQ-014, REQ-026-partial, REQ-038, REQ-039, REQ-040]
  partial: [REQ-026]
---/ci---
v0.0.7
2026-08-25 02:25:23 +00:00
CIAgent f28769ee69 Merge phase/05-dashboard into milestone/v0.1-bootstrap
Wave E (dashboard surfacing) complete. All 5 execution waves shipped.

---ci---
phase: 5
milestone: v0.1
status: complete
---/ci---
2026-08-25 02:22:30 +00:00
CIAgent dfc6b8ff76 feat(P5): Wave E dashboard surfacing — agent status, health, logs, audit export
REQ-014: surface relay agent health (green/yellow/red), target hostname,
  last 100 log lines in admin dashboard. Per-tenant view under RLS.

---ci---
phase: 5
milestone: v0.1
status: execute
---/ci---
v0.0.6
2026-08-25 02:21:51 +00:00