Commit Graph
120 Commits
Author SHA1 Message Date
weichenandCursor 196d6f3cfd Merge authoritative main into the task branch
Why: include the current integration baseline before verification.
Evidence: fetched origin/main=692735e91d6a9ab07ddd3686feb60a56b270728a.
Impact: integrate upstream changes without rewriting task history.
Refs: task-sync
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-15 05:55:51 +00:00
weichenandCursor 77f7975cac Merge authoritative main into the task branch
ci / svc-realcombo (pull_request) Successful in 1m47s
ci / test (pull_request) Successful in 5m39s
ci / test-pg (pull_request) Successful in 9m41s
Why: include the current integration baseline before verification.
Evidence: fetched origin/main. The multi-instance account bootstrap conflict keeps main's identity ensure and activation flow.
Impact: integrate upstream changes without rewriting task history. Backend gitlink stays 80bb123.
Refs: task-sync
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-15 03:43:03 +00:00
weichen bc52e40d81 Merge authoritative main into the task branch
Why: include the current integration baseline before verification.

Evidence: fetched origin/main=59cbf1109634b66c88f5b1702f330cd738aa75ef.

Impact: integrate upstream changes without rewriting task history.

Refs: task-sync
2026-10-15 03:19:41 +00:00
weichen d7f43acf31 Align multi-instance bootstrap with the U3 account contract
ci / svc-realcombo (pull_request) Successful in 1m58s
ci / test (pull_request) Successful in 5m18s
ci / test-pg (pull_request) Successful in 7m28s
Why: The multi-instance acceptance test still created alice with a literal
password; backend U3 replaced local password-bearing creation with trusted
pending-account activation, so the first pin bump past U3 failed test-pg
with RECOVERY_CONTRACT_REPLACED. The seam was left pending by the U3 task
and this PR is the first to cross it.

Evidence: Full TestTwoInstancesOverSharedPG passes against a disposable
PostgreSQL 16 container (identity ensure -> bootstrap-admin -> pending
create with activation key -> key redemption -> grant-setup password ->
api key -> all cross-instance scenarios, 15s).

Impact: Test-only bootstrap rewrite (deployment-level identity ensured once
per pair, admin bootstrapped first, alice activated through the key
redemption and grant-setup password flow); no product code changes.

Refs: Dev task feature/pptx-gate-reference-integrity; backend U3 #198
2026-10-15 03:11:08 +00:00
weichenandCursor b97d6cd60b Establish system identity before the multi-instance account bootstrap
ci / svc-realcombo (pull_request) Successful in 2m18s
ci / test (pull_request) Successful in 5m51s
ci / test-pg (pull_request) Successful in 8m48s
Why: bootstrap-admin now refuses a database that has no agent_system_identity row, and serve does not insert one.
Evidence: Dev CI run 3266 job 5008 failed with system identity missing on 7eef723.
Impact: test setup only.
Refs: Agent-System-Dev pulls/558
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-15 02:33:08 +00:00
weichenandCursor 7eef72323b Activate the multi-instance fixture through the current account contract
ci / test-pg (pull_request) Failing after 1m49s
ci / svc-realcombo (pull_request) Successful in 2m9s
ci / test (pull_request) Failing after 4m47s
Why: the synced backend rejects password-bearing user create, so the shared-PG acceptance could not open its first account.
Evidence: Backend CI run 3261 succeeded on 8c60ed0; Dev test-pg run 3263 failed in TestTwoInstancesOverSharedPG before this change.
Impact: test setup only. Alice remains a non-admin account and still receives an API key after setting a password.
Refs: Agent-System-Dev pulls/558
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-15 02:26:16 +00:00
weichen 1c36b81d2e Disable fixture Git maintenance across task tests
Why: Long-history task tests could finish while Git background maintenance still rewrote a disposable clone, racing TemporaryDirectory cleanup and failing CI with a non-empty .git directory.
Evidence: The failing test passes 25/25 and all 344 governance tests pass locally.
Impact: Test fixture only; product, governance commands, and runtime behavior are unchanged.
Refs: Dev run 3237 jobs 4951 and 4965
2026-10-15 02:13:03 +00:00
weichenandCursor 1a5afe219d Point the service at four-model vision routing
Why: Chat, lightweight, fallback and vision settings need a seed path, and the backend now sends current-turn images only to models declared capable of seeing them.

Evidence: The backend change is cfde38d. The seed test covers fallback and vision settings. A local image conversation on each builtin profile returned the pictured content from the expected model, and removing the chat model from the capable list switched that turn to the vision model.

Impact: New runs can use the four builtin profiles and image input. Secrets stay in the ignored env file. The live 8788 process is unchanged.

Refs: .task/feature-four-model-vision.md
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-14 17:51:29 +00:00
weichenandCursor 1cf2f533f7 Compile selected plugins into the svc deploy binary
Why: deploy needs to choose registered plugins and ship them inside one agent-system, then refuse the release when they are not active.
Evidence: python3 -m unittest tests.test_svc_plugins tests.test_svc_user_help tests.test_svc tests.test_svc_u2 (SELF, 63 passed, 1 skipped). Real compose build and make test-lifecycle are NOT_RUN.
Impact: --with is mutually exclusive with --from rdm and --from release. Existing non-interactive deploys stay without plugins unless plugins= is already recorded. Changing the plugin id set on a live service requires --allow-source-switch.
Refs: .task/feature-svc-plugin-compose.md modules/documents/docs/proposals/2026-10-14-svc-plugin-compose-deploy.md
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-14 16:08:13 +00:00
weichen f4eeba1733 Detect squash-merged PRs when closing task cards
Why: card_merge only recognized "Merge ... from <branch> into main"
merge commits, so a PR landed as a squash (real case: #457) left its
task card in .task/ forever; task-close reported nothing to close and
precheck showed no debt. Closing required a manual backfill (PR #541).

Evidence: card_merge now returns sha|subject|pr and falls back to a
Gitea API lookup by head ref or label (deleted branches keep the
original name only in label), gated by merge_commit_sha ancestry in
origin/main; precheck [cards] reuses card_merge so both surfaces agree.
Live probe against production Gitea returns 226a4af15791|Reset
per-service runtime state in svc.sh env_config|457 for
feature/svc-pidcheck-leak; stub-server tests cover squash landing,
decoy skip and the not-on-main refusal; full governance suite follows
in-card evidence.

Impact: scripts/task.sh close and precheck detect squash-merged cards
when GITEA_TOKEN is set (merge-commit path unchanged without token);
tests/test_task.py adds two regressions; no protocol change for
existing merge-commit closures beyond the appended pr field.

Refs: card-merge-misses-squash-merges (memory); PR #541 manual closure.
2026-10-14 07:53:52 +00:00
weichen 3b0e100fba Fix facts registry commands and make precheck parsing escape-aware
ci / svc-realcombo (pull_request) Successful in 1m59s
ci / test (pull_request) Successful in 5m13s
ci / test-pg (pull_request) Successful in 8m6s
Why: F2 token extraction predates the two-section (HOME/IMC) layout of
~/.secrets/gitea so it concatenated both tokens and always failed; F6
registered a grep BRE alternation that facts-verify unescapes into a
literal pipe, failing re-verification and misaligning precheck's naive
pipe split into a spurious F6 date-format expiry warning, while both
underlying facts still hold.

Evidence: make facts-verify now 6/6 PASS with last_verified refreshed
to 2026-10-14; new regression test for escaped pipes in facts rows;
full governance suite 342 tests OK (18 skipped); precheck [facts] line
reports all facts fresh on the fixed parser.

Impact: policy/facts.md F2 (HOME-section awk extraction) and F6
(negated pipe-free grep); scripts/task.sh precheck neutralizes escaped
pipes the same way facts-verify does; tests/test_task.py covers it.

Refs: precheck WARN 过期事实 F6(日期格式); AGENTS.md 证据与验证门禁.
2026-10-14 06:13:51 +00:00
weichen deff43ae59 Close trial task cards and keep long histories visible
Why: pipefail treated a recent merged-card match as a failed git log after grep exited early, hiding completed cards from precheck and task-close.

Evidence: A disposable long-history regression failed before the fix and passed after it; make test-governance passed 341 cases. Git history confirms PR #489/#488/#486 merge SHAs.

Impact: Detect merged cards reliably and archive only the three authorized trial cards; four unrelated eligible cards remain untouched.

Refs: Dev merge queue #518; Dev #489, #488, #486
2026-10-14 04:50:06 +00:00
weichen 8d2639d3c4 Merge authoritative main into the task branch
Why: include the current integration baseline before verification.

Evidence: fetched origin/main=5aae47ebca20ad1f3add3b080212cca7e1c6edf9.

Impact: integrate upstream changes without rewriting task history.

Refs: task-sync
2026-10-13 15:18:55 +00:00
weichen 252d9d4af1 Complete scenario-2 name-filter assertion and refresh the harness for v0.4.0
Why: with the four-repo v0.4.0 release live, the account.list query/name
passthrough (RDM #356) enables the deferred full assertion of scenario 2; the
harness also needed v0.4.0 adaptations discovered on the combo instance.

Evidence: tool-written rows on the card - full ten-scenario run on a disposable
rdm@84ca64f combo instance (25/25 PASS incl. 2b name-substring, 2c
case-insensitive owner filter, 2d limit truncation), and dev service status
(rdm@84ca64f running against the live dev database, auth gate 401).

Harness fixes: rdm.project.member.setRole renamed to set-role (RDM #350);
command envelope parsed via payload; re-login after the password gate (base
#195 revokes sessions on password change); RDM world provisioning via
rdm.project.create + bind with the domain admin self-removing so owner2 is the
sole owner (creator is seeded as owner); scenario 8b asserts allow:true in the
current response shape; scenario 10b now meaningful (base #195 admits member
conversations through RDM project membership).

Impact: integration script and task card only; no product code.

Refs: task feature/rdm-increment-settings-duties; RDM #356; base v0.4.0 tags.
2026-10-13 14:51:25 +00:00
weichen 3108e71496 Merge authoritative main into the task branch
Why: include the current integration baseline before verification.

Evidence: fetched origin/main=20e086e48b9cec7f300feba5342db7a0661a4d4e.

Impact: integrate upstream changes without rewriting task history.

Refs: task-sync
2026-10-13 14:17:48 +00:00
weichen 6bf1bbfb47 Add ten-scenario acceptance script and dual-key release plan
ci / svc-realcombo (pull_request) Successful in 2m9s
ci / test (pull_request) Successful in 5m8s
ci / test-pg (pull_request) Successful in 7m32s
Why: P8 执行准备——十场景验收脚本(多账号多角色走真实 dev HTTP:受管拒写/目录/成员保护/职责校验/批量整批拒/矩阵同源/系统动作拒覆盖/共享一致与私域)与四仓 v0.4.0 发版方案(双钥匙,用户执行)。
Evidence: bash -n 通过;命令端点对齐前端 rdmCommand(/api/commands/<id>)。
Impact: 新增验收脚本与任务卡发版方案段;无产品代码。
Refs: 提案 r1 §8/P8
2026-10-13 10:23:41 +00:00
weichen cca59c88dd Reject rewritten target history during local task recovery
Why: A LOCAL_READY receipt must permit normal target advancement without accepting a rewind or divergent target history after its observation.

Evidence: Two disposable real Git regressions reproduced erroneous successful recovery before the guard; all 18 task recovery tests pass afterward. Raw SELF receipts are in the task card.

Impact: Reject abnormal target ancestry before receipt import; preserve normal local recovery and strict delivery defaults. Correct stale implementation-stage documentation without activating the queue.

Refs: Documents implementation plan ba4044d U2; independent review R1 and R2; .task/feature-merge-queue-policy-draft.md
2026-10-13 08:44:02 +00:00
weichen d3d60f4a40 Verify serial delivery and isolated failures in disposable Git repositories
Why: waiting branches should keep their work while one candidate syncs and merges, and a conflict must not block unrelated healthy work.

Evidence: SELF three Git scenarios and governance suite captured by make evidence; real CI and three-business-task acceptance remain NOT_RUN.

Impact: local regression scenarios only; no automatic queue mutex, production merge or measured CI savings are claimed.

Refs: U6; tests/test_merge_queue_trial.py; .task/feature-merge-queue-policy-draft.md
2026-10-13 08:22:13 +00:00
weichen 4629b871db Connect delivery windows and recovery to the repository rules
Why: agents need consistent entrypoints and recording defaults to avoid retrying synchronization and CI outside the final delivery window.

Evidence: SELF generated-task-card red-green regression and governance suite recorded through make evidence; pending shared record created as Issue #518.

Impact: rules, task template and capability matrix stay explicit about pending activation, default strict startup, manual coordination and unchanged CI triggers.

Refs: U4; policy/merge-queue.md; .task/feature-merge-queue-policy-draft.md
2026-10-13 08:21:46 +00:00
weichen 1024c389f6 Keep fixed-candidate evidence outside the measured checkout
Why: recording checks in a frozen task card can change the candidate and invalidate current-head CI.

Evidence: SELF fixed-candidate capture regression and all 33 evidence tests passed; actual output and object digests are preserved by make evidence.

Impact: document preparation, external receipts and post-phase import using existing schema 1; no filesystem freeze or trust upgrade is introduced.

Refs: U3; policy/governance.md; .task/feature-merge-queue-policy-draft.md
2026-10-13 07:53:47 +00:00
weichen eb46bbb296 Separate local task recovery from delivery readiness
Why: an existing authorized task should not merge a moving target merely to resume local work, while new task startup and delivery remain strict.

Evidence: SELF red-green recovery and environment regressions; task, recovery, evidence and local-mode write-guard suites passed through make evidence.

Impact: add explicit LOCAL_READY and task-resume, validate worktree/card/baseline and receipt purpose, preserve schema 1 and prevent local receipts from starting or releasing tasks.

Refs: U2; policy/merge-queue.md; .task/feature-merge-queue-policy-draft.md
2026-10-13 07:42:12 +00:00
weichen 03cbeac8e6 Avoid new commits when the task already contains the integration baseline
Why: repeated task-sync calls changed HEAD and invalidated CI even when main had not advanced.

Evidence: SELF red-green regression and 58 task lifecycle tests recorded through make evidence in the task card.

Impact: sync still fetches and validates components, creates records only for an actual merge, and reports the complete final source SHA.

Refs: U1; policy/merge-queue.md; .task/feature-merge-queue-policy-draft.md
2026-10-13 07:05:06 +00:00
weichen c4a1bb6cfc Merge origin/main into the follow-up branch
ci / test-pg (pull_request) Successful in 8m11s
ci / svc-realcombo (pull_request) Successful in 1m53s
ci / test (pull_request) Successful in 4m55s
2026-10-13 04:58:17 +00:00
weichen ecf310fcf1 Fix multi-instance seeding for system-managed settings and repin backend
ci / svc-realcombo (pull_request) Successful in 2m22s
ci / test-pg (pull_request) Successful in 3m16s
ci / test (pull_request) Failing after 3m49s
Why: The follow-up CI exposed that backend #188 broke the Dev
multi-instance suite: serve --mock seeded runtime.mock at the user
scope, which system-managed settings now reject, so instances never
became healthy. Backend #190 seeds the startup flag into the system
scope; this PR repins and drops the now-invalid alice user-scope write.

Evidence: Backend #190 CI success at head 0af1ebc (GATE); this PR's
composite CI re-runs make test-multi-instance (GATE for the fix).

Impact: backend pin 741da4a; multi-instance test comments updated to
the system-managed regime.

Refs: Backend #188, #190.
2026-10-13 04:47:23 +00:00
weichenandCursor 7331323df4 Give pin materialize the CI git channel and a private database
Why: test-pg has no SSH known_hosts, and the shared agent_test database already holds another instance identity.
Evidence: SELF python3 -m unittest tests.test_ci_credentials.CheckoutTests.test_rdm_pin_fetch_is_three_shas_on_the_allowlist tests.integration.lifecycle.test_lifecycle_real (1 pass, 24 skip).
Impact: lifecycle children forward GIT_CONFIG_* only; serve stays env -i. Login and rdm.ping stay NOT_RUN.
Refs: .task/feature-svc-d3-real-scenarios.md
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-13 04:03:55 +00:00
weichen c1e82872ff Merge authoritative main into the task branch
Why: include the current integration baseline before verification.

Evidence: fetched origin/main=3fb8210f6495a78e70a67af3661bdfe9c00fb9de.

Impact: integrate upstream changes without rewriting task history.

Refs: task-sync
2026-10-13 03:04:15 +00:00
weichenandCursor 8dda121c0d Fetch and build the three pinned RDM SHAs in CI
Why: test-pg only cloned the default branch, so prev_sha and legacy_sha were never built or attested.
Evidence: SELF python3 -m unittest tests.test_ci_credentials tests.test_lifecycle_pin (11 tests, exit 0).
Impact: the lifecycle suite prints the combination inventory and keeps login and rdm.ping as NOT_RUN.
Refs: .task/feature-svc-d3-real-scenarios.md
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-13 02:59:44 +00:00
weichenandCursor 4bd8d2a340 Add credential scan and bootstrap retention tests
Why: A real process must not keep the caller DSN in its command line, environment, log, history, or svc.env. Domain events written by -bootstrap have to survive a later pin deploy.
Evidence: SELF unittest of the two new LifecycleRealTests methods exited 0.
Impact: The scan uses a sentinel that is not a live database password. Login and rdm.ping stay NOT_RUN.
Refs: tests/integration/lifecycle/test_lifecycle_real.py
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-13 02:56:12 +00:00
weichenandCursor f0e1e3f254 Add real mixed-batch, manifest-loss, and PG cross-bind tests
Why: A static dev deploy deleted the worktree before copying dist, so a mixed batch could not update the workbench. Missing manifests and a second instance on the same Postgres database must fail closed the same way on real artifacts.
Evidence: SELF unittest of the mixed batch, the three-entry manifest-loss case, and the PG cross-instance case exited 0. The PG case used a temporary cluster.
Impact: static dev deploys copy dist before recycling the worktree. Login and rdm.ping stay NOT_RUN.
Refs: tests/integration/lifecycle/test_lifecycle_real.py
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-13 02:54:05 +00:00
weichenandCursor 1bcdfe8779 Add real artifact rollback and phase reconciliation tests
Why: Stub journals do not prove that a real RDM binary rolls back after a switched fault, a failed build, or a candidate that exits on serve.
Evidence: SELF unittest of the three new LifecycleRealTests methods exited 0. Staging leaves the old pid and release in place; the next start clears that journal. Switched and an immediate serve exit both restore the previous real binary.
Impact: The crash candidate delegates version and identity to the real binary so the gate still sees a capable artifact. Login and rdm.ping stay NOT_RUN.
Refs: tests/integration/lifecycle/test_lifecycle_real.py
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-13 02:14:30 +00:00
weichenandCursor bf347c1dbc Add real pin tests for refuse and version switch
Why: The lifecycle gate only ran four realcombo cases. A legacy candidate and a missing or mismatched identity row must be refused before the old process stops, and the prev/sha pins must switch without changing the identity row.
Evidence: SELF unittest of the four LifecycleRealTests methods exited 0 against a private RDM clone. The pin moved to the identity merge and a later commit on the same backend pin, because the previous card-close SHAs build a binary with no ensure/verify.
Impact: make test still skips this class unless SVC_TEST_REAL, SVC_RDM_SRC_DIR and SVC_REAL_RDM_BIN are set. make test-lifecycle now runs the module. Login and rdm.ping stay NOT_RUN.
Refs: tests/integration/lifecycle/rdm.pin
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-13 02:05:05 +00:00
weichen e2e3d25418 Merge authoritative main into the task branch
Why: include the current integration baseline before verification.

Evidence: fetched origin/main=6193db1b548b964ab3133557ddbb9d83a3643d31.

Impact: integrate upstream changes without rewriting task history.

Refs: task-sync
2026-10-13 02:00:48 +00:00
weichen d480b2d058 Merge authoritative main into the task branch
Why: include the current integration baseline before verification.

Evidence: fetched origin/main=5aebedebeb963b5c01f39fd9122ec60dbe6d34d3.

Impact: integrate upstream changes without rewriting task history.

Refs: task-sync
2026-10-13 01:46:04 +00:00
weichen d1a7de09dd Merge authoritative main into the task branch
Why: include the current integration baseline before verification.

Evidence: fetched origin/main=5aebedebeb963b5c01f39fd9122ec60dbe6d34d3.

Impact: integrate upstream changes without rewriting task history.

Refs: task-sync
2026-10-13 01:42:28 +00:00
weichen 7719e807b8 Add svc.sh rdm-admin ledger inspection and trusted transfer
Why: U7 acceptance bootstrapped u7-admin into the shared dev runtime's
singleton rdm_admins ledger, locking the operator out of RDM admin pages
(rdm.role.list 400); recovery required forensics. KTD4 keeps base isAdmin
to audit-view only, so an operator-side trusted channel is needed.
Evidence: python3 -m unittest tests.test_svc_rdm_admin -v (25 OK, SELF);
live smoke on runtime/dev: show/status/typo-guard outputs verified.
Impact: new svc.sh <env> rdm-admin [show|transfer --to x] command, help
topic, status ledger line with stale-owner warning; no behavior change
for existing commands.
Refs: task card .task/feature-rdm-admin-lockout-recovery.md R1/R2
2026-10-13 01:27:26 +00:00
weichenandCursor ca0ab46d5b Pin the blobstore fallback and cover cross-instance uploads
Why: an unset object store must keep artifact bytes available to the other process, which the store-level test does not execute.
Evidence: cross_artifact_roundtrip failed with EOF on backend c6fb130 and passed on 46073d30 (SELF, isolated u7drill-k4).
Impact: Dev now builds the fixed backend. Second-instance write traffic stays closed.
Refs: modules/backend tests/integration/multi-instance/multi_instance_test.go
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-13 01:26:29 +00:00
weichenandCursor 67d6fd81cd Require the real lifecycle gate and fault rollback
ci / svc-realcombo (pull_request) Successful in 1m45s
ci / test-pg (pull_request) Successful in 2m53s
ci / test (pull_request) Successful in 4m45s
Why: The live deploy journal never called fault injection, and test-lifecycle failed closed on login so CI could not require the real combination cases.
Evidence: SELF python3 -m unittest tests.test_svc_u2.U2ReleaseTests -q exit 0 (35 ok, 1 skipped) on 3602a87; receipt sha256 9b5785577751e8e9e7947cf9700fb8854b1c80142f34273ae25f3097ee4c9aa8.
Impact: test-pg builds the Dev binary and runs make test-lifecycle. Login and full-track deploy without SVC_RDM_ORIGIN stay NOT_RUN. No live data move and no account CLI.
Refs: recovery plan D2/D3; Dev #485
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-13 01:14:27 +00:00
weichen 9526d35f9c Merge authoritative main into the task branch
Why: include the current integration baseline before verification.

Evidence: fetched origin/main=2c016931044bebdc4a114c1ca1127d1b40d4ab17.

Impact: integrate upstream changes without rewriting task history.

Refs: task-sync
2026-10-12 16:22:27 +00:00
weichenandCursor 1623a9a0fe Record the drill verdicts before opening the pull request
Why: The task card still said C4 and C5 had not run, which would make the pull request describe the wrong result.
Evidence: B6, C4, and C5 receipts already on the card (SELF). drill_driver tests pass after grouping the imports.
Impact: The card now states K4 failed and second-instance writes stay closed. No product code change.
Refs: feature/u7-ops-drills
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-12 16:22:18 +00:00
weichen adbce4d1ed Merge authoritative main into the task branch
Why: include the current integration baseline before verification.

Evidence: fetched origin/main=cd61bbb112eea6a210a64e84f2cef00b0d64bfc1.

Impact: integrate upstream changes without rewriting task history.

Refs: task-sync
2026-10-12 15:58:27 +00:00
weichen e7b969a905 Retain existing-store lifecycle tests during main synchronization
Why: Main D1 now shares the same explicit fixture initialization contract.

Evidence: Both real SQLite and temporary PostgreSQL initialization paths
were independently replayed; capabilities JSON assertions are preserved.

Impact: Resolve duplicate PG setup through the tested helper; preserve
all main lifecycle changes and the rollback directory protection.

Refs: Dev #483/#485; D1 existing-store identity contract
2026-10-12 15:57:05 +00:00
weichen 5a174f2b91 Initialize real lifecycle fixtures before existing-store identity probes
Why: Current RDM identity ensure/verify intentionally refuse missing
databases and schema; the old fixture invoked them on empty stores.

Evidence: Actual RDM red failure, real SQLite and isolated PostgreSQL
green replays, and independent review receipts in the task card.

Impact: Test setup only; normal serve initializes temporary stores and
is reaped before the unchanged identity/lifecycle assertions.

Refs: Dev #483/#484; current RDM D1 existing-store contract
2026-10-12 15:54:14 +00:00
weichenandCursor b4eb3a814c Migrate PostgreSQL before the identity probe in the real combo
ci / svc-realcombo (pull_request) Successful in 1m44s
ci / test-pg (pull_request) Successful in 3m37s
ci / test (pull_request) Successful in 4m36s
Why: identity ensure no longer creates the schema, so the probe has to follow a real serve that applies migrations.
Evidence: SELF python3 -m py_compile tests/test_svc_realcombo.py. GATE run 2663 job 3839 failed on the previous head with identity table missing.
Impact: the PostgreSQL check still passes the DSN only through the environment, after serve has migrated.
Refs: #485
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-12 15:36:41 +00:00
weichenandCursor 0a56150d01 Pass the exec-tool kill switch into the clean serve process
ci / svc-realcombo (pull_request) Successful in 1m42s
ci / test-pg (pull_request) Failing after 3m21s
ci / test (pull_request) Successful in 4m16s
Why: env -i dropped RDM_DISABLE_EXEC_TOOLS, so the real RDM binary exited immediately on runners without bwrap, and the capability probe now prints the JSON document.
Evidence: SELF bash -n scripts/svc.sh; python3 -m py_compile tests/test_svc_realcombo.py. GATE run 2656 job 3831 failed on the previous head before this fix.
Impact: serve and the lifecycle child forward that one switch; identity capabilities is checked as protocol 1 JSON.
Refs: #485
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-12 15:31:27 +00:00
weichenandCursor 1e4ba22faf Keep the backup drill going when uploads produce no artifact id
Why: A missing artifact id aborted the drill before recovery counts, the settle window, and the logical restore.
Evidence: backup-20261012-151951 reached promoted=1 and smoke 200, then StopIteration on an empty id (SELF). bash -n passed.
Impact: K4 stays failed when uploads do not return an id. The rest of the verdict is still written.
Refs: feature/u7-ops-drills
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-12 15:28:37 +00:00
weichenandCursor b10406a58f Merge origin/main into feature/svc-d1-identity-flow
ci / svc-realcombo (pull_request) Failing after 1m55s
ci / test (pull_request) Failing after 2m49s
ci / test-pg (pull_request) Failing after 4m9s
Why: main gained the real-combination CI gate after the previous sync, and this branch still has to carry that gate with the isolated identity calls.
Evidence: SELF python3 -m unittest recovery/identity/u2/deploy/pin/isolation — 100 tests OK (2 skipped); bash -n scripts/svc.sh.
Impact: identity ensure/verify still pass DSN only through the environment; stop waits for the port and can keep the desired state. CI keeps the lifecycle pin step and the svc-realcombo job.
Refs: #485
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-12 15:26:57 +00:00
weichenandCursor 205b30e24d Put the restored PostgreSQL socket on a short path
Why: The restored postmaster refused to start because the results-directory socket path exceeded the 107-byte Unix socket limit.
Evidence: restore/postgres.log from backup-20261012-150713 says the socket path is too long (SELF). bash -n passed.
Impact: The restored instance listens on /tmp/u7bk-18997, and cleanup removes that directory.
Refs: feature/u7-ops-drills
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-12 15:17:20 +00:00
weichen d4a83318b1 Merge authoritative main into the task branch
Why: include the current integration baseline before verification.

Evidence: fetched origin/main=99048dda1f48bccb3d5d798050d7beeea2907177.

Impact: integrate upstream changes without rewriting task history.

Refs: task-sync
2026-10-12 15:07:47 +00:00
weichenandCursor 7cc553d5a3 Merge origin/main into feature/svc-d1-identity-flow
ci / test-pg (pull_request) Successful in 1m52s
ci / test (pull_request) Failing after 2m51s
Why: main already has one release transaction, so this branch keeps that path and only isolates update and recover in a clean child.
Evidence: SELF bash -n scripts/svc.sh; python3 -m unittest identity/recover/deploy/u2/lifecycle pin 92 tests OK (2 skipped), then 66 tests OK after dropping the obsolete journal hook.
Impact: deploy uses releases/ and deploy.journal; the lifecycle child reconciles that journal before deploy or recover. Backend pin is 0f192a4.
Refs: #485
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-12 15:06:55 +00:00
weichenandCursor 19bc78d6c0 Add the C5 backup and PITR drill
Why: The checklist had no measured restore path for a physical backup, WAL archive, or pg_dump onto a new target.
Evidence: bash -n, go test in tests/ops/drill_driver, and run_backup_drill.sh --self-check passed locally (SELF). The timed run is recorded separately.
Impact: Isolated u7bk only. Upload responses keep artifactId so the restore check can download the same objects.
Refs: feature/u7-ops-drills
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-12 14:55:48 +00:00