diff --git a/.ai/README.md b/.ai/README.md index 78d919e2b..33dc44ed1 100644 --- a/.ai/README.md +++ b/.ai/README.md @@ -14,7 +14,7 @@ agent transcripts, generated queues, local reviews, or runtime state. | Commands and evidence selection | [verification skill](skills/hack-repo-verify/SKILL.md) | | Work units and experiment design | [work-unit skill](skills/hack-repo-work-unit/SKILL.md) | | Developer toolchain | [.hack/README.md](../.hack/README.md), root mise/package pins | -| v5 status and acceptance | [Linear program and issue index](https://linear.app/hackdance/document/hack-v5-program-measurable-acceptance-and-source-of-truth-26d5fb362f3e); local mapping `_docs/docs/plans/v5/linear-sync.md`, preserved ledger `_docs/docs/plans/v5/work-units.md` | +| v5 status and acceptance | Linear program and issue index (the "Hack v5 program: measurable acceptance and source of truth" document in the private workspace); local mapping `_docs/docs/plans/v5/linear-sync.md`, preserved ledger `_docs/docs/plans/v5/work-units.md` | | Consumer instructions installed by Hack | [agent-guidance.md](../docs/agent-guidance.md) | Contributor skills are authored in `.ai/skills//SKILL.md`. Relative symlinks diff --git a/.ai/skills/hack-repo-work-unit/SKILL.md b/.ai/skills/hack-repo-work-unit/SKILL.md index 52eced927..57911ac8a 100644 --- a/.ai/skills/hack-repo-work-unit/SKILL.md +++ b/.ai/skills/hack-repo-work-unit/SKILL.md @@ -19,9 +19,9 @@ Artifact: patch/docs/report and location of durable results Exit: completion criteria, experiment budget and any external evidence still required ``` -For v5, [Linear's Hack project](https://linear.app/hackdance/project/hack-8806a1b201f7/overview) +For v5, Linear's Hack project (private workspace) is the planning/status source of truth. Start with the -[program and issue index](https://linear.app/hackdance/document/hack-v5-program-measurable-acceptance-and-source-of-truth-26d5fb362f3e), +program and issue index (the "Hack v5 program: measurable acceptance and source of truth" document), which is available even in a fresh checkout without local planning artifacts. Use the local `_docs/docs/plans/v5/linear-sync.md` mapping to find the existing issue and milestone; preserve `_docs/docs/plans/v5/work-units.md` and linked source/evidence documents. diff --git a/.gitignore b/.gitignore index 2ffb4b6d8..7c4402028 100644 --- a/.gitignore +++ b/.gitignore @@ -78,6 +78,10 @@ zig-out/ .hack/.internal/ .hack/supervisor/ +# Hack-generated, machine-local runtime state in any project, including examples +**/.hack/.internal/ +**/.hack/.branch/ + SPECS/ _DOCS diff --git a/CHANGELOG.md b/CHANGELOG.md index ee8a358eb..82e2a329a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -112,7 +112,7 @@ ## 3.3.3 (2026-07-09) -* Merge pull request #61 from hack-dance/codex/event-agent-runtime-repair ([f1de71e](https://github.com/hack-dance/hack/commit/f1de71e)), closes [#61](https://github.com/hack-dance/hack/issues/61) +* Merge pull request #61 from hack-dance/codex/app-runtime-repair ([f1de71e](https://github.com/hack-dance/hack/commit/f1de71e)), closes [#61](https://github.com/hack-dance/hack/issues/61) * fix(cli): preserve usage code for lifecycle json ([f50f408](https://github.com/hack-dance/hack/commit/f50f408)) * fix(runtime): clean descendant lifecycle groups ([57f2358](https://github.com/hack-dance/hack/commit/57f2358)) * fix(runtime): isolate detached worktrees and recover orphan groups ([80a8dd2](https://github.com/hack-dance/hack/commit/80a8dd2)) @@ -827,7 +827,7 @@ ## 1.10.1 (2026-02-19) -* Fix gateway 502 for livenation ([a1bb858](https://github.com/hack-dance/hack/commit/a1bb858)) +* Fix gateway 502 for a project host ([a1bb858](https://github.com/hack-dance/hack/commit/a1bb858)) * Improve dashboard header and groups ([1e58826](https://github.com/hack-dance/hack/commit/1e58826)) * Merge branch 'main' into squircle ([f06f84c](https://github.com/hack-dance/hack/commit/f06f84c)) * Merge pull request #10 from hack-dance/squircle ([4539e92](https://github.com/hack-dance/hack/commit/4539e92)), closes [#10](https://github.com/hack-dance/hack/issues/10) diff --git a/docs/guides/native-candidate.md b/docs/guides/native-candidate.md index e2699abb7..ded85be95 100644 --- a/docs/guides/native-candidate.md +++ b/docs/guides/native-candidate.md @@ -1478,7 +1478,7 @@ line and drops nothing. Existing require successful initializer completion before dependent services start. Cache initializers receive immutable source mounts and writable named cache volumes; workspace installs that write elsewhere still require explicit volume mappings. -An isolated Event Agent trial reached 14-service native readiness, completed Google +An isolated trial of a real 14-service application reached native readiness, completed Google sign-in, and rendered authenticated search results and images over browser-trusted HTTPS. A normal `restart` kept its run and Redis data after a source edit. This does not establish every application workflow, crash recovery or comparative performance. @@ -1640,7 +1640,7 @@ without blocking owned cleanup. Missing or malformed delivery refuses, as do values for another service; ordinary graph startup environment delivery retains its nonempty requirement. -The running-project noninteractive path has a live Event Agent smoke check: +The running-project noninteractive path has a live smoke check against a real multi-service application: `hack run www -- bun --version` completed after a same-run restart, and a command exiting 7 returned its stdout and exit status. Both left no job resource and preserved the healthy parent graph and its volume identities. An diff --git a/docs/guides/v5-release-readiness.md b/docs/guides/v5-release-readiness.md index fdd274d9b..dfc930380 100644 --- a/docs/guides/v5-release-readiness.md +++ b/docs/guides/v5-release-readiness.md @@ -39,12 +39,12 @@ into the stable default or switch active projects to create a readiness claim. | Qualify rollback and dogfood | Retained working software selection, explicit project/data compatibility, staged reversible project opt-in and measured acceptance | Software rollback is not data rollback. Refusal by an older candidate is not a successful rollback. | | Publish or promote | Exact version/channel/SHA/artifact plus remaining checks and explicit approval | No blanket waiver, active-project switch or DNS/deployment authority. | -Track canonical acceptance under the [v5 program](https://linear.app/hackdance/issue/HACK-1112), -[distribution](https://linear.app/hackdance/issue/HACK-1124), -[agent integration](https://linear.app/hackdance/issue/HACK-1130), -[plugin guidance](https://linear.app/hackdance/issue/HACK-1132), -[MCP workflows](https://linear.app/hackdance/issue/HACK-1133) and -[agent cost](https://linear.app/hackdance/issue/HACK-1141). +Track canonical acceptance under the v5 program (HACK-1112), +distribution (HACK-1124), +agent integration (HACK-1130), +plugin guidance (HACK-1132), +MCP workflows (HACK-1133) and +agent cost (HACK-1141). Linear is canonical; this document supplies the reproducible gate structure. ## Staged, reversible primary-driver plan diff --git a/docs/performance.md b/docs/performance.md index 9957f9941..994e5f848 100644 --- a/docs/performance.md +++ b/docs/performance.md @@ -696,7 +696,7 @@ linked-worktree roots through the runtime interface, one pool per root. They do the `hack up` frontend, routing, application-specific images or cold host caches, and each fresh home still acquires the image, which is timed separately. -Prepared bases carry no application images. On an M3 (September 2026, one prepared pool, three +Prepared bases carry no application images. On an Apple silicon host (September 2026, one prepared pool, three repeats), `ensure-image` for `postgres:16-alpine` (114 MB archive) took 10.6 s cold. The engine load itself took 3.1 s and host digest and layer validation about 1.8 s; the rest was registry acquisition into the home's image cache. `node:22-alpine` (61 MB) took 6.3 s cold, with a 1.7 s @@ -712,7 +712,7 @@ image-free. The larger remaining costs are image acquisition and per-incarnation Revision 1 of the v5 matched application benchmark is frozen in the [application benchmark protocol](reference/application-benchmark-protocol.md) (HACK-1169). It fixes the exact candidate and stable artifacts, the host and engine -versions, the Event Agent and small-fixture workloads, capacities, cache classes, a +versions, the large-application and small-fixture workloads, capacities, cache classes, a 10-round rotated order, sample counts, observer accounting and the program budgets. It records no results. diff --git a/docs/reference/application-benchmark-protocol.md b/docs/reference/application-benchmark-protocol.md index 6b5489058..57fc30853 100644 --- a/docs/reference/application-benchmark-protocol.md +++ b/docs/reference/application-benchmark-protocol.md @@ -19,7 +19,7 @@ cannot meet this protocol is reported as inconclusive, not adjusted after the fa ## Artifacts Every lane runs an exact released artifact, installed into its own isolated home and -state paths. A lane never uses whatever `hack` is on `PATH`; the M3 host currently has +state paths. A lane never uses whatever `hack` is on `PATH`; the benchmark host currently has 4.2.0 installed, and that installation is not a lane. Before each cohort, the harness must verify the SHA-256 digest of each downloaded asset and record the executable's reported version. A mismatch refuses the cohort. @@ -50,7 +50,7 @@ read from the host on 2026-10-19: Before each cohort, the harness records these values again. If any of them differs, the cohort is refused and a new revision is needed. Results from another host, -including the M5 Max development host, are not revision-1 results. +including other development hosts, are not revision-1 results. Only one stateful benchmark owner may use the host and its runtimes at a time. Other agents' runtime tests, builds and Docker work must not overlap a cohort. Independent @@ -96,7 +96,7 @@ Two workloads run in every lane, and each workload is compared against every req baseline. A cohort records each workload's pin, and every lane in that cohort uses the same pin. -**Event Agent.** The actual application configuration, not a reduced copy. The cohort +**Large application.** The actual application configuration, not a reduced copy. The cohort records the application commit and a digest of its configuration. Its expected shape is 14 services, 9 HTTP health checks and 2 initializers. A different shape refuses the cohort until the protocol is revised. Credentials come only through authorized managed diff --git a/docs/reference/native-compose-commands.md b/docs/reference/native-compose-commands.md index bafd3281e..c751b1217 100644 --- a/docs/reference/native-compose-commands.md +++ b/docs/reference/native-compose-commands.md @@ -122,7 +122,7 @@ The maintained `native-config-routing` Docker fixture additionally observes a running one-off with no routing keys, exact exit 17 and removal, unchanged main and sibling container IDs and HTTPS markers, completed claims, retained data and recovery from a deliberately blocked one-off removal. This fixture passed on an -M3 macOS host with the current compiled CLI and its matching compiler. That +Apple silicon macOS host with the current compiled CLI and its matching compiler. That qualification is separate from unit tests and does not establish cold routed-run support or whole-product parity. diff --git a/docs/versions/v5/guides/native-candidate.md b/docs/versions/v5/guides/native-candidate.md index f63ea7a41..10e5350cf 100644 --- a/docs/versions/v5/guides/native-candidate.md +++ b/docs/versions/v5/guides/native-candidate.md @@ -762,7 +762,7 @@ line and drops nothing. Existing require successful initializer completion before dependent services start. Cache initializers receive immutable source mounts and writable named cache volumes; workspace installs that write elsewhere still require explicit volume mappings. -An isolated Event Agent trial reached 14-service native readiness, completed Google +An isolated trial of a real 14-service application reached native readiness, completed Google sign-in, and rendered authenticated search results and images over browser-trusted HTTPS. A normal `restart` kept its run and Redis data after a source edit. This does not establish every application workflow, crash recovery or comparative performance. @@ -896,7 +896,7 @@ without blocking owned cleanup. Missing or malformed delivery refuses, as do values for another service; ordinary graph startup environment delivery retains its nonempty requirement. -The running-project noninteractive path has a live Event Agent smoke check: +The running-project noninteractive path has a live smoke check against a real multi-service application: `hack run www -- bun --version` completed after a same-run restart, and a command exiting 7 returned its stdout and exit status. Both left no job resource and preserved the healthy parent graph and its volume identities. An diff --git a/docs/versions/v5/originals/docs/guides/native-candidate.md b/docs/versions/v5/originals/docs/guides/native-candidate.md index b7bb3ae49..01529cf17 100644 --- a/docs/versions/v5/originals/docs/guides/native-candidate.md +++ b/docs/versions/v5/originals/docs/guides/native-candidate.md @@ -641,7 +641,7 @@ explicit native selections described below. Existing require successful initializer completion before dependent services start. Cache initializers receive immutable source mounts and writable named cache volumes; workspace installs that write elsewhere still require explicit volume mappings. -An isolated Event Agent trial reached 14-service native readiness, completed Google +An isolated trial of a real 14-service application reached native readiness, completed Google sign-in, and rendered authenticated search results and images over browser-trusted HTTPS. A normal `restart` kept its run and Redis data after a source edit. This does not establish every application workflow, crash recovery or comparative performance. @@ -763,7 +763,7 @@ without blocking owned cleanup. Missing or malformed delivery refuses, as do values for another service; ordinary graph startup environment delivery retains its nonempty requirement. -The running-project noninteractive path has a live Event Agent smoke check: +The running-project noninteractive path has a live smoke check against a real multi-service application: `hack run www -- bun --version` completed after a same-run restart, and a command exiting 7 returned its stdout and exit status. Both left no job resource and preserved the healthy parent graph and its volume identities. An diff --git a/docs/versions/v5/originals/next6/docs/guides/native-candidate.md b/docs/versions/v5/originals/next6/docs/guides/native-candidate.md index 5110eeca2..69e5079f2 100644 --- a/docs/versions/v5/originals/next6/docs/guides/native-candidate.md +++ b/docs/versions/v5/originals/next6/docs/guides/native-candidate.md @@ -770,7 +770,7 @@ line and drops nothing. Existing require successful initializer completion before dependent services start. Cache initializers receive immutable source mounts and writable named cache volumes; workspace installs that write elsewhere still require explicit volume mappings. -An isolated Event Agent trial reached 14-service native readiness, completed Google +An isolated trial of a real 14-service application reached native readiness, completed Google sign-in, and rendered authenticated search results and images over browser-trusted HTTPS. A normal `restart` kept its run and Redis data after a source edit. This does not establish every application workflow, crash recovery or comparative performance. @@ -904,7 +904,7 @@ without blocking owned cleanup. Missing or malformed delivery refuses, as do values for another service; ordinary graph startup environment delivery retains its nonempty requirement. -The running-project noninteractive path has a live Event Agent smoke check: +The running-project noninteractive path has a live smoke check against a real multi-service application: `hack run www -- bun --version` completed after a same-run restart, and a command exiting 7 returned its stdout and exit status. Both left no job resource and preserved the healthy parent graph and its volume identities. An diff --git a/examples/basic/.hack/.internal/compose.override.yml b/examples/basic/.hack/.internal/compose.override.yml deleted file mode 100644 index 9513c5d24..000000000 --- a/examples/basic/.hack/.internal/compose.override.yml +++ /dev/null @@ -1,16 +0,0 @@ -services: - example-basic: - dns: - - 172.30.0.2 - extra_hosts: - example.hack: 172.30.0.3 - example.hack.gy: 172.30.0.3 - volumes: - - /Users/hack/.hack/caddy/pki/caddy-local-authority.crt:/etc/hack/ca/caddy-local-authority.crt:ro - environment: - SSL_CERT_FILE: /etc/hack/ca/caddy-local-authority.crt - SSL_CERT_DIR: /etc/hack/ca - NODE_EXTRA_CA_CERTS: /etc/hack/ca/caddy-local-authority.crt - REQUESTS_CA_BUNDLE: /etc/hack/ca/caddy-local-authority.crt - CURL_CA_BUNDLE: /etc/hack/ca/caddy-local-authority.crt - GIT_SSL_CAINFO: /etc/hack/ca/caddy-local-authority.crt diff --git a/examples/next-app/.hack/.internal/compose.override.yml b/examples/next-app/.hack/.internal/compose.override.yml deleted file mode 100644 index 8cd053232..000000000 --- a/examples/next-app/.hack/.internal/compose.override.yml +++ /dev/null @@ -1,71 +0,0 @@ -services: - db: - dns: - - 172.30.0.2 - extra_hosts: - examples-next-app.hack: 172.30.0.3 - volumes: - - /Users/hack/.hack/caddy/pki/caddy-local-authority.crt:/etc/hack/ca/caddy-local-authority.crt:ro - environment: - SSL_CERT_FILE: /etc/hack/ca/caddy-local-authority.crt - SSL_CERT_DIR: /etc/hack/ca - NODE_EXTRA_CA_CERTS: /etc/hack/ca/caddy-local-authority.crt - REQUESTS_CA_BUNDLE: /etc/hack/ca/caddy-local-authority.crt - CURL_CA_BUNDLE: /etc/hack/ca/caddy-local-authority.crt - GIT_SSL_CAINFO: /etc/hack/ca/caddy-local-authority.crt - deps: - dns: - - 172.30.0.2 - extra_hosts: - examples-next-app.hack: 172.30.0.3 - volumes: - - /Users/hack/.hack/caddy/pki/caddy-local-authority.crt:/etc/hack/ca/caddy-local-authority.crt:ro - environment: - SSL_CERT_FILE: /etc/hack/ca/caddy-local-authority.crt - SSL_CERT_DIR: /etc/hack/ca - NODE_EXTRA_CA_CERTS: /etc/hack/ca/caddy-local-authority.crt - REQUESTS_CA_BUNDLE: /etc/hack/ca/caddy-local-authority.crt - CURL_CA_BUNDLE: /etc/hack/ca/caddy-local-authority.crt - GIT_SSL_CAINFO: /etc/hack/ca/caddy-local-authority.crt - next-app: - dns: - - 172.30.0.2 - extra_hosts: - examples-next-app.hack: 172.30.0.3 - volumes: - - /Users/hack/.hack/caddy/pki/caddy-local-authority.crt:/etc/hack/ca/caddy-local-authority.crt:ro - environment: - SSL_CERT_FILE: /etc/hack/ca/caddy-local-authority.crt - SSL_CERT_DIR: /etc/hack/ca - NODE_EXTRA_CA_CERTS: /etc/hack/ca/caddy-local-authority.crt - REQUESTS_CA_BUNDLE: /etc/hack/ca/caddy-local-authority.crt - CURL_CA_BUNDLE: /etc/hack/ca/caddy-local-authority.crt - GIT_SSL_CAINFO: /etc/hack/ca/caddy-local-authority.crt - ops: - dns: - - 172.30.0.2 - extra_hosts: - examples-next-app.hack: 172.30.0.3 - volumes: - - /Users/hack/.hack/caddy/pki/caddy-local-authority.crt:/etc/hack/ca/caddy-local-authority.crt:ro - environment: - SSL_CERT_FILE: /etc/hack/ca/caddy-local-authority.crt - SSL_CERT_DIR: /etc/hack/ca - NODE_EXTRA_CA_CERTS: /etc/hack/ca/caddy-local-authority.crt - REQUESTS_CA_BUNDLE: /etc/hack/ca/caddy-local-authority.crt - CURL_CA_BUNDLE: /etc/hack/ca/caddy-local-authority.crt - GIT_SSL_CAINFO: /etc/hack/ca/caddy-local-authority.crt - redis: - dns: - - 172.30.0.2 - extra_hosts: - examples-next-app.hack: 172.30.0.3 - volumes: - - /Users/hack/.hack/caddy/pki/caddy-local-authority.crt:/etc/hack/ca/caddy-local-authority.crt:ro - environment: - SSL_CERT_FILE: /etc/hack/ca/caddy-local-authority.crt - SSL_CERT_DIR: /etc/hack/ca - NODE_EXTRA_CA_CERTS: /etc/hack/ca/caddy-local-authority.crt - REQUESTS_CA_BUNDLE: /etc/hack/ca/caddy-local-authority.crt - CURL_CA_BUNDLE: /etc/hack/ca/caddy-local-authority.crt - GIT_SSL_CAINFO: /etc/hack/ca/caddy-local-authority.crt diff --git a/packages/runtime-core/README.md b/packages/runtime-core/README.md index ebc850501..726192c33 100644 --- a/packages/runtime-core/README.md +++ b/packages/runtime-core/README.md @@ -891,7 +891,7 @@ two concurrent routed graphs still require native acceptance. A bounded native reference control qualifies one graph with two networks and two declared hostnames: both forward real HTTP over Unix publication, followed by authenticated cleanup, foreground exit and independently verified resource absence. This does not qualify -actual Event Agent routing, TLS, two routed graphs, restore, publisher-exit/partial +real application routing, TLS, two routed graphs, restore, publisher-exit/partial startup failure, owner-crash recovery, scale or performance. No global Caddy configuration or trust installation is performed by this contract. diff --git a/packages/runtime-core/src/project/compose/routing.rs b/packages/runtime-core/src/project/compose/routing.rs index 4df037e67..16d7bcb6d 100644 --- a/packages/runtime-core/src/project/compose/routing.rs +++ b/packages/runtime-core/src/project/compose/routing.rs @@ -124,32 +124,32 @@ mod tests { fn normalizes_search_pair_and_supported_ports() { for port in [1, 6980, 65535] { let value = labels( - "Search.Event-Agent.Hack., search.event-agent.localhost", + "Search.Example-App.Hack., search.example-app.localhost", &port.to_string(), ); let route = parse(Some(&value)).unwrap().unwrap(); assert_eq!(route.port, port); assert_eq!( route.hostnames, - ["search.event-agent.hack", "search.event-agent.localhost"] + ["search.example-app.hack", "search.example-app.localhost"] ); } } #[test] - fn accepts_all_actual_event_agent_route_shapes() { + fn accepts_multi_subdomain_route_shapes() { for (prefix, port) in [ - ("consumer-sessions.", 3333), + ("sessions.", 3333), ("chat.", 3001), ("", 3000), ("chat-2.", 9001), - ("data-sync.", 9002), - ("crawl.", 9007), + ("sync.", 9002), + ("worker.", 9007), ("core.", 6969), ("search.", 6980), ("ws.", 6970), ] { - let hosts = format!("{prefix}livenation.hack, {prefix}livenation.hack.gy"); + let hosts = format!("{prefix}example-app.hack, {prefix}example-app.hack.gy"); let route = parse(Some(&labels(&hosts, &port.to_string()))) .unwrap() .unwrap(); diff --git a/packages/runtime-core/src/project/registry.rs b/packages/runtime-core/src/project/registry.rs index c60fd9020..6444fc45d 100644 --- a/packages/runtime-core/src/project/registry.rs +++ b/packages/runtime-core/src/project/registry.rs @@ -323,7 +323,7 @@ mod tests { #[test] fn canonical_scoped_default_and_environment_references() { - let input = "# discarded\nregistry=https://registry.npmjs.org\n@event-agent:registry = https://npm.pkg.github.com/\n//npm.pkg.github.com/:_authToken=${GITHUB_TOKEN}\nalways-auth=true\n"; + let input = "# discarded\nregistry=https://registry.npmjs.org\n@example-app:registry = https://npm.pkg.github.com/\n//npm.pkg.github.com/:_authToken=${GITHUB_TOKEN}\nalways-auth=true\n"; let parsed = parse(input).unwrap(); assert_eq!( parsed.required_environment, @@ -331,7 +331,7 @@ mod tests { ); assert_eq!( parsed.template, - "//npm.pkg.github.com/:_authToken=${GITHUB_TOKEN}\n@event-agent:registry=https://npm.pkg.github.com/\nalways-auth=true\nregistry=https://registry.npmjs.org/\n" + "//npm.pkg.github.com/:_authToken=${GITHUB_TOKEN}\n@example-app:registry=https://npm.pkg.github.com/\nalways-auth=true\nregistry=https://registry.npmjs.org/\n" ); assert_eq!( parsed.sha256, diff --git a/packages/runtime-core/src/provider/graph/foreground/native_test/partial_stop.rs b/packages/runtime-core/src/provider/graph/foreground/native_test/partial_stop.rs index 8d5519e99..f14df79bb 100644 --- a/packages/runtime-core/src/provider/graph/foreground/native_test/partial_stop.rs +++ b/packages/runtime-core/src/provider/graph/foreground/native_test/partial_stop.rs @@ -158,7 +158,7 @@ fn resource(engine: &graph::Engine<'_>, receipt: &graph::Receipt, key: &str) -> } #[test] -#[ignore = "fresh owned M3 pool, pinned image, and external 300-second watchdog required"] +#[ignore = "fresh owned macOS development pool, pinned image, and external 300-second watchdog required"] fn exact_partial_stop_recovers_only_on_immediate_successor_boot() { if std::env::var_os(CHILD).is_some() { child(); diff --git a/packages/runtime-core/src/provider/graph/foreground/native_test/stop14.rs b/packages/runtime-core/src/provider/graph/foreground/native_test/stop14.rs index 5b87c093a..19d8d0718 100644 --- a/packages/runtime-core/src/provider/graph/foreground/native_test/stop14.rs +++ b/packages/runtime-core/src/provider/graph/foreground/native_test/stop14.rs @@ -1,6 +1,6 @@ //! HACK-1212 foreground-owner, fourteen-service retaining-cleanup baseline. //! -//! Run only against a separately prepared, owned M3 development pool with a +//! Run only against a separately prepared, owned macOS development pool with a //! pinned, already loaded local image and an external 240-second watchdog. //! Set HACK_STOP14_TEST_ROOT, HACK_STOP14_TEST_BINARY (current candidate CLI), //! and HACK_STOP14_TEST_IMAGE (sha256 content ID). @@ -96,7 +96,7 @@ fn write_first_marker(engine: &graph::Engine<'_>, receipt: &graph::Receipt) -> S } #[test] -#[ignore = "Separate owned M3 pool, pinned local image, and external 240-second watchdog required"] +#[ignore = "Separate owned macOS development pool, pinned local image, and external 240-second watchdog required"] fn fourteen_services_retain_named_data_across_cleanup_and_restore() { let began = Instant::now(); let candidate = diff --git a/packages/runtime-core/src/provider/graph/routes.rs b/packages/runtime-core/src/provider/graph/routes.rs index a9cd8c9ce..a087e13df 100644 --- a/packages/runtime-core/src/provider/graph/routes.rs +++ b/packages/runtime-core/src/provider/graph/routes.rs @@ -94,7 +94,7 @@ mod tests { fn fixture() -> (BTreeMap, Graph) { // Deserialize the real public plan shape, without filesystem or Engine effects. - let service = json!({"active":true,"profiles":[],"dependencies":{},"mounts":[],"environment":{},"environment_files":[],"environment_precedence":"test","ports":[],"exposed_ports":[],"networks":["default"],"network_mode":"project-networks","limits":{},"read_only":true,"init":true,"restart":"no","labels":{"caddy":{"environment_references":[],"literal_redacted":true},"caddy.reverse_proxy":{"environment_references":[],"literal_redacted":true},"caddy.tls":{"environment_references":[],"literal_redacted":true}},"routing":{"hostnames":["search.livenation.hack","search.livenation.hack.gy"],"port":6980},"healthcheck":{"disabled":false,"native_http":{"port":6980,"path":"/search/health","interval_ms":100,"timeout_ms":500,"retries":3,"start_period_ms":0}}}); + let service = json!({"active":true,"profiles":[],"dependencies":{},"mounts":[],"environment":{},"environment_files":[],"environment_precedence":"test","ports":[],"exposed_ports":[],"networks":["default"],"network_mode":"project-networks","limits":{},"read_only":true,"init":true,"restart":"no","labels":{"caddy":{"environment_references":[],"literal_redacted":true},"caddy.reverse_proxy":{"environment_references":[],"literal_redacted":true},"caddy.tls":{"environment_references":[],"literal_redacted":true}},"routing":{"hostnames":["search.example-app.hack","search.example-app.hack.gy"],"port":6980},"healthcheck":{"disabled":false,"native_http":{"port":6980,"path":"/search/health","interval_ms":100,"timeout_ms":500,"retries":3,"start_period_ms":0}}}); let service: project::ServicePlan = serde_json::from_value(service).unwrap(); let plan = BTreeMap::from([("search".into(), service)]); let graph = Graph { diff --git a/packages/runtime-core/src/provider/graph/tests.rs b/packages/runtime-core/src/provider/graph/tests.rs index d62900b92..c8e9da88e 100644 --- a/packages/runtime-core/src/provider/graph/tests.rs +++ b/packages/runtime-core/src/provider/graph/tests.rs @@ -1121,7 +1121,7 @@ fn launch( ) } #[test] -#[ignore = "Manual owned M3 development VM, pinned Bun image and external watchdog required"] +#[ignore = "Manual owned macOS development VM, pinned Bun image and external watchdog required"] fn owned_driver_live() -> Result<(), CandidateError> { let candidate = Candidate::discover(Path::new( &std::env::var("HACK_LOCAL_TEST_ROOT").expect("root"), @@ -1495,7 +1495,7 @@ fn owned_driver_live() -> Result<(), CandidateError> { })(); state::write( &evidence.join(format!("driver-{run}.json")), - &json!({"passed":result.is_ok()&&cleanup.is_ok(),"run":run,"failed_run":failed,"cleanup_confirmed":cleanup.is_ok(),"bidirectional_workload_admission":result.is_ok(),"restore_and_archive":result.is_ok()&&cleanup.is_ok(),"archive_export":cleanup.is_ok(),"retention_recovery":cleanup.is_ok(),"abrupt_vm_loss":result.is_ok(),"receipts":result.as_ref().ok(),"failure":result.as_ref().err().map(|e|(&e.code,&e.message)),"scope":"Public graph driver, explicit restart identity/persistence, simulated missing create receipt, foreign-name refusal; not actual process-kill or Event Agent qualification"}), + &json!({"passed":result.is_ok()&&cleanup.is_ok(),"run":run,"failed_run":failed,"cleanup_confirmed":cleanup.is_ok(),"bidirectional_workload_admission":result.is_ok(),"restore_and_archive":result.is_ok()&&cleanup.is_ok(),"archive_export":cleanup.is_ok(),"retention_recovery":cleanup.is_ok(),"abrupt_vm_loss":result.is_ok(),"receipts":result.as_ref().ok(),"failure":result.as_ref().err().map(|e|(&e.code,&e.message)),"scope":"Public graph driver, explicit restart identity/persistence, simulated missing create receipt, foreign-name refusal; not actual process-kill or real application qualification"}), )?; cleanup?; result.map(|_| ()) diff --git a/packages/runtime-core/src/provider/graph_probe_test.rs b/packages/runtime-core/src/provider/graph_probe_test.rs index 5abf41675..ea512e5f8 100644 --- a/packages/runtime-core/src/provider/graph_probe_test.rs +++ b/packages/runtime-core/src/provider/graph_probe_test.rs @@ -410,7 +410,7 @@ trap - EXIT })(); state::write( &evidence_dir.join(format!("{owner}.json")), - &json!({"passed":result.is_ok() && cleanup.is_ok(),"network":network,"volume":volume,"containers":names,"image":image,"phase":phase,"failure":result.as_ref().err().map(|e| &e.code),"cleanup_confirmed":cleanup.is_ok(),"scope":"Synthetic init/SQLite/web/check pipeline and VM restart; not Event Agent or host-loopback acceptance"}), + &json!({"passed":result.is_ok() && cleanup.is_ok(),"network":network,"volume":volume,"containers":names,"image":image,"phase":phase,"failure":result.as_ref().err().map(|e| &e.code),"cleanup_confirmed":cleanup.is_ok(),"scope":"Synthetic init/SQLite/web/check pipeline and VM restart; not real application or host-loopback acceptance"}), )?; cleanup?; result diff --git a/packages/runtime-core/src/provider/lifecycle.rs b/packages/runtime-core/src/provider/lifecycle.rs index 3a4db7be1..ff3ddcb5b 100644 --- a/packages/runtime-core/src/provider/lifecycle.rs +++ b/packages/runtime-core/src/provider/lifecycle.rs @@ -3144,7 +3144,7 @@ printf 'verified-cache\n' #[cfg(all(target_os = "macos", target_arch = "aarch64"))] #[test] - #[ignore = "Manual owned M3 fixture only; requires explicit candidate root and host watchdog"] + #[ignore = "Manual owned macOS fixture only; requires explicit candidate root and host watchdog"] fn owned_provider_exit_recovery() { let path = std::env::var("HACK_LOCAL_CRASH_FIXTURE_ROOT").expect("explicit fixture root"); let candidate = Candidate::discover(Path::new(&path)).unwrap(); diff --git a/packages/runtime-core/src/provider/source_job_test.rs b/packages/runtime-core/src/provider/source_job_test.rs index 6dae28f98..5b5972dbc 100644 --- a/packages/runtime-core/src/provider/source_job_test.rs +++ b/packages/runtime-core/src/provider/source_job_test.rs @@ -366,7 +366,7 @@ fn owned_immutable_source_job_live() -> Result<(), CandidateError> { created_marker = false; let restored = capture()?; SyncSession::open(&candidate, &namespace, &source)?.apply(&restored, false)?; - evidence = json!({"scope":"actual selected source and durable journal; busybox job, not Event Agent service startup", + evidence = json!({"scope":"actual selected source and durable journal; busybox job, not real application service startup", "revision_a":revision_a,"revision_b":revision_b,"acceptance":acceptance,"receipt":receipt, "retry_identical":true,"stale_refusal":rejected.code,"unpublished_refusal":unready.code, "positive_events":positive_events,"stale_events":stale_events,"unpublished_events":unpublished_events}); diff --git a/packages/runtime-core/src/provider/source_watch_test.rs b/packages/runtime-core/src/provider/source_watch_test.rs index fdd1e22a4..31d04c860 100644 --- a/packages/runtime-core/src/provider/source_watch_test.rs +++ b/packages/runtime-core/src/provider/source_watch_test.rs @@ -285,7 +285,7 @@ fn owned_source_watch_live() -> Result<(), CandidateError> { .join("review/wu05/application-watch.json"); state::write( &evidence, - &json!({"scope":"container inotify callback over actual selected source; not Event Agent service startup", + &json!({"scope":"container inotify callback over actual selected source; not real application service startup", "source":source,"marker":name,"receipts":receipts,"observations":observations, "record":record,"passed":result.is_ok() && cleanup.is_ok()}), )?; diff --git a/packages/runtime-core/tests/project_contract.rs b/packages/runtime-core/tests/project_contract.rs index 19796ef22..90e73730d 100644 --- a/packages/runtime-core/tests/project_contract.rs +++ b/packages/runtime-core/tests/project_contract.rs @@ -68,14 +68,14 @@ const BASIC: &str = "services:\n web:\n image: alpine:3.21\n command: [ec #[test] fn local_https_labels_have_typed_review_intent_without_publication() { - let labels = " labels:\n caddy: 'search.livenation.hack, search.livenation.hack.gy'\n caddy.reverse_proxy: '{{upstreams 6980}}'\n caddy.tls: internal\n"; + let labels = " labels:\n caddy: 'search.example-app.hack, search.example-app.hack.gy'\n caddy.reverse_proxy: '{{upstreams 6980}}'\n caddy.tls: internal\n"; let fixture = Fixture::new(&format!("{BASIC}{labels}")); let report = fixture.plan(); let route = report.plan.services["web"].routing.as_ref().unwrap(); assert_eq!(route.port, 6980); assert_eq!( route.hostnames, - ["search.livenation.hack", "search.livenation.hack.gy"] + ["search.example-app.hack", "search.example-app.hack.gy"] ); assert!( report diff --git a/scripts/application-benchmark-protocol.json b/scripts/application-benchmark-protocol.json index 34e1e7c83..60114a71f 100644 --- a/scripts/application-benchmark-protocol.json +++ b/scripts/application-benchmark-protocol.json @@ -77,7 +77,7 @@ ], "workloads": [ { - "id": "event-agent", + "id": "large-application", "lanes": [ "candidate", "compose", diff --git a/scripts/check-application-benchmark-protocol.py b/scripts/check-application-benchmark-protocol.py index 58b11dd0f..cdef3f89a 100644 --- a/scripts/check-application-benchmark-protocol.py +++ b/scripts/check-application-benchmark-protocol.py @@ -69,7 +69,7 @@ MIN_OBSERVER_FACTOR = 2 MIN_OBSERVER_WINDOW_SECONDS = 600 WORKLOAD_SHAPES = { - "event-agent": {"services": 14, "http_health_checks": 9, "initializers": 2}, + "large-application": {"services": 14, "http_health_checks": 9, "initializers": 2}, "small-fixture": {"services": 2, "http_health_checks": 1, "initializers": 1}, } # Gate C phases. "restore" is an ordinary up after a retaining down, with data readback. @@ -130,12 +130,12 @@ FROZEN_CANDIDATE_CAPACITY = {"profile": "development", "vcpus": 4, "memory_mib": 6144, "storage_gib": 32, "overlay_gib": 10} FROZEN_WORKLOAD_PINS = { - "event-agent": "application commit and configuration digest recorded per cohort; identical across lanes", + "large-application": "application commit and configuration digest recorded per cohort; identical across lanes", "small-fixture": "image oven/bun:1.4.2-slim with its image ID recorded per cohort, pull never", } # Frozen correctness checks per workload. A revision may add checks, never drop one. FROZEN_CORRECTNESS = { - "event-agent": ( + "large-application": ( "all declared long-running services running and every HTTP health check healthy", "both initializers exited 0", "routed sign-in page returns HTTP 200", diff --git a/scripts/docs/versions.json b/scripts/docs/versions.json index 8075fc2d6..282ca0ff5 100644 --- a/scripts/docs/versions.json +++ b/scripts/docs/versions.json @@ -1162,7 +1162,7 @@ "slug": "guides/native-candidate", "title": "Native candidate limits", "snapshot": "docs/versions/v5/originals/next6/docs/guides/native-candidate.md", - "sha256": "68c11f2f7c107e58d6832fce7daacb42f22fac87f0de907309bffa5860044e4e" + "sha256": "59b191d20027c12bdcd840ef19b6e60ac5d5e25125c3f9afa6c847e0f25a522a" }, { "file": "docs/reference/native-config-import.md", diff --git a/src/lib/project.ts b/src/lib/project.ts index ebf6ce32a..885ec255c 100644 --- a/src/lib/project.ts +++ b/src/lib/project.ts @@ -390,8 +390,8 @@ export interface ProjectInternalConfig { * * Example: * { - * "content.staging.livenationapi.com": "host-gateway", - * "loyalty.staging.livenationapi.com": "host-gateway" + * "content.staging.example.test": "host-gateway", + * "api.staging.example.test": "host-gateway" * } */ readonly extraHosts?: Record; diff --git a/tests/doctor-command.test.ts b/tests/doctor-command.test.ts index 0376b7266..f13d7daa9 100644 --- a/tests/doctor-command.test.ts +++ b/tests/doctor-command.test.ts @@ -564,13 +564,13 @@ test("doctor guidance preserves project-scoped prune commands", () => { name: "runtime hygiene", status: "warn", message: - "1 orphaned runtime project: msp--old (run: hack projects prune --project msp)", + "1 orphaned runtime project: sample--old (run: hack projects prune --project sample)", }, ], }); expect(guidance.temporaryBreakage).toEqual([ - "hack projects prune --project msp", + "hack projects prune --project sample", ]); }); @@ -802,7 +802,7 @@ test("recovery next steps quote repo paths for copy-paste safety", () => { test("recovery next steps preserve already scoped projects prune", () => { const nextSteps = buildRecoveryNextSteps({ guidance: { - temporaryBreakage: ["hack projects prune --project msp", "hack down"], + temporaryBreakage: ["hack projects prune --project sample", "hack down"], configurationRepair: ["hack doctor --fix", "hack env materialize"], followUp: [], verify: ["hack doctor"], @@ -814,7 +814,7 @@ test("recovery next steps preserve already scoped projects prune", () => { expect(nextSteps).toEqual([ "Run `hack doctor --path '/tmp/work repo'` to classify restart versus repair work.", - "Temporary breakage: `hack projects prune --project msp`.", + "Temporary breakage: `hack projects prune --project sample`.", "Temporary breakage: `hack down --path '/tmp/work repo'`.", "Configuration repair: `hack doctor --fix --path '/tmp/work repo'`.", "Configuration repair: `hack env materialize --path '/tmp/work repo'`.", diff --git a/tests/e2e-docker-ownership.test.ts b/tests/e2e-docker-ownership.test.ts index 51ff8dcf2..efa18905d 100644 --- a/tests/e2e-docker-ownership.test.ts +++ b/tests/e2e-docker-ownership.test.ts @@ -136,7 +136,7 @@ describe("e2e docker ownership", () => { false ); expect(isOwnedComposeProject({ project: "e2e-ffff", names })).toBe(false); - expect(isOwnedComposeProject({ project: "mhof_default", names })).toBe( + expect(isOwnedComposeProject({ project: "otherproj_default", names })).toBe( false ); }); @@ -153,7 +153,7 @@ describe("e2e docker ownership", () => { network("e2e-abc1--feat"), { kind: "volume", id: "v1", name: "e2e-abc1_data", project: "e2e-abc1" }, network("e2e-other"), - network("mhof"), + network("otherproj"), ]); const result = await sweepOwnedComposeResources({ docker: fake.docker, @@ -169,7 +169,7 @@ describe("e2e docker ownership", () => { ]); expect(fake.resources.map((resource) => resource.project)).toEqual([ "e2e-other", - "mhof", + "otherproj", ]); expect(fake.calls.some((call) => call.includes("prune"))).toBe(false); }); @@ -202,7 +202,7 @@ describe("e2e docker ownership", () => { }); test("runScenarios fails a docker scenario that leaves a network", async () => { - const fake = fakeDocker([network("mhof")]); + const fake = fakeDocker([network("otherproj")]); const outcomes = await runScenarios({ dockerEnabled: true, docker: fake.docker, @@ -231,7 +231,7 @@ describe("e2e docker ownership", () => { expect(outcomes.map((outcome) => outcome.status)).toEqual(["fail", "pass"]); expect(outcomes[0]?.reason).toContain("e2e-1eaced--feat_default"); expect(fake.resources.map((resource) => resource.project)).toEqual([ - "mhof", + "otherproj", ]); }); diff --git a/tests/e2e/scenarios/lifecycle-session-recovery.ts b/tests/e2e/scenarios/lifecycle-session-recovery.ts index 23db53a14..499531814 100644 --- a/tests/e2e/scenarios/lifecycle-session-recovery.ts +++ b/tests/e2e/scenarios/lifecycle-session-recovery.ts @@ -150,7 +150,7 @@ export const lifecycleSessionRecoveryScenario: Scenario = { value: "qa-second", }); - const branchName = "feat-msp-human-handoff"; + const branchName = "feat-sample-handoff"; const branchUp = await ctx.cli({ args: ["up", "--detach", "--json", "--branch", branchName], cwd: fixture.root, diff --git a/tests/global-command.test.ts b/tests/global-command.test.ts index c51538ff4..b9bd9a21c 100644 --- a/tests/global-command.test.ts +++ b/tests/global-command.test.ts @@ -370,7 +370,7 @@ test( { Containers: { abc123: { - Name: "omega-temporal-server-1", + Name: "example-temporal-server-1", IPv4Address: `${DEFAULT_CADDY_IP}/16`, }, }, @@ -397,14 +397,14 @@ test( execCalls.some( (call) => call.join(" ") === - `docker network disconnect -f ${DEFAULT_INGRESS_NETWORK} omega-temporal-server-1` + `docker network disconnect -f ${DEFAULT_INGRESS_NETWORK} example-temporal-server-1` ) ).toBe(true); expect( execCalls.some( (call) => call.join(" ") === - `docker network connect ${DEFAULT_INGRESS_NETWORK} omega-temporal-server-1` + `docker network connect ${DEFAULT_INGRESS_NETWORK} example-temporal-server-1` ) ).toBe(true); expect( diff --git a/tests/helpers/test-budget.ts b/tests/helpers/test-budget.ts index 760ecc236..94b55f29d 100644 --- a/tests/helpers/test-budget.ts +++ b/tests/helpers/test-budget.ts @@ -14,9 +14,9 @@ import { DEFAULT_FILE_TIMEOUT_SECONDS } from "../../scripts/test-shard.ts"; * `TEST_BUDGET_SCALE` is the headroom for a loaded one. These fixtures are * spawn-bound (a retained adoption dispatch runs about 750 stub-engine * processes; an authored start runs the compiler several times), so their wall - * time grows faster than the load average. On the M5 at 1-min load 15-40, and - * on the M3 while another suite ran, they took three to four times their - * unloaded time. With a second suite plus churn workers, the M5 at load 28-90 + * time grows faster than the load average. On one development host at 1-min load 15-40, and + * on another while a second suite ran, they took three to four times their + * unloaded time. With a second suite plus churn workers, the first host at load 28-90 * took more than ten times: one public retained `up` dispatch outlasted a * 200 s deadline, and a v7 dispatch case took 146 s even at load 22-50. * A deadline a case does not test must not expire first, so the scale keeps diff --git a/tests/models/tla/README.md b/tests/models/tla/README.md index efa53e1cc..427954720 100644 --- a/tests/models/tla/README.md +++ b/tests/models/tla/README.md @@ -1136,7 +1136,7 @@ confirmation boundaries; `graph/startup/native_test.rs` defines the separate ini application-health acceptance fixture. A test's presence is not a passing run. Record the exact source/artifact and result when claiming component or native proof; the synthetic startup fixture passed on September 17, 2026; its 64 KiB exchange, -initial health and confirmed cleanup do not qualify Event Agent or all failure paths. +initial health and confirmed cleanup do not qualify a real application or all failure paths. Keep the remaining acceptance questions explicit: lost acknowledgement and resend, stale owner/command evidence, death versus timeout, pre/post-effect crashes without diff --git a/tests/mutagen-sync.test.ts b/tests/mutagen-sync.test.ts index af9ddf51b..669d9c087 100644 --- a/tests/mutagen-sync.test.ts +++ b/tests/mutagen-sync.test.ts @@ -57,10 +57,10 @@ test("buildMutagenSshUri renders Mutagen-compatible SSH endpoints", () => { host: "198.51.100.42", port: 2222, }, - remotePath: "/Users/remote-user/.hack/projects/event-agent", + remotePath: "/Users/remote-user/.hack/projects/example-app", }) ).toBe( - "remote-user@198.51.100.42:2222:/Users/remote-user/.hack/projects/event-agent" + "remote-user@198.51.100.42:2222:/Users/remote-user/.hack/projects/example-app" ); expect( @@ -75,14 +75,14 @@ test("buildMutagenSshUri renders Mutagen-compatible SSH endpoints", () => { test("buildMutagenSessionName is deterministic and normalized", () => { const first = __testOnlyMutagenSync.buildMutagenSessionName({ - projectName: "Live Nation App", + projectName: "Example App", nodeId: "db5d885f-1647-4229-add9-2a5e5833e7a4", branch: "feat/remote-sync", localProjectRoot: "/Users/local-user/dev/hack", remoteProjectRoot: "/Users/remote-user/.hack/projects/hack", }); const second = __testOnlyMutagenSync.buildMutagenSessionName({ - projectName: "Live Nation App", + projectName: "Example App", nodeId: "db5d885f-1647-4229-add9-2a5e5833e7a4", branch: "feat/remote-sync", localProjectRoot: "/Users/local-user/dev/hack", @@ -90,7 +90,7 @@ test("buildMutagenSessionName is deterministic and normalized", () => { }); expect(first).toBe(second); - expect(first.startsWith("hack-live-nation-app-db5d885f-")).toBe(true); + expect(first.startsWith("hack-example-app-db5d885f-")).toBe(true); expect(/-[a-f0-9]{8}$/.test(first)).toBe(true); expect(first.length).toBeLessThanOrEqual(72); }); @@ -98,12 +98,12 @@ test("buildMutagenSessionName is deterministic and normalized", () => { test("ensureMutagenLocalToRemoteSync creates and flushes session", async () => { const calls: string[][] = []; const result = await ensureMutagenLocalToRemoteSync({ - projectName: "event-agent", + projectName: "example-app", nodeId: "node-1", branch: "feat/e2e", nodeSource: "remote-user@198.51.100.42:2222", localProjectRoot: tempDir!, - remoteProjectRoot: "/Users/remote-user/.hack/projects/event-agent", + remoteProjectRoot: "/Users/remote-user/.hack/projects/example-app", exclude: ["node_modules", "dist", ".git"], resolveBinary: () => "/opt/homebrew/bin/mutagen", execCommand: async ({ cmd }) => { @@ -145,11 +145,11 @@ test("ensureMutagenLocalToRemoteSync creates and flushes session", async () => { test("ensureMutagenLocalToRemoteSync tolerates existing session and still flushes", async () => { const calls: string[][] = []; const result = await ensureMutagenLocalToRemoteSync({ - projectName: "event-agent", + projectName: "example-app", nodeId: "node-1", nodeSource: "remote-user@198.51.100.42", localProjectRoot: tempDir!, - remoteProjectRoot: "/Users/remote-user/.hack/projects/event-agent", + remoteProjectRoot: "/Users/remote-user/.hack/projects/example-app", resolveBinary: () => "/opt/homebrew/bin/mutagen", execCommand: async ({ cmd }) => { calls.push([...cmd]); @@ -158,7 +158,7 @@ test("ensureMutagenLocalToRemoteSync tolerates existing session and still flushe exitCode: 1, stdout: "", stderr: - "session named hack-event-agent-node-1-default already exists", + "session named hack-example-app-node-1-default already exists", }; } return { @@ -179,11 +179,11 @@ test("ensureMutagenLocalToRemoteSync tolerates existing session and still flushe test("ensureMutagenLocalToRemoteSync fails when binary is unavailable", async () => { const result = await ensureMutagenLocalToRemoteSync({ - projectName: "event-agent", + projectName: "example-app", nodeId: "node-1", nodeSource: "remote-user@198.51.100.42", localProjectRoot: tempDir!, - remoteProjectRoot: "/Users/remote-user/.hack/projects/event-agent", + remoteProjectRoot: "/Users/remote-user/.hack/projects/example-app", resolveBinary: () => null, }); @@ -196,11 +196,11 @@ test("ensureMutagenLocalToRemoteSync fails when binary is unavailable", async () test("ensureMutagenLocalToRemoteSync fails when node source is missing", async () => { const result = await ensureMutagenLocalToRemoteSync({ - projectName: "event-agent", + projectName: "example-app", nodeId: "node-1", nodeSource: " ", localProjectRoot: tempDir!, - remoteProjectRoot: "/Users/remote-user/.hack/projects/event-agent", + remoteProjectRoot: "/Users/remote-user/.hack/projects/example-app", resolveBinary: () => "/opt/homebrew/bin/mutagen", execCommand: async () => { return { diff --git a/tests/native-authored-project-start.test.ts b/tests/native-authored-project-start.test.ts index 5ad947d1b..a83ab549d 100644 --- a/tests/native-authored-project-start.test.ts +++ b/tests/native-authored-project-start.test.ts @@ -694,7 +694,7 @@ macTest( macTest( "HACK-1272: a consumer refused before journal reservation retires its exact start intent", async () => { - // M3 next.5 repro: a repository@digest image passes planning, then the + // next.5 host repro: a repository@digest image passes planning, then the // native consumer refuses native_graph_admission before reserving a journal. // Retirement inspection can never authenticate a Removed receipt; only the // exact native_graph_unreserved refusal may retire the attempt. diff --git a/tests/native-aws-environment.test.ts b/tests/native-aws-environment.test.ts index dc2a04250..1d40c8c3e 100644 --- a/tests/native-aws-environment.test.ts +++ b/tests/native-aws-environment.test.ts @@ -64,7 +64,7 @@ test("explicit profile replaces only declared read-only AWS mount and scopes cre const before = JSON.stringify(original); const result = await adaptNativeAwsEnvironment({ input: original, - profile: "livenation_qa", + profile: "example_qa", exportSource: source, now, }); @@ -96,7 +96,7 @@ test("explicit profile replaces only declared read-only AWS mount and scopes cre expect(result.input.originalSha256).toBe(original.originalSha256); expect(JSON.stringify(original)).toBe(before); expect(result.receipt).toEqual({ - profile: "livenation_qa", + profile: "example_qa", expiry: exported.Expiration.replace("Z", ".000Z"), services: ["app"], }); diff --git a/tests/native-project-run-filesystem.test.ts b/tests/native-project-run-filesystem.test.ts index 248c2cd78..ccd55c94d 100644 --- a/tests/native-project-run-filesystem.test.ts +++ b/tests/native-project-run-filesystem.test.ts @@ -37,7 +37,7 @@ const run = { planId: "d".repeat(64), effectiveEnvName: "qa", profiles: ["worker"], - aws: { profile: "livenation_qa", region: "us-east-1" }, + aws: { profile: "example_qa", region: "us-east-1" }, }; const runtime: NativeRuntimeSelection = { binary: "/unused/hack-native", @@ -57,7 +57,7 @@ async function fixture() { projectRoot, projectDir, nativeHome, - branch: "event-agent", + branch: "example-app", }; await save({ ...scope, run }); const key = createHash("sha256") diff --git a/tests/node-provider-railway.test.ts b/tests/node-provider-railway.test.ts index f0166413b..73af3e08a 100644 --- a/tests/node-provider-railway.test.ts +++ b/tests/node-provider-railway.test.ts @@ -11,7 +11,7 @@ test("deriveRailwayServiceName normalizes user-facing names", () => { test("parseRailwayJsonOutput extracts payload from noisy CLI output", () => { const output = [ "> Select a workspace Hack Dance", - "> Select a project Omega", + "> Select a project Example", '{ "projectId": "proj-1", "serviceName": "hack-node" }', ].join("\n"); const parsed = __testOnlyNodeRailway.parseRailwayJsonOutput({ output }); diff --git a/tests/node-workspace-bootstrap.test.ts b/tests/node-workspace-bootstrap.test.ts index 8a65b43eb..d19ac8157 100644 --- a/tests/node-workspace-bootstrap.test.ts +++ b/tests/node-workspace-bootstrap.test.ts @@ -234,7 +234,7 @@ test("workspace ensure resolves by controller project id when node project id di body: JSON.stringify({ project: "bootstrap-target", controller_project_id: "controller-project-id", - controller_project_name: "event-agent", + controller_project_name: "example-app", bootstrap: { repo_url: sourceRepo, project_name: "bootstrap-target", @@ -259,7 +259,7 @@ test("workspace ensure resolves by controller project id when node project id di const map = await readNodeWorkspaceMap({ homeDir: tempDir }); expect(map.entries).toHaveLength(1); expect(map.entries[0]?.projectId).toBe("controller-project-id"); - expect(map.entries[0]?.projectName).toBe("event-agent"); + expect(map.entries[0]?.projectName).toBe("example-app"); await rm(resolve(tempDir, ".hack", "projects.json"), { force: true }); diff --git a/tests/node-workspace-command.test.ts b/tests/node-workspace-command.test.ts index 5c5170913..ce7fda63c 100644 --- a/tests/node-workspace-command.test.ts +++ b/tests/node-workspace-command.test.ts @@ -56,10 +56,10 @@ test("resolveWorkspaceMapEntryBySelector falls back to project name", () => { test("deriveWorkspaceSource detects managed root ancestry", () => { process.env.HACK_GLOBAL_CONFIG_PATH = "/tmp/hack-global/hack.config.json"; const managed = __testOnlyNodeWorkspace.deriveWorkspaceSource({ - workspaceRoot: "/tmp/hack-global/projects/event-agent", + workspaceRoot: "/tmp/hack-global/projects/example-app", }); const external = __testOnlyNodeWorkspace.deriveWorkspaceSource({ - workspaceRoot: "/tmp/custom/event-agent", + workspaceRoot: "/tmp/custom/example-app", }); expect(managed).toBe("managed"); expect(external).toBe("external"); diff --git a/tests/node-workspace-map.test.ts b/tests/node-workspace-map.test.ts index aebb76618..3d3c2749f 100644 --- a/tests/node-workspace-map.test.ts +++ b/tests/node-workspace-map.test.ts @@ -52,23 +52,23 @@ test("managed root and map path resolve under ~/.hack", () => { test("upsert writes map entry and lookup resolves by project name", async () => { await upsertNodeWorkspaceMapEntry({ - projectName: "event-agent", - workspaceRoot: "/Users/remote-user/.hack/projects/event-agent", - workspaceProjectName: "event-agent", - workspaceProjectId: "remote-event-agent", + projectName: "example-app", + workspaceRoot: "/Users/remote-user/.hack/projects/example-app", + workspaceProjectName: "example-app", + workspaceProjectId: "remote-example-app", source: "managed", - repoUrl: "git@github.com:hack-dance/event-agent.git", + repoUrl: "git@github.com:example-org/example-app.git", }); const map = await readNodeWorkspaceMap(); expect(map.entries).toHaveLength(1); const mapped = findNodeWorkspaceMapEntry({ map, - projectName: "event-agent", + projectName: "example-app", }); expect(mapped).not.toBeNull(); expect(mapped?.source).toBe("managed"); - expect(mapped?.workspaceProjectId).toBe("remote-event-agent"); + expect(mapped?.workspaceProjectId).toBe("remote-example-app"); }); test("upsert can migrate name-only entry to id-based mapping", async () => { @@ -99,14 +99,14 @@ test("upsert can migrate name-only entry to id-based mapping", async () => { test("remove deletes matching map entries", async () => { await upsertNodeWorkspaceMapEntry({ - projectName: "event-agent", - workspaceRoot: "/Users/remote-user/dev/event-agent", - workspaceProjectName: "event-agent", + projectName: "example-app", + workspaceRoot: "/Users/remote-user/dev/example-app", + workspaceProjectName: "example-app", source: "external", }); const removed = await removeNodeWorkspaceMapEntry({ - projectName: "event-agent", + projectName: "example-app", }); expect(removed).toBeTrue(); diff --git a/tests/project-lifecycle-hygiene.test.ts b/tests/project-lifecycle-hygiene.test.ts index dd3529619..fb3b0cb5a 100644 --- a/tests/project-lifecycle-hygiene.test.ts +++ b/tests/project-lifecycle-hygiene.test.ts @@ -8,17 +8,17 @@ import { import { classifyLifecycleSession } from "../src/lib/project-lifecycle-sessions.ts"; const staleEntry: LifecycleStateEntry = { - composeProject: "event-agent", - projectName: "event-agent", + composeProject: "example-app", + projectName: "example-app", branch: "feature-cleanup", - sessionName: "event-agent--lifecycle-feature-cleanup", + sessionName: "example-app--lifecycle-feature-cleanup", backend: "tmux", updatedAt: "2026-04-01T14:00:00.000Z", processes: [ { name: "proxy", windowName: "proxy", - logPath: "/tmp/event-agent.log", + logPath: "/tmp/example-app.log", panePid: 500, processGroupId: 500, }, @@ -81,7 +81,7 @@ test("classifyLifecycleSessionHygiene reports an owned session without a running backend: "tmux", name: ownedEntry.sessionName, attached: false, - path: "/tmp/event-agent", + path: "/tmp/example-app", windows: 2, createdAt: "2026-04-01T13:59:59.000Z", }, @@ -89,7 +89,7 @@ test("classifyLifecycleSessionHygiene reports an owned session without a running observedOwnershipToken: "owner-token", expectedBackend: "tmux", expectedSessionName: ownedEntry.sessionName, - expectedProjectRoot: "/tmp/event-agent", + expectedProjectRoot: "/tmp/example-app", expectedDefinitionHash: "definition-hash", liveWindowNames: new Set(["shell", "proxy"]), }); @@ -120,7 +120,7 @@ test("classifyLifecycleSessionHygiene preserves a recent owned session during st backend: "tmux", name: ownedEntry.sessionName, attached: false, - path: "/tmp/event-agent", + path: "/tmp/example-app", windows: 2, createdAt: "2026-04-01T13:59:59.000Z", }, @@ -128,7 +128,7 @@ test("classifyLifecycleSessionHygiene preserves a recent owned session during st observedOwnershipToken: "owner-token", expectedBackend: "tmux", expectedSessionName: ownedEntry.sessionName, - expectedProjectRoot: "/tmp/event-agent", + expectedProjectRoot: "/tmp/example-app", expectedDefinitionHash: "definition-hash", liveWindowNames: new Set(["shell", "proxy"]), }); @@ -147,7 +147,7 @@ test("classifyLifecycleSessionHygiene preserves a recent owned session during st { entry: ownedEntry, reason: - 'Lifecycle session "event-agent--lifecycle-feature-cleanup" is recent enough to belong to an in-flight startup.', + 'Lifecycle session "example-app--lifecycle-feature-cleanup" is recent enough to belong to an in-flight startup.', }, ]); }); @@ -166,7 +166,7 @@ test("classifyLifecycleSessionHygiene preserves foreign collisions for manual re observedOwnershipToken: null, expectedBackend: "tmux", expectedSessionName: staleEntry.sessionName, - expectedProjectRoot: "/tmp/event-agent", + expectedProjectRoot: "/tmp/example-app", expectedDefinitionHash: "", liveWindowNames: new Set(["shell"]), }); diff --git a/tests/project-lifecycle-processes.test.ts b/tests/project-lifecycle-processes.test.ts index a1a2986f2..409d079e3 100644 --- a/tests/project-lifecycle-processes.test.ts +++ b/tests/project-lifecycle-processes.test.ts @@ -63,17 +63,17 @@ test("readLifecycleState preserves lifecycle pane and process group metadata", a { entries: [ { - composeProject: "event-agent", - projectName: "event-agent", + composeProject: "example-app", + projectName: "example-app", branch: "feature-cleanup", - sessionName: "event-agent--lifecycle-feature-cleanup", + sessionName: "example-app--lifecycle-feature-cleanup", backend: "tmux", updatedAt: "2026-04-01T14:00:00.000Z", processes: [ { name: "proxy", windowName: "proxy", - logPath: "/tmp/event-agent.log", + logPath: "/tmp/example-app.log", panePid: "12345", processGroupId: 67_890, }, @@ -93,7 +93,7 @@ test("readLifecycleState preserves lifecycle pane and process group metadata", a { name: "proxy", windowName: "proxy", - logPath: "/tmp/event-agent.log", + logPath: "/tmp/example-app.log", panePid: 12_345, processGroupId: 67_890, }, @@ -129,17 +129,17 @@ test("collectDescendantProcessGroupIds returns root and descendant groups once", test("resolveLifecycleProcessGroupIdsForTmuxState ignores stale persisted ids", () => { const groups = resolveLifecycleProcessGroupIdsForTmuxState({ lifecycleEntry: { - composeProject: "event-agent", - projectName: "event-agent", + composeProject: "example-app", + projectName: "example-app", branch: "feature-cleanup", - sessionName: "event-agent--lifecycle-feature-cleanup", + sessionName: "example-app--lifecycle-feature-cleanup", backend: "tmux", updatedAt: "2026-04-01T14:00:00.000Z", processes: [ { name: "proxy", windowName: "proxy", - logPath: "/tmp/event-agent.log", + logPath: "/tmp/example-app.log", panePid: 99_999, processGroupId: 99_999, }, @@ -159,17 +159,17 @@ test("resolveLifecycleProcessGroupIdsForTmuxState ignores stale persisted ids", test("resolveLifecycleProcessGroupIdsForTmuxState falls back to persisted live groups when panes disappear", () => { const groups = resolveLifecycleProcessGroupIdsForTmuxState({ lifecycleEntry: { - composeProject: "event-agent", - projectName: "event-agent", + composeProject: "example-app", + projectName: "example-app", branch: "feature-cleanup", - sessionName: "event-agent--lifecycle-feature-cleanup", + sessionName: "example-app--lifecycle-feature-cleanup", backend: "tmux", updatedAt: "2026-04-01T14:00:00.000Z", processes: [ { name: "proxy", windowName: "proxy", - logPath: "/tmp/event-agent.log", + logPath: "/tmp/example-app.log", panePid: 500, processGroupId: 500, }, @@ -188,17 +188,17 @@ test("resolveLifecycleProcessGroupIdsForTmuxState falls back to persisted live g test("resolveLifecycleProcessGroupIdsForTmuxState ignores recycled process groups without a live pane pid", () => { const groups = resolveLifecycleProcessGroupIdsForTmuxState({ lifecycleEntry: { - composeProject: "event-agent", - projectName: "event-agent", + composeProject: "example-app", + projectName: "example-app", branch: "feature-cleanup", - sessionName: "event-agent--lifecycle-feature-cleanup", + sessionName: "example-app--lifecycle-feature-cleanup", backend: "tmux", updatedAt: "2026-04-01T14:00:00.000Z", processes: [ { name: "proxy", windowName: "proxy", - logPath: "/tmp/event-agent.log", + logPath: "/tmp/example-app.log", panePid: 9999, processGroupId: 500, }, @@ -217,17 +217,17 @@ test("resolveLifecycleProcessGroupIdsForTmuxState ignores recycled process group test("resolveLifecycleProcessGroupIdsForTmuxState recovers a persisted leaderless group and descendants", () => { const groups = resolveLifecycleProcessGroupIdsForTmuxState({ lifecycleEntry: { - composeProject: "event-agent", - projectName: "event-agent", + composeProject: "example-app", + projectName: "example-app", branch: "feature-cleanup", - sessionName: "event-agent--lifecycle-feature-cleanup", + sessionName: "example-app--lifecycle-feature-cleanup", backend: "tmux", updatedAt: "2026-04-01T14:00:00.000Z", processes: [ { name: "proxy", windowName: "proxy", - logPath: "/tmp/event-agent.log", + logPath: "/tmp/example-app.log", panePid: 500, processGroupId: 500, }, @@ -247,17 +247,17 @@ test("resolveLifecycleProcessGroupIdsForTmuxState recovers a persisted leaderles test("resolvePersistedLifecycleProcessGroupIds recovers live groups without a mux session", () => { const groups = resolvePersistedLifecycleProcessGroupIds({ lifecycleEntry: { - composeProject: "event-agent", - projectName: "event-agent", + composeProject: "example-app", + projectName: "example-app", branch: "feature-cleanup", - sessionName: "event-agent--lifecycle-feature-cleanup", + sessionName: "example-app--lifecycle-feature-cleanup", backend: "tmux", updatedAt: "2026-04-01T14:00:00.000Z", processes: [ { name: "proxy", windowName: "proxy", - logPath: "/tmp/event-agent.log", + logPath: "/tmp/example-app.log", panePid: 500, processGroupId: 500, }, @@ -276,17 +276,17 @@ test("resolveLifecycleStopProcessGroupIds skips persisted cleanup without a live const groups = resolveLifecycleStopProcessGroupIds({ matchedLiveSession: false, lifecycleEntry: { - composeProject: "event-agent", - projectName: "event-agent", + composeProject: "example-app", + projectName: "example-app", branch: "feature-cleanup", - sessionName: "event-agent--lifecycle-feature-cleanup", + sessionName: "example-app--lifecycle-feature-cleanup", backend: "tmux", updatedAt: "2026-04-01T14:00:00.000Z", processes: [ { name: "proxy", windowName: "proxy", - logPath: "/tmp/event-agent.log", + logPath: "/tmp/example-app.log", panePid: 500, processGroupId: 500, }, @@ -305,17 +305,17 @@ test("resolveLifecycleStopProcessGroupIds skips a leaderless persisted group wit const groups = resolveLifecycleStopProcessGroupIds({ matchedLiveSession: false, lifecycleEntry: { - composeProject: "event-agent", - projectName: "event-agent", + composeProject: "example-app", + projectName: "example-app", branch: "feature-cleanup", - sessionName: "event-agent--lifecycle-feature-cleanup", + sessionName: "example-app--lifecycle-feature-cleanup", backend: "tmux", updatedAt: "2026-04-01T14:00:00.000Z", processes: [ { name: "proxy", windowName: "proxy", - logPath: "/tmp/event-agent.log", + logPath: "/tmp/example-app.log", panePid: 500, processGroupId: 500, }, @@ -335,17 +335,17 @@ test("resolveLifecycleStopProcessGroupIds recovers a leaderless persisted group const groups = resolveLifecycleStopProcessGroupIds({ matchedLiveSession: true, lifecycleEntry: { - composeProject: "event-agent", - projectName: "event-agent", + composeProject: "example-app", + projectName: "example-app", branch: "feature-cleanup", - sessionName: "event-agent--lifecycle-feature-cleanup", + sessionName: "example-app--lifecycle-feature-cleanup", backend: "tmux", updatedAt: "2026-04-01T14:00:00.000Z", processes: [ { name: "proxy", windowName: "proxy", - logPath: "/tmp/event-agent.log", + logPath: "/tmp/example-app.log", panePid: 500, processGroupId: 500, }, @@ -365,8 +365,8 @@ test("resolveLifecycleStopProcessGroupIds recovers a leaderless persisted group test("wrapLifecyclePersistentCommand uses external kill for process-group cleanup", () => { const script = wrapLifecyclePersistentCommand({ command: "bun run proxy", - commandPidPath: "/tmp/event-agent.pid", - logPath: "/tmp/event-agent.log", + commandPidPath: "/tmp/example-app.pid", + logPath: "/tmp/example-app.log", serviceName: "proxy", }); @@ -380,8 +380,8 @@ test("wrapLifecyclePersistentCommand uses external kill for process-group cleanu test("wrapLifecyclePersistentCommand avoids login-shell execution", () => { const script = wrapLifecyclePersistentCommand({ command: "bun run proxy", - commandPidPath: "/tmp/event-agent.pid", - logPath: "/tmp/event-agent.log", + commandPidPath: "/tmp/example-app.pid", + logPath: "/tmp/example-app.log", serviceName: "proxy", }); diff --git a/tests/project-lifecycle-sessions.test.ts b/tests/project-lifecycle-sessions.test.ts index 6a85e564e..f2891a410 100644 --- a/tests/project-lifecycle-sessions.test.ts +++ b/tests/project-lifecycle-sessions.test.ts @@ -18,15 +18,15 @@ const definitionHash = resolveLifecycleDefinitionHash({ }); const session: MuxSession = { backend: "tmux", - name: "event-agent--lifecycle", + name: "example-app--lifecycle", attached: false, - path: "/tmp/event-agent", + path: "/tmp/example-app", windows: 2, createdAt: "2026-07-09T12:00:00.000Z", }; const entry: LifecycleStateEntry = { - composeProject: "event-agent", - projectName: "event-agent", + composeProject: "example-app", + projectName: "example-app", branch: null, sessionName: session.name, backend: "tmux", @@ -37,7 +37,7 @@ const entry: LifecycleStateEntry = { { name: "proxy", windowName: "proxy", - logPath: "/tmp/event-agent.log", + logPath: "/tmp/example-app.log", }, ], }; @@ -84,7 +84,7 @@ test("classifyLifecycleSession creates when the expected session is absent", () observedOwnershipToken: null, expectedBackend: "tmux", expectedSessionName: session.name, - expectedProjectRoot: "/tmp/event-agent", + expectedProjectRoot: "/tmp/example-app", expectedDefinitionHash: definitionHash, liveWindowNames: null, }); @@ -100,7 +100,7 @@ test("classifyLifecycleSession adopts a token-owned healthy session", () => { observedOwnershipToken: ownershipToken, expectedBackend: "tmux", expectedSessionName: session.name, - expectedProjectRoot: "/tmp/event-agent", + expectedProjectRoot: "/tmp/example-app", expectedDefinitionHash: definitionHash, liveWindowNames: new Set(["shell", "proxy"]), }); @@ -116,7 +116,7 @@ test("classifyLifecycleSession replaces a token-owned stale session", () => { observedOwnershipToken: ownershipToken, expectedBackend: "tmux", expectedSessionName: session.name, - expectedProjectRoot: "/tmp/event-agent", + expectedProjectRoot: "/tmp/example-app", expectedDefinitionHash: definitionHash, liveWindowNames: new Set(["shell"]), }); @@ -133,7 +133,7 @@ test("classifyLifecycleSession replaces a legacy tmux session only with path and observedOwnershipToken: null, expectedBackend: "tmux", expectedSessionName: session.name, - expectedProjectRoot: "/tmp/event-agent", + expectedProjectRoot: "/tmp/example-app", expectedDefinitionHash: definitionHash, liveWindowNames: new Set(["shell", "proxy"]), }); @@ -149,7 +149,7 @@ test("classifyLifecycleSession blocks same-name sessions without ownership proof observedOwnershipToken: null, expectedBackend: "tmux", expectedSessionName: session.name, - expectedProjectRoot: "/tmp/event-agent", + expectedProjectRoot: "/tmp/example-app", expectedDefinitionHash: definitionHash, liveWindowNames: new Set(["shell", "proxy"]), }); @@ -180,7 +180,7 @@ function inspectFixture(backend: MuxBackend) { backend, entry, expectedSessionName: session.name, - expectedProjectRoot: "/tmp/event-agent", + expectedProjectRoot: "/tmp/example-app", expectedDefinitionHash: definitionHash, }); } @@ -283,7 +283,7 @@ test("inspection never grants legacy ownership to an unlisted session", async () }), entry: legacyEntry, expectedSessionName: session.name, - expectedProjectRoot: "/tmp/event-agent", + expectedProjectRoot: "/tmp/example-app", expectedDefinitionHash: definitionHash, }); expect(inspection.classification).toBe("foreign"); @@ -343,7 +343,7 @@ test("inspection does not reinterpret unrelated persisted ownership", async () = backend, entry: { ...entry, sessionName: "another-session" }, expectedSessionName: session.name, - expectedProjectRoot: "/tmp/event-agent", + expectedProjectRoot: "/tmp/example-app", expectedDefinitionHash: definitionHash, }); expect(inspection.classification).toBe("foreign"); diff --git a/tests/project-restart-command.test.ts b/tests/project-restart-command.test.ts index b66e0b178..8a0b35e2f 100644 --- a/tests/project-restart-command.test.ts +++ b/tests/project-restart-command.test.ts @@ -65,24 +65,24 @@ test("restart preserves an explicit base env selection over stored runtime state test("restart from the primary checkout targets only the base compose instance", () => { expect( resolveRestartTarget({ - baseProjectName: "event-agent", + baseProjectName: "example-app", branch: null, }) ).toEqual({ composeProjectName: null, - lifecycleComposeProject: "event-agent", + lifecycleComposeProject: "example-app", }); }); test("restart with an explicit branch targets only that branch instance", () => { expect( resolveRestartTarget({ - baseProjectName: "event-agent", - branch: "feat-msp-human-handoff", + baseProjectName: "example-app", + branch: "feat-sample-handoff", }) ).toEqual({ - composeProjectName: "event-agent--feat-msp-human-handoff", - lifecycleComposeProject: "event-agent--feat-msp-human-handoff", + composeProjectName: "example-app--feat-sample-handoff", + lifecycleComposeProject: "example-app--feat-sample-handoff", }); }); diff --git a/tests/project-views.test.ts b/tests/project-views.test.ts index f67ea61e4..a6d5d4297 100644 --- a/tests/project-views.test.ts +++ b/tests/project-views.test.ts @@ -672,27 +672,27 @@ test("buildProjectViews includes zellij sessions when session name matches proje test("buildProjectViews matches runtime by working directory when compose project slug differs", async () => { const dottedProject = await createProject({ - name: "sample.substrate", + name: "sample.dotted", services: ["app", "qdrant"], }); const runtime = [ makeRuntimeProject({ - name: "samplesubstrate", + name: "sampledotted", workingDir: dottedProject.projectDir, containersByService: { app: [ makeContainer({ - project: "samplesubstrate", + project: "sampledotted", service: "app", - name: "samplesubstrate-app-1", + name: "sampledotted-app-1", state: "running", }), ], qdrant: [ makeContainer({ - project: "samplesubstrate", + project: "sampledotted", service: "qdrant", - name: "samplesubstrate-qdrant-1", + name: "sampledotted-qdrant-1", state: "running", }), ], @@ -710,7 +710,7 @@ test("buildProjectViews matches runtime by working directory when compose projec }); const view = views.find((entry) => entry.name === dottedProject.name); - expect(view?.runtime?.project).toBe("samplesubstrate"); + expect(view?.runtime?.project).toBe("sampledotted"); expect(view?.runtimeStatus).toBe("running"); expect(view?.status).toBe("running"); }); diff --git a/tests/python/test_application_benchmark_protocol.py b/tests/python/test_application_benchmark_protocol.py index bd4cd1d6d..7c2737b7e 100644 --- a/tests/python/test_application_benchmark_protocol.py +++ b/tests/python/test_application_benchmark_protocol.py @@ -288,14 +288,14 @@ class NegativeProtocolControls(unittest.TestCase): .update(statistic="window_mean"), "budget_statistic_mismatch:idle": lambda d: budget(d, "absolute", "idle_control_plane_core_fraction") .update(statistic="median"), - "budget_scope_narrowed:watcher": _set_scope("watcher_ack_ms", "event-agent"), + "budget_scope_narrowed:watcher": _set_scope("watcher_ack_ms", "large-application"), "budget_scope_narrowed:info": _set_scope("info_latency_ms", "small-fixture"), "budget_scope_narrowed:idle": _set_scope("idle_control_plane_core_fraction", "small-fixture"), "budget_scope_narrowed:unknown": _set_scope("watcher_ack_ms", "nowhere"), "budget_scope_narrowed:additional": lambda d: d["budgets"]["absolute"].append( {"metric": "exec_ms", "statistic": "p95", "max": 50, "inclusive": True, "workload": "nowhere"}), - "workload_baseline_missing": lambda d: workload(d, "event-agent")["lanes"].remove("compose"), - "workload_shape_mismatch": lambda d: workload(d, "event-agent")["shape"].update(services=13), + "workload_baseline_missing": lambda d: workload(d, "large-application")["lanes"].remove("compose"), + "workload_shape_mismatch": lambda d: workload(d, "large-application")["shape"].update(services=13), "phases_mismatch": lambda d: d["phases"].remove("restore"), "scale_points_mismatch:instances": lambda d: d["scale_points"].update(branch_instances=[1, 8]), "scale_points_mismatch:clients": lambda d: d["scale_points"].update(mcp_clients=[1]), @@ -322,7 +322,7 @@ class NegativeProtocolControls(unittest.TestCase): "observer_policy_missing:window": lambda d: d["observer"].update(control_window_seconds=599), "cache_class_missing": lambda d: d["cache_classes"].update(budget_class="cold-cache"), "workload_lane_unknown": lambda d: d["workloads"][0]["lanes"].append("hack-3.0.0"), - "workloads_malformed:id": lambda d: d["workloads"][0].update(id=["event-agent"]), + "workloads_malformed:id": lambda d: d["workloads"][0].update(id=["large-application"]), "host_incomplete": lambda d: d["host"]["orbstack"].pop("build"), "protocol_revision_mismatch": lambda d: d.update(revision=2), "protocol_revision_mismatch:bool": lambda d: d.update(revision=True), @@ -356,7 +356,7 @@ class NegativeProtocolControls(unittest.TestCase): "host_mismatch:cpu": lambda d: d["host"].update(cpu="Apple M5 Max", logical_cpus=18), "host_mismatch:orbstack": lambda d: d["host"]["orbstack"].update(memory_mib=32768), "workload_pin_mismatch": lambda d: workload(d, "small-fixture").update(pin="image oven/bun:latest"), - "workload_correctness_weakened": lambda d: workload(d, "event-agent")["correctness"].pop(), + "workload_correctness_weakened": lambda d: workload(d, "large-application")["correctness"].pop(), } def test_each_weakening_is_refused_with_its_closed_code(self): @@ -836,7 +836,7 @@ def test_any_malformed_summary_node_maps_to_closed_codes_without_raising(self): def test_workload_scoped_budgets_only_apply_to_their_workload(self): summary = small_summary() - summary["workload"] = "event-agent" + summary["workload"] = "large-application" records = self.judge(summary) metrics = {record["metric"] for record in records if "baseline" not in record} self.assertEqual(metrics, set(ABSOLUTE) - {"watcher_ack_ms"}) diff --git a/tests/runtime-cache.test.ts b/tests/runtime-cache.test.ts index d1c84660d..38c19b0b5 100644 --- a/tests/runtime-cache.test.ts +++ b/tests/runtime-cache.test.ts @@ -555,8 +555,8 @@ test("runtime cache gives a clear next step when reset repair cannot restore pri test("getPsPayload matches normalized compose project names", async () => { const runtime: RuntimeProject[] = [ { - project: "dimitrisubstrate", - workingDir: "/tmp/personal-substrate/.hack", + project: "sampledotted", + workingDir: "/tmp/sample-dotted/.hack", services: new Map([ [ "app", @@ -565,13 +565,13 @@ test("getPsPayload matches normalized compose project names", async () => { containers: [ { id: "container-app", - project: "dimitrisubstrate", + project: "sampledotted", service: "app", state: "running", status: "Up 3 minutes", - name: "dimitrisubstrate-app-1", + name: "sampledotted-app-1", ports: "3000/tcp", - workingDir: "/tmp/personal-substrate/.hack", + workingDir: "/tmp/sample-dotted/.hack", image: "imbios/bun-node:latest", labels: null, mounts: [], @@ -606,14 +606,14 @@ test("getPsPayload matches normalized compose project names", async () => { await cache.refresh({ reason: "ps" }); const payload = cache.getPsPayload({ - composeProject: "dimitri.substrate", - project: "dimitri.substrate", + composeProject: "sample.dotted", + project: "sample.dotted", branch: null, }); expect(payload.items).toEqual([ { Service: "app", - Name: "dimitrisubstrate-app-1", + Name: "sampledotted-app-1", Status: "Up 3 minutes", Ports: "3000/tcp", },