Commit Graph
253 Commits
Author SHA1 Message Date
weichen e6c5cd99df Merge remote-tracking branch 'origin/main' into feature/cross-session-reading 2026-09-30 15:26:30 +00:00
weichen 9bde62cc44 Record the cross-session reading delivery on the task card 2026-09-30 15:26:30 +00:00
weichen cffb80f762 Pin the UI contracts mirror sync for cross-session flags
Why: make contracts regenerates modules/ui/src/contracts.ts from Core
as authority; the mirror commit (UI PR #15) must be pinned or the
combined tree stays dirty after make test.

Evidence: UI PR #15 merged on ui main; make test re-run on this tree
below.

Impact: gitlink-only change.

Refs: Core PR #6; UI PR #15; Dev task feature/cross-session-reading.
2026-09-30 15:25:39 +00:00
weichen ca84888345 Merge pull request 'Close the svc-auto-update task card (PR #65 merged)' (#66) from feature/card-close-20260930-152301Z into main
ci / test (push) Failing after 1m37s
2026-09-30 15:23:14 +00:00
weichen a372b1d6db Close 1 merged task card(s) and archive them
ci / test (pull_request) Failing after 1m37s
Why: branches merged into main had left their task cards open; backfill status and archive to prevent bookkeeping debt.
Evidence: feature-svc-auto-update.md(PR#65) — merges verified via git log --merges against origin/main.
Impact: .task/*.md moved to .task/archive/ with status backfilled; no code or submodule change.
Refs: task.sh close (card-autoclose-r1)
2026-09-30 15:23:01 +00:00
weichen 4ae98489fa Merge pull request 'Add svc.sh update command: auto-detect repo advances and refresh services' (#65) from feature/svc-auto-update into main
ci / test (push) Failing after 1m33s
2026-09-30 15:22:53 +00:00
weichen 88b2089023 Record the sync checkpoint
ci / test (pull_request) Failing after 1m35s
2026-09-30 15:22:40 +00:00
weichen 072d62be56 Pin cross-session reading delivery across four modules
Why: integrate the approved cross-session reading feature (proposal +
core contract + backend gate/tools/UI) into the Dev composition.

Evidence: subrepo PRs all merged on their mains — Documents #21
(bf0988b), Core #6 (fd44179), Backend #18 (cb7f79d), Frontend #16
(9c87953); combined make test to follow on this exact tree before the
Dev PR is requested.

Impact: gitlink-only change plus task card; no Dev-repo code touched.

Refs: modules/documents/docs/proposals/2026-09-30-cross-session-reading.md;
task card .task/feature-cross-session-reading.md.
2026-09-30 15:22:39 +00:00
weichen ac8db54ecb Add svc.sh update command: auto-detect repo advances and refresh services
Why:
After the repository moves forward, updating a running service meant
manually figuring out the new commit, rebuilding and redeploying by hand;
the user asked for the tool to detect and update automatically.

Evidence:
- "update [name...] [--check] [--all] [--no-fetch]": fetches origin,
  compares each service's registered source against the latest (Dev repo
  origin/main for local@/dev@ sources, newest Releases version for
  release@), prints a per-service table (current / latest / state), and
  without --check refreshes outdated running services by reusing the full
  deploy pipeline (stop → build/verify → start → health check; persisted
  exec= config and tags survive; update events appended to history).
- local@ services: auto git pull --ff-only origin main + make sync before
  rebuilding, guarded three ways (current branch == main, clean worktree,
  ff-only) — dirty trees or non-main branches are skipped with a warning,
  never touching uncommitted work.
- dev@ sources go straight to the remote main commit via an isolated
  worktree; release@ sources deploy the newest Releases version with
  sha256 verification; postgres and static --dir services are reported as
  not applicable; sources that diverged from or lead the remote are never
  force-updated.
- Verified end to end with five test services: dev@73b2802 → dev@ffda6d3
  (real isolated build, HTTP 200, tag/port preserved, worktree recycled),
  non-main-branch skip, stopped-service warning vs --all, release
  sha256-verified update, --check read-only (svc.env checksums unchanged),
  unregistered name exits 2.
- Fixed en route: a latent bug from the v2 refactor — materialize_dev_commit
  leaked submodule/make stdout into the captured worktree path, breaking
  every real dev@sha deploy since (cp: File name too long); build output
  now goes to stderr. Also fixed an unbound-variable crash in the update
  loop (local statement self-reference under set -u).

Impact:
New read-mostly operational command; no behavior change to existing
commands except dev@sha deploys now actually working end to end.
Makefile gains svc-update; --help and docs/svc.md document the command.

Refs: .task/feature-svc-auto-update.md(任务卡=PR 描述)
2026-09-30 15:22:33 +00:00
weichen f467e49c58 Record the task card for feature-svc-auto-update 2026-09-30 15:02:15 +00:00
weichen 032085a690 Record the task card for feature-cross-session-reading 2026-09-30 14:55:34 +00:00
weichen ffda6d33ea Merge pull request 'Close the svc-docs-help task card (PR #63 merged)' (#64) from feature/card-close-20260930-143042Z into main
ci / test (push) Failing after 1m57s
2026-09-30 14:30:52 +00:00
weichen 7818dfbe85 Close 1 merged task card(s) and archive them
ci / test (pull_request) Failing after 1m38s
Why: branches merged into main had left their task cards open; backfill status and archive to prevent bookkeeping debt.
Evidence: feature-svc-docs-help.md(PR#63) — merges verified via git log --merges against origin/main.
Impact: .task/*.md moved to .task/archive/ with status backfilled; no code or submodule change.
Refs: task.sh close (card-autoclose-r1)
2026-09-30 14:30:42 +00:00
weichen 404079dc98 Merge pull request 'Document svc.sh comprehensively and layer its help system' (#63) from feature/svc-docs-help into main
ci / test (push) Failing after 1m37s
2026-09-30 14:30:34 +00:00
weichen 6d5d7a6263 Record the sync checkpoint
ci / test (pull_request) Failing after 30s
2026-09-30 14:29:40 +00:00
weichen 314de91df3 Merge remote-tracking branch 'origin/main' into feature/svc-docs-help 2026-09-30 14:29:40 +00:00
weichen 2c7f55bfe8 Document svc.sh comprehensively and layer its help system
Why:
svc.sh grew into a three-kind service manager with database operations,
but its only documentation was a flat --help wall of text; the user asked
for a complete usage document and a better help experience.

Evidence:
- docs/svc.md: 14-section manual (prerequisites, quick start, concepts
  and directory layout, per-command reference for service/global/db
  commands, deploy sources, database operations handbook, configuration
  layering, registry fields and event types, safety boundaries, exit
  codes, troubleshooting table, recipe index) — every claim cross-checked
  against the implementation from the previous two rounds.
- Help layering: no-args and -h print a one-screen overview; --help
  renders the header comment reorganized into 7 labeled sections; the new
  "help [topic]" command deep-dives eight topics (model, deploy,
  lifecycle, db, dbops, config, examples, safety); usage errors now show
  the short overview plus a pointer to --help / help / docs/svc.md.
  All topics verified to render; unknown topic exits 2.
- No runtime behavior changed: end-to-end db lifecycle regression
  (create → start → backup → status → stop → rm --purge) passes after the
  refactor.
- Makefile help and README's documentation section point to docs/svc.md.

Impact:
Documentation-only plus display-layer changes; command semantics,
exit codes and file formats are untouched. Maintenance note: behavior
changes must now update both --help and docs/svc.md.

Refs: .task/feature-svc-docs-help.md(任务卡=PR 描述)
2026-09-30 14:29:39 +00:00
weichen 7db242792a Merge pull request 'Close the ui-capability-platform task card (PR link + archive)' (#62) from feature/card-close-20260930-142354Z into main
ci / test (push) Failing after 30s
2026-09-30 14:24:22 +00:00
weichen 883cb929f3 Close 1 merged task card(s) and archive them
ci / test (pull_request) Failing after 31s
Why: branches merged into main had left their task cards open; backfill status and archive to prevent bookkeeping debt.
Evidence: feature-ui-capability-platform.md(PR#61) — merges verified via git log --merges against origin/main.
Impact: .task/*.md moved to .task/archive/ with status backfilled; no code or submodule change.
Refs: task.sh close (card-autoclose-r1)
2026-09-30 14:23:54 +00:00
weichen 58f191189b Merge pull request 'UI capability platform: gitlinks + .gitignore + task card' (#61) from feature/ui-capability-platform into main
ci / test (push) Failing after 31s
2026-09-30 14:23:41 +00:00
weichen 0bf2f9becc Advance pins to merged platform heads
ci / test (pull_request) Failing after 1m50s
2026-09-30 14:23:38 +00:00
weichen ec48bb49b7 Advance pins to rebased capability heads 2026-09-30 14:22:59 +00:00
weichen 4908405814 Advance core pin to rebased avatar head 2026-09-30 14:22:26 +00:00
weichen 339d671409 Record the sync checkpoint 2026-09-30 14:19:33 +00:00
weichen 6cd8cf1d0d Merge remote-tracking branch 'origin/main' into feature/ui-capability-platform 2026-09-30 14:19:33 +00:00
weichen 8793bc97d5 Land the UI capability platform across repos (gitlinks + housekeeping)
Why: R-platform spans core/ui/frontend/documents; also honors the
agreed housekeeping item — .env.dev must be gitignored (it holds live
API keys).

Evidence: make test full suite green on this head (exit 0); headless
walk on the real binary: avatar columns, settings shell with badges,
admin-row avatars, zero console errors.

Impact: capability layer only, no behavior changes. Merge order:
core -> ui -> frontend -> documents -> this PR.

Refs: proposal 2026-09-30-ui-redesign-and-auth.md (capability platform)
2026-09-30 14:19:32 +00:00
weichen 96dfac6bc4 Record the task card for feature-svc-docs-help 2026-09-30 14:17:54 +00:00
weichen 22d14db80c Merge pull request 'Close the svc-db-ops task card (PR #59 merged)' (#60) from feature/card-close-20260930-141213Z into main
ci / test (push) Failing after 1m31s
2026-09-30 14:12:32 +00:00
weichen dc24d6d612 Close 1 merged task card(s) and archive them
ci / test (pull_request) Failing after 1m37s
Why: branches merged into main had left their task cards open; backfill status and archive to prevent bookkeeping debt.
Evidence: feature-svc-db-ops.md(PR#59) — merges verified via git log --merges against origin/main.
Impact: .task/*.md moved to .task/archive/ with status backfilled; no code or submodule change.
Refs: task.sh close (card-autoclose-r1)
2026-09-30 14:12:13 +00:00
weichen 30a09686ea Merge pull request 'Add db ops to svc.sh: port change, backup, restore, clone, cross-instance copy' (#59) from feature/svc-db-ops into main
ci / test (push) Failing after 1m38s
2026-09-30 14:12:07 +00:00
weichen 9bbbdf22ac Record the sync checkpoint
ci / test (pull_request) Failing after 1m40s
2026-09-30 14:11:30 +00:00
weichen 69871136e5 Add db ops to svc.sh: port change, backup, restore, clone, cross-instance copy
Why:
The service manager could create and run postgres instances but had no
way to retarget a port explicitly, back data up, clone an instance to
another port, or move a database between instances — the user asked for
exactly these operations.

Evidence:
- "set <name> [--port N] [--host H] [--apply] [--tag T...]": explicit
  registration change; running postgres requires --apply (stop → rewrite
  registration → start); port availability checked against both
  registrations and live listeners. Verified: 8890→8895 with data intact
  and DSN updated, old port freed; refusal without --apply.
- "db backup <name> [--db X] [--out F]": pg_dump -Fc into
  runtime/<name>/backups/ (0600) with pg_restore --list self-check;
  "db backups" lists them.
- "db restore <name> --file F [--db X] [--force]": restores into a new db
  or refuses on a non-empty target unless --force (drop with FORCE +
  recreate + restore), reporting table counts afterwards. Verified all
  three paths.
- "db clone <src> <dst> [--port P] [--password PW] [--tag] [--online]":
  default physical clone (brief source stop, cp -a of pgdata minus
  postmaster files, new registration, source restarted on its own port);
  --online copies via dump/restore without stopping the source (verified
  source pid unchanged). Clone lands on the requested or derived port.
- "db copy <src> <dst> [--db X] [--force]": single-database logical move
  between two running instances with the same non-empty-target guard.
  "db ls <name>" lists databases.
- Fixed during verification: clone/copy leaked the CLI --port into the
  source restart path (source briefly came up on the clone's port); the
  address overrides are now cleared inside those commands.

Impact:
All operations stay inside runtime/<name>/, append to history.jsonl, and
reuse the existing safety constraints (own-process stop, port conflicts
reported not seized, secrets in 0600 files). Overwriting a non-empty
database requires an explicit --force everywhere. Makefile help line
mentions the new db subcommands.

Refs: .task/feature-svc-db-ops.md(任务卡=PR 描述)
2026-09-30 14:11:30 +00:00
weichen d6b9c2e07a Record the task card for feature-svc-db-ops 2026-09-30 14:01:04 +00:00
weichen 727093fed9 Record the task card for feature-ui-capability-platform 2026-09-30 13:52:58 +00:00
weichen d54bfdd8e9 Merge pull request 'Close the svc-services-registry task card (PR #57 merged)' (#58) from feature/card-close-20260930-134555Z into main
ci / test (push) Failing after 1m34s
2026-09-30 13:46:01 +00:00
weichen 24d558ab64 Close 1 merged task card and archive it
ci / test (pull_request) Failing after 19m12s
Why: feature/svc-services-registry merged via PR #57 (merge 33fe7fb);
its card must be marked done and archived per the no-pending-cards rule.
Evidence: git log --merges origin/main shows 33fe7fb merging the branch;
card backfilled with PR link and moved to .task/archive/.
Impact: .task bookkeeping only (main checkout holds an unrelated untracked
.video_agent/ dir which is left untouched).
Refs: task.sh close
2026-09-30 13:45:55 +00:00
weichen 33fe7fb394 Merge pull request 'Generalize svc.sh into a multi-kind service manager with tags and persistence' (#57) from feature/svc-services-registry into main
ci / test (push) Failing after 1m55s
2026-09-30 13:45:24 +00:00
weichen ba48c35e09 Record the sync checkpoint
ci / test (pull_request) Failing after 1m35s
2026-09-30 13:45:01 +00:00
weichen 60261a835a Generalize svc.sh into a multi-kind service manager with tags and persistence
Why:
svc.sh only managed agent-system environments; databases, standalone
frontend serving, per-service tags and reusable start configs were out of
scope, and the user asked for a unified service lifecycle on this host.

Evidence:
- Service model v2: kind=agent|static|postgres registered in
  runtime/<name>/svc.env (dotenv, mode 600); legacy entries without kind=
  are adopted as agent.
- postgres: "db create <name> --port/--user/--password/--db/--auth-mode/
  --tag" runs initdb (scram-sha-256, pwfile 0600), start/stop/restart use
  pg_ctl (-m fast, never SIGKILL on postmaster) with pg_isready checks and
  first-start database creation; "db dsn <name> [--reveal]" prints a
  composable DSN (password masked by default). Verified end to end against
  a real postgresql@18 instance: data survives restart, wrong passwords
  rejected, stop/restart clean.
- static: "deploy --kind static --from dev[@sha]|local" builds frontend
  dist into htdocs/ in an isolated worktree, or "--dir PATH" serves an
  existing directory; verified serving HTTP 200, restart, stop, dry-run
  plan, and explicit rejection of release sources.
- agent: unchanged three deploy sources plus --tag; bare start/restart now
  reuses the persisted exec= from svc.env (verified: same custom port and
  args across restart); old binaries lacking --dsn/--auth get those flags
  auto-omitted with a warning.
- "list|status [--tag]" shows NAME/KIND/STATE/PID/ADDR/SOURCE/TAGS for all
  registered services; "<name> status" gives per-kind detail; "rm <name>
  [--purge]" unregisters (and optionally deletes) only runtime/<name>/.
- Fixed during verification: psql arg mangling (-c -c), tags lost because
  record_state read svc.env inside its own redirect block, postgres
  --version field parsing, unbound vars for unregistered names.

Impact:
Same invariants as before: writes stay under runtime/<name>/ and
runtime/.worktrees/ (only --from local also writes main-checkout build
outputs, all gitignored), stops only own pidfile+cmdline-verified
processes, port conflicts reported not seized. Prompt output moved to
stderr so stdout (tables, DSNs) stays pipeable. Makefile gains svc-list.

Refs: .task/feature-svc-services-registry.md(任务卡=PR 描述)
2026-09-30 13:44:58 +00:00
weichen 0eff7abf3e Record the task card for feature-svc-services-registry 2026-09-30 13:30:43 +00:00
weichen a2657bc25f Merge pull request 'Close the svc-deploy-source-registry task card (PR #55 merged)' (#56) from feature/card-close-20260930-132223Z into main
ci / test (push) Failing after 30s
2026-09-30 13:22:30 +00:00
weichen 71fb2aff89 Close 1 merged task card and archive it
ci / test (pull_request) Failing after 1m37s
Why: feature/svc-deploy-source-registry merged via PR #55 (merge 8523415);
its card must be marked done and archived per the no-pending-cards rule.
Evidence: git log --merges origin/main shows 8523415 merging the branch;
card backfilled with PR link and moved to .task/archive/.
Impact: .task bookkeeping only.
Refs: task.sh close
2026-09-30 13:22:23 +00:00
weichen 85234157a2 Merge pull request 'Add commit-picked deploys and a service registry to svc.sh' (#55) from feature/svc-deploy-source-registry into main
ci / test (push) Failing after 30s
2026-09-30 13:21:43 +00:00
weichen 3a91fda7c3 Link the svc registry task card to PR #55
ci / test (pull_request) Failing after 31s
Why: 任务卡与 PR 描述为同一份文档,主记录链接须回填。
Evidence: PR #55 已建立(head=feature/svc-deploy-source-registry)。
Impact: 仅任务卡元数据。
2026-09-30 13:21:35 +00:00
weichen b4f9e93d56 Record the sync checkpoint
ci / test (pull_request) Failing after 1m31s
2026-09-30 13:20:32 +00:00
weichen 8ba1b0e715 Add commit-picked deploys and a service registry to svc.sh
Why:
svc.sh only knew two hardcoded environments (dev/prod) and always built
the current workspace, so there was no way to deploy a specific Dev- repo
commit or a Releases artifact, and no record of what was actually started.

Evidence:
- scripts/svc.sh commits dev|release lists deployable commits (release
  entries annotated with version + devCommit; both mark HEAD and the
  environments already running them).
- deploy --from local|dev@<sha>|release@<version|sha> materializes the
  chosen source: dev commits build in an isolated worktree
  (runtime/.worktrees/<sha>, submodule pins verified to land exactly),
  release artifacts are sha256-verified against versions/<v>/manifest.json
  (a forged manifest is refused); --pick offers an interactive numbered
  choice and --dry-run prints the plan.
- Environment names are generalized (^[a-z][a-z0-9-]{0,15}$, derived port
  8800-9099 on collision-free scan); each env is self-contained under
  runtime/<env>/{bin,plugins,data} with svc.env (current state) and
  history.jsonl (append-only deploy/start/stop events). status scans all
  registered envs and history [env] [N] merges the event stream.
- Old artifacts that predate --dsn/--auth have those flags auto-omitted
  (probed via serve usage); legacy svc.env files still render in status.
- Verified end to end in the task worktree: stub-binary lifecycle, a real
  release@0.1.0 deploy (HTTP 200, source shown in status, commits marked),
  failure paths (sha mismatch, immediate exit, non-TTY --pick).

Impact:
scripts/svc.sh users gain multi-version side-by-side environments and
rollback by redeploying an older source; existing dev/prod defaults and
safety constraints (own-pidfile-only stop, port-occupancy check) are
unchanged. Environments deployed by the previous script need one fresh
deploy before start/restart works again. Makefile gains svc-commits and
svc-history targets.

Refs: .task/feature-svc-deploy-source-registry.md(任务卡=PR 描述)
2026-09-30 13:20:32 +00:00
weichen ab7f18d5d4 Record the task card for feature-svc-deploy-source-registry 2026-09-30 13:03:31 +00:00
weichen 8c4fd01947 Merge pull request 'Close the visual-refresh-r4 task card (PR link + archive)' (#54) from feature/card-close-20260930-124602Z into main
ci / test (push) Failing after 1m33s
2026-09-30 12:46:28 +00:00
weichen d26187e43c Close 1 merged task card(s) and archive them
ci / test (pull_request) Failing after 1m34s
Why: branches merged into main had left their task cards open; backfill status and archive to prevent bookkeeping debt.
Evidence: feature-visual-refresh-r4.md(PR#53) — merges verified via git log --merges against origin/main.
Impact: .task/*.md moved to .task/archive/ with status backfilled; no code or submodule change.
Refs: task.sh close (card-autoclose-r1)
2026-09-30 12:46:02 +00:00
weichen b069959819 Merge pull request 'R4 visual refresh: gitlinks + task card' (#53) from feature/visual-refresh-r4 into main
ci / test (push) Failing after 2m14s
2026-09-30 12:44:52 +00:00