The uups-bank-demo wave's SDD records (ledger, six task briefs and reports, review diffs) and the brainstorm design mockups were git-ignored, so they existed only on one sandbox VM and reached no remote — this repo had no remote at all until now. Removes `.superpowers/` from .gitignore and the `*` .gitignore the superpowers plugin writes inside .superpowers/sdd/; the second blocks the directory even with the first removed. Excluded as ephemeral local-server state, and now ignored by name: .last-port, .last-token (a 64-char session token for a brainstorm server on a port that is long gone), and the per-session state/ directories. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fnwzj6McD6kSkXwjUKFKxe
3.0 KiB
3.0 KiB
Task 6 report: deterministic V1 deployment state
Implemented
- Preserved the pre-reboot Solidity work:
DemoScript,DeployV1,SeedV1Demo,CheckState, and its 14-test preflight harness. - Added the Node manifest control plane.
finalize-manifest.mjsvalidates public manifests, blocks canonical overwrite before deploy, confirms the exactCREATEproxy transaction, receipt/block/chain/code/ERC-1967 slot, and atomically writes only the selected canonical manifest.select-manifest.mjsvalidates and atomically selects one canonical manifest without altering the other. - Added fixture-driven Node tests, local Make targets, and
deployments/.gitkeep. - Completed a live Anvil deployment/seed/check smoke: confirmed and active manifests were byte-identical, their deployment block was receipt block
2, and neither contained secret markers. Act 1 ended at Alice900e6, Bob500e6, liabilities/reserves1_400e6, surplus0.
Verification
node tools/test-finalize-manifest.mjs— 5/5 pass.forge fmt --check— pass.forge test --match-path test/ScriptPreflight.t.sol -vvv --force— 14/14 pass.npm_config_offline=true forge test --force— 57/57 pass (fresh final run).- Live smoke (Anvil
31337):make deploy-v1,make seed-v1,DEMO_EXPECTED_STAGE=v1 make check-state— all exit 0; receipt/manifest inspection passed. Anvil was stopped afterward. git diff --check— pass.
TDD evidence
- Preserved pre-reboot Solidity RED/GREEN history honestly: it predates this resumed session; I only re-ran its green 14-test preflight suite.
- Node initial RED:
node --test tools/test-finalize-manifest.mjsfailed withERR_MODULE_NOT_FOUNDfortools/finalize-manifest.mjs, as expected before implementation. GREEN: the new test suite passed after implementing finalizer/selector. - Atomic rename RED: the new atomic-writer test failed with
ENOENTbecause the writer did not accept the injected I/O boundary; GREEN: it passed after staging a same-directory temporary path and renaming it. - Proxy provenance RED: a
CALLrecord bearing the proxy address was incorrectly accepted; GREEN: the finalizer now requirestransactionType === "CREATE", and all five Node tests pass.
Changed files
Makefile; deployments/.gitkeep; script/lib/DemoScript.sol; script/DeployV1.s.sol; script/SeedV1Demo.s.sol; script/CheckState.s.sol; test/ScriptPreflight.t.sol; tools/finalize-manifest.mjs; tools/select-manifest.mjs; tools/test-finalize-manifest.mjs.
Self-review and concerns
- Reviewed the scoped diff and real Foundry broadcast shape. The only finding was missing explicit
CREATEfiltering; fixed with a RED/GREEN regression test. - Code-level Task 6 concerns: none. Base actor/RPC/keystore configuration was intentionally not added; it remains Task 12 per the stated ruling.
- Handoff blocker: staging/committing requires writing the Git worktree index outside the sandbox. The elevated
git addrequest was rejected because the approval service reported a usage-limit failure. No files were staged or committed.