78 lines
4.6 KiB
Markdown
78 lines
4.6 KiB
Markdown
# Checkpoint — distribution
|
|
|
|
- Status: **RUNNING**
|
|
- Plan branch: `distribution-plan` Base: `master`
|
|
- Current: A2 (pooled distd, PLAN-HTTPZ S7b) done 2026-06-12 → `74b41f5` + `c734f47`: 4 handler workers, writes serialized behind one mutex, /api/apps 5.7k → 12.0k req/s; en route the vendored sqlite flipped THREADSAFE=0→1 in sx (`3948813`) after the pool exposed heap corruption (pinned by server_http's concurrency case + sqlite_api). A1 → `48a13c4` (std.http readiness loop + keep-alive; 6 idle preconnects 3.7ms ttfb, was 3.9s behind two). sx grew time/socket-nb/kqueue/event/thread/http (PLAN-HTTPZ; issue 0131 found+fixed). Benchmark vs httpz: sx/current/BENCH-HTTPZ.md. Next: P6.2 admin UI actions; packaging (07) still blocked on sx Linux targets
|
|
- Updated: 2026-06-12 HEAD: `48a13c4`
|
|
|
|
## Progress
|
|
|
|
| step | status | attempts | merge |
|
|
|------|--------|----------|-------|
|
|
| P1.1 | merged | 1 | 331a3e06 |
|
|
| P2.1 | merged | 3 | b5529583 |
|
|
| P2.2 | merged | 2 | a2f7ad2a |
|
|
| P2.3 | merged | 3 | 882dce4f |
|
|
| P3.1 | merged | 1 | 94e24118 |
|
|
| P3.2 | merged | 1 | 1c4bba05 |
|
|
| P3.3 | merged | 1 | 20d520d0 |
|
|
| P3.4a | merged | 1 | e56a921 |
|
|
| P3.4b | merged | 1 | e56a921 |
|
|
| P3.5 | merged | 1 | e56a921 |
|
|
| P4.1 | merged | 1 | 734c00f |
|
|
| P4.2 | done | 1 | cf39589 |
|
|
| P4.3 | done | 1 | d8b7a7b |
|
|
| P4.4 | done | 1 | e2a5150 |
|
|
| P4.5 | done | 1 | 0a6fa65 |
|
|
| P4.6 | done | 1 | aea3d62 |
|
|
| P5.1 | done | 1 | afec94a |
|
|
| P5.2 | done | 1 | a1f13c4 |
|
|
| P5.3 | done | 1 | dc6908d |
|
|
| P6.1 | done | 1 | eef3d5c |
|
|
|
|
P4.2 onward is implemented directly in-session on `distribution-plan` (flow
|
|
harness retired). The sN→iN sx lang migration landed as `6c19f10`. P4.3
|
|
(token security, subplan 02 Slice 5) → `d8b7a7b`; P4.4 (bearer auth + write
|
|
endpoints, 04 Slice 2 + write half of 3/4) → `e2a5150`; P4.5 (remote
|
|
publish, 03 Slice 3) → `0a6fa65`; P4.6 (install pages + iOS modes, 04
|
|
Slice 5) → `aea3d62`. `make test` is 19/19 green at HEAD. The PLAN.md CI
|
|
contract works end-to-end against a running distd, and install pages
|
|
honor the iOS Install Policy (artifact_only / testflight / enterprise OTA
|
|
manifest). sx issue 0098 (enum literal into optional target lowers to
|
|
variant 0) bit `ua_platform`; worked around via typed locals — the sx-side
|
|
fix is still tracked as a separate followup. P5.1 → `afec94a`: SQLite
|
|
3.53.2 is VENDORED (vendor/sqlite/, API renamed dist_sqlite3_* so the
|
|
JIT's dlsym(RTLD_DEFAULT) can never bind the OS copy) with sx bindings in
|
|
src/db/sqlite.sx — SQLite is no longer blocked. The bindings then adopted
|
|
honest C integer widths (`3747c40`, 21/21 green). P5.2 → `a1f13c4`: the
|
|
store persists to `<store>/dist.db` (schema + whole-model save/load in
|
|
src/repo/db.sx, BEGIN IMMEDIATE transactions, busy_timeout for CLI/distd
|
|
interleaving); a pre-SQLite db.json imports once on first load (renamed
|
|
db.json.imported); consumers gate on `db.store_exists`; every test that
|
|
parsed db.json now queries dist.db through the bindings, plus new pinned
|
|
tests db_import.sx and the SQLite repo_roundtrip.sx. `make test` is 22/22
|
|
green at HEAD. En route, sx issue 0130 (`#library` behind two aliased
|
|
imports dropped from link/dlopen) was filed AND fixed in the sx repo
|
|
(`d739c5b`, examples/1617 regression). P5.3 → `dc6908d` (02 Slice 4,
|
|
closing subplan 02): `Channel.retention_keep` (0 = keep everything, N =
|
|
keep the newest N published lineage releases) set via `dist channel set`;
|
|
`dist store cleanup` prunes lineage-expired releases (never one ANY
|
|
channel points at — cross-promoted releases survive), GCs unreferenced
|
|
objects/ blobs, sweeps stale staging/ files, one audit event per deletion,
|
|
model saved before any unlink. En route it fixed repo.publish silently
|
|
resetting an existing channel's policy/rollout/retention on every publish
|
|
(pinned in tests/retention_cleanup.sx, which fails on the pre-fix code).
|
|
cleanup.sx carries a local opendir/readdir/closedir FFI shim — std.fs
|
|
still has no directory listing (sx wishlist). P6.1 → `eef3d5c` (subplan
|
|
06, first slice): the read-only admin console at /admin, server-rendered
|
|
from src/server/admin.sx exactly like the index/install pages (sx
|
|
strings, no client framework): apps overview, app detail (channels with
|
|
policy/rollout/retention, releases newest-first), release detail
|
|
(validation chips, serving channels, audit timeline), tokens (lifecycle
|
|
status, never secret material), audit log. Reads public per v0; writes
|
|
stay on the token-gated POSTs. The root-level index.html/styles.css/
|
|
app.js mock (rejected design, flow-harness era) is SUPERSEDED by the
|
|
real console — delete when convenient. `make test` is 24/24 green at
|
|
HEAD. Remaining for Milestone 1: admin UI actions/iteration (06),
|
|
Docker/UGREEN packaging (07, still blocked on sx Linux targets).
|