From a87f016824f9a9bce3ff5edce0b7fdd1e8b7deb3 Mon Sep 17 00:00:00 2001 From: Dimitri Kennedy <344842+roodboi@users.noreply.github.com> Date: Fri, 6 Nov 2026 16:11:29 -0500 Subject: [PATCH 1/2] test: replace real client identifiers with generic placeholders Replace real client and private project names, private host references, a personal home path and private tracker links in fixtures, test names, docs, comments and benchmark protocol labels with neutral placeholders. Test intent and expectations are unchanged. The edited docs snapshot hash in the docs manifest is updated to match. History is unchanged. Co-Authored-By: Claude Opus 5.5 --- .ai/README.md | 2 +- .ai/skills/hack-repo-work-unit/SKILL.md | 4 +- CHANGELOG.md | 4 +- docs/guides/native-candidate.md | 4 +- docs/guides/v5-release-readiness.md | 12 +-- docs/performance.md | 4 +- .../application-benchmark-protocol.md | 6 +- docs/reference/native-compose-commands.md | 2 +- docs/versions/v5/guides/native-candidate.md | 4 +- .../originals/docs/guides/native-candidate.md | 4 +- .../next6/docs/guides/native-candidate.md | 4 +- .../.hack/.internal/compose.override.yml | 2 +- .../.hack/.internal/compose.override.yml | 10 +-- packages/runtime-core/README.md | 2 +- .../src/project/compose/routing.rs | 14 ++-- packages/runtime-core/src/project/registry.rs | 4 +- .../foreground/native_test/partial_stop.rs | 2 +- .../graph/foreground/native_test/stop14.rs | 4 +- .../runtime-core/src/provider/graph/routes.rs | 2 +- .../runtime-core/src/provider/graph/tests.rs | 4 +- .../src/provider/graph_probe_test.rs | 2 +- .../runtime-core/src/provider/lifecycle.rs | 2 +- .../src/provider/registry_image.rs | 2 +- .../src/provider/source_job_test.rs | 2 +- .../src/provider/source_watch_test.rs | 2 +- .../runtime-core/tests/project_contract.rs | 4 +- scripts/application-benchmark-protocol.json | 2 +- .../check-application-benchmark-protocol.py | 6 +- scripts/docs/versions.json | 2 +- src/lib/project.ts | 4 +- tests/doctor-command.test.ts | 8 +- tests/e2e-docker-ownership.test.ts | 10 +-- .../scenarios/lifecycle-session-recovery.ts | 2 +- tests/global-command.test.ts | 6 +- tests/helpers/test-budget.ts | 6 +- tests/models/tla/README.md | 2 +- tests/mutagen-sync.test.ts | 28 +++---- tests/native-authored-project-start.test.ts | 2 +- tests/native-aws-environment.test.ts | 4 +- tests/native-project-run-filesystem.test.ts | 4 +- tests/node-provider-railway.test.ts | 2 +- tests/node-workspace-bootstrap.test.ts | 4 +- tests/node-workspace-command.test.ts | 4 +- tests/node-workspace-map.test.ts | 22 ++--- tests/project-lifecycle-hygiene.test.ts | 20 ++--- tests/project-lifecycle-processes.test.ts | 82 +++++++++---------- tests/project-lifecycle-sessions.test.ts | 26 +++--- tests/project-restart-command.test.ts | 12 +-- tests/project-views.test.ts | 14 ++-- .../test_application_benchmark_protocol.py | 12 +-- tests/runtime-cache.test.ts | 16 ++-- 51 files changed, 204 insertions(+), 204 deletions(-) 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/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 1253f59c1..9face3515 100644 --- a/docs/guides/native-candidate.md +++ b/docs/guides/native-candidate.md @@ -970,7 +970,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. @@ -1114,7 +1114,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 index 9513c5d24..2df7d4a31 100644 --- a/examples/basic/.hack/.internal/compose.override.yml +++ b/examples/basic/.hack/.internal/compose.override.yml @@ -6,7 +6,7 @@ services: 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 + - /Users/example/.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 diff --git a/examples/next-app/.hack/.internal/compose.override.yml b/examples/next-app/.hack/.internal/compose.override.yml index 8cd053232..46142e9f3 100644 --- a/examples/next-app/.hack/.internal/compose.override.yml +++ b/examples/next-app/.hack/.internal/compose.override.yml @@ -5,7 +5,7 @@ services: 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 + - /Users/example/.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 @@ -19,7 +19,7 @@ services: 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 + - /Users/example/.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 @@ -33,7 +33,7 @@ services: 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 + - /Users/example/.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 @@ -47,7 +47,7 @@ services: 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 + - /Users/example/.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 @@ -61,7 +61,7 @@ services: 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 + - /Users/example/.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 diff --git a/packages/runtime-core/README.md b/packages/runtime-core/README.md index b2a6a2bc1..bf5d76050 100644 --- a/packages/runtime-core/README.md +++ b/packages/runtime-core/README.md @@ -855,7 +855,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 bcc5f3ae5..a85acdd32 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 @@ -157,7 +157,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 f6126f649..eb10bea4d 100644 --- a/packages/runtime-core/src/provider/graph/tests.rs +++ b/packages/runtime-core/src/provider/graph/tests.rs @@ -599,7 +599,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"), @@ -973,7 +973,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 3c18559ba..c974587fe 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 9c3a20650..ee77ab718 100644 --- a/packages/runtime-core/src/provider/lifecycle.rs +++ b/packages/runtime-core/src/provider/lifecycle.rs @@ -2667,7 +2667,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/registry_image.rs b/packages/runtime-core/src/provider/registry_image.rs index 19c02c89f..008ef0484 100644 --- a/packages/runtime-core/src/provider/registry_image.rs +++ b/packages/runtime-core/src/provider/registry_image.rs @@ -737,7 +737,7 @@ mod tests { } #[test] #[ignore = "Explicit public Docker Hub acquisition; no runtime import"] - fn pinned_event_agent_image_downloads_without_docker() { + fn pinned_bun_node_image_downloads_without_docker() { let path = std::env::var("HACK_REGISTRY_TEST_ARCHIVE").expect("explicit new archive path"); let receipt=acquire("imbios/bun-node:1.3.14-24-alpine@sha256:744fb75f37bbe5cca4ba5e9645c7e4454adb58e17752caf53dd61924123297dc",Path::new(&path)).unwrap(); let bytes = std::fs::read(&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 3aae710a0..049cc6ca6 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 11cd99739..221f1cb5a 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 cd7b07b3a..690a4841f 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 5d89830fc..e47914434 100644 --- a/tests/models/tla/README.md +++ b/tests/models/tla/README.md @@ -997,7 +997,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 742a1c949..357ca2732 100644 --- a/tests/native-project-run-filesystem.test.ts +++ b/tests/native-project-run-filesystem.test.ts @@ -36,7 +36,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", @@ -56,7 +56,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", }, From 3a2ac43782df856a358c04a01d36ac3c8bd67af4 Mon Sep 17 00:00:00 2001 From: Dimitri Kennedy <344842+roodboi@users.noreply.github.com> Date: Fri, 6 Nov 2026 16:17:26 -0500 Subject: [PATCH 2/2] test: untrack generated example runtime overrides The example projects tracked Hack-generated compose overrides under `.hack/.internal/`, which hold machine-local paths and must not be hand-edited. Remove them from version control and ignore generated `.hack/.internal/` and `.hack/.branch/` state at any depth. Co-Authored-By: Claude Opus 5.5 --- .gitignore | 4 ++ .../.hack/.internal/compose.override.yml | 16 ----- .../.hack/.internal/compose.override.yml | 71 ------------------- 3 files changed, 4 insertions(+), 87 deletions(-) delete mode 100644 examples/basic/.hack/.internal/compose.override.yml delete mode 100644 examples/next-app/.hack/.internal/compose.override.yml 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/examples/basic/.hack/.internal/compose.override.yml b/examples/basic/.hack/.internal/compose.override.yml deleted file mode 100644 index 2df7d4a31..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/example/.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 46142e9f3..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/example/.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/example/.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/example/.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/example/.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/example/.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