Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
115 commits
Select commit Hold shift + click to select a range
e109506
docs: propose local test runner guardrails
jwhiting Oct 1, 2026
b72f610
docs: prioritize shared host protection in runner proposal
jwhiting Oct 1, 2026
6e7fa47
docs: include agent guidance in local runner proposal
jwhiting Oct 1, 2026
67c94da
docs: include regular development branch pushes in proposal
jwhiting Oct 1, 2026
0abd55f
docs: resolve runner proposal test isolation review
jwhiting Oct 1, 2026
1fb88e6
docs: settle mutex scope and contention bypass intent
jwhiting Oct 1, 2026
0a9410d
docs: frame runner guardrails as guidance for supported use
jwhiting Oct 1, 2026
3355da6
docs: guide common agent test invocation choices
jwhiting Oct 1, 2026
57eeb38
docs: propose default retry guidance for validation
jwhiting Oct 1, 2026
7a95895
docs: settle deliberate test guidance overrides
jwhiting Oct 1, 2026
cb3855b
specs: define local test guardrails and development push guidance
jwhiting Oct 1, 2026
915f3ad
specs: reconcile local guardrails across testing guidance
jwhiting Oct 1, 2026
804dbc7
specs: allow callers to wait for the local test mutex
jwhiting Oct 1, 2026
4409bb7
specs: allow zero retries for focused file checks
jwhiting Oct 1, 2026
9254e1d
specs: clarify mutex wait cancellation and validation order
jwhiting Oct 1, 2026
491af79
proofs: derive local test guardrail and retry coverage
jwhiting Oct 1, 2026
3bdfa43
Close local test guardrail proof gaps
jwhiting Oct 1, 2026
5beb391
Plan test runner guardrails in three implementation slices
jwhiting Oct 1, 2026
02e994b
Keep refusal tests safe when guardrails are absent
jwhiting Oct 1, 2026
1652787
Propose test harness resource cleanup with worker evidence
jwhiting Oct 1, 2026
99b7ed9
Narrow resource cleanup proposal after independent review
jwhiting Oct 1, 2026
26e67c2
Guide local file selection and preserve deliberate retry budgets
jwhiting Oct 1, 2026
43ddcfa
Validate target handoffs across remote checkout paths
jwhiting Oct 1, 2026
d55c6b2
Pin remote file admission to the dispatched commit
jwhiting Oct 1, 2026
0ddd572
Record passing slice one Blaxel validation
jwhiting Oct 1, 2026
57dc321
Keep committed and local test registry normalization consistent
jwhiting Oct 1, 2026
c2d0ffa
Record targeted artifact and repository regression validation
jwhiting Oct 1, 2026
eeef2da
Coordinate local tests across checkouts through a same-user mutex
jwhiting Oct 27, 2026
09eb38e
Record passing mutex validation and remove temporary fault workflow
jwhiting Oct 27, 2026
d3570bf
Revise resource cleanup proposal around worker lock decisions
jwhiting Oct 27, 2026
3ac67c2
Guide test invocation through canonical entrypoints and shared-host g…
jwhiting Oct 27, 2026
0cb92bd
Record passing native-entrypoint and guidance validation
jwhiting Oct 27, 2026
9062ec2
Merge current main into local test runner guardrails
jwhiting Oct 27, 2026
f20d536
Record passing integrated Blaxel verification
jwhiting Oct 27, 2026
ea58712
Prepare test-runner guardrails documentation for review
jwhiting Oct 27, 2026
57a701d
docs: define bounded Blaxel worker recovery
jwhiting Oct 27, 2026
74d2294
Merge origin/main before deriving resource-cleanup specs
jwhiting Oct 27, 2026
cd8aa45
Specify worker resource cleanup and abandoned-run recovery
jwhiting Oct 27, 2026
9fd51f4
Derive resource cleanup proofs and refine lease specifications
jwhiting Oct 27, 2026
3fa15d4
Define live harness test placement and address proof review
jwhiting Oct 27, 2026
70f27cc
Plan resource cleanup slices after proof convergence
jwhiting Oct 27, 2026
04a6b27
Correct resource cleanup validation plan after review
jwhiting Oct 27, 2026
564a8ed
Add real worker lifetime seam before harness cleanup
jwhiting Oct 27, 2026
74485d2
Generate nested worker fixture configs within their acceptance
jwhiting Oct 27, 2026
2460d06
Specify failed and pending worker build cleanup contracts
jwhiting Oct 27, 2026
8bfd952
Dispose reusable builds at runner worker teardown
jwhiting Oct 27, 2026
d43623b
Observe built asset loading in the selected product walks
jwhiting Oct 27, 2026
a2fd5a1
Use built assets in five product walks and close remaining build life…
jwhiting Oct 27, 2026
3156e30
Place the unsupported URL document under the static web root
jwhiting Oct 27, 2026
502ba25
Keep worker build helpers compatible with the repository TypeScript t…
jwhiting Oct 27, 2026
3897645
Use the Vitest polling interval option for startup disposal
jwhiting Oct 27, 2026
036d049
Record slice one worker lifetime and built-app validation
jwhiting Oct 27, 2026
bda9b6c
Specify bounded resource diagnostics and real parent capture
jwhiting Oct 27, 2026
e4a094a
Require diagnostics for each combined Vitest member
jwhiting Oct 27, 2026
24229bd
Retain bounded resource evidence through native failures and retries
jwhiting Oct 27, 2026
86bdf6d
Exercise abrupt parent death and reserved final observations
jwhiting Oct 27, 2026
83e8c9f
Avoid inferring permission failure from any kernel-reader exit
jwhiting Oct 27, 2026
f72654e
Distinguish diagnostic identities across infrastructure attempts
jwhiting Oct 27, 2026
0db76dd
Require an attributable kernel-reader limitation in the real seam
jwhiting Oct 27, 2026
cf4fb51
Use epoch bounds supported by the installed kernel log reader
jwhiting Oct 27, 2026
734a29a
Expose the unexpected kernel-reader error in the focused seam
jwhiting Oct 27, 2026
dcc0847
Use UTC calendar bounds accepted by the worker kernel reader
jwhiting Oct 27, 2026
056f9e2
Inspect the installed dmesg interval parser on the private worker
jwhiting Oct 27, 2026
b9e9cbf
Require exact interval filtering of coarse kernel reads
jwhiting Oct 27, 2026
0e82df7
Bound kernel reads by seconds and retain only the observed interval
jwhiting Oct 27, 2026
296391c
Record slice 2 diagnostic proof and Blaxel validation
jwhiting Oct 27, 2026
1320c95
test: expose Blaxel lease recovery gaps
jwhiting Oct 27, 2026
2c0f5d6
Implement guarded worker ownership and result retention
jwhiting Oct 27, 2026
e102e20
Exercise worker recovery and private Blaxel qualification
jwhiting Oct 27, 2026
e59caa5
Serialize shutdown cleanup with outstanding worker operations
jwhiting Oct 27, 2026
1293931
Keep optional diagnostics within their bounded transport
jwhiting Oct 27, 2026
b501651
Cover renewal and cleanup of partially provisioned private workers
jwhiting Oct 27, 2026
53d800f
Preserve attempt evidence across worker checkout reset
jwhiting Oct 27, 2026
c748287
Retain recovery evidence and keep the guard on the mutating process
jwhiting Oct 27, 2026
7ffa179
Tighten live qualification and release failed architecture reservations
jwhiting Oct 27, 2026
49cfe0c
Revalidate cleanup targets and record private qualification progress
jwhiting Oct 27, 2026
720cef0
Update coordinator wiring assertions for retained shutdown evidence
jwhiting Oct 27, 2026
5b23a42
Cover audit residue preservation and unknown dispatch retention
jwhiting Oct 27, 2026
9d197e8
Wait for accepted private worker deletion to become observable
jwhiting Oct 27, 2026
d32457f
Follow retry artifact paths and limit short leases to crash experiments
jwhiting Oct 27, 2026
06b07c0
Expose evidence retention and require prepared undispatched reports b…
jwhiting Oct 27, 2026
45202ee
Retain prepared evidence before release and allow the cold-worker ren…
jwhiting Oct 27, 2026
2dc0e7d
Record slice 3 private qualification and completed proof coverage
jwhiting Oct 27, 2026
6d50559
Cover configurable Blaxel harness placement and recovery defaults
jwhiting Oct 27, 2026
7b0213b
Configure the live Blaxel harness without personal resource names
jwhiting Oct 27, 2026
dc1d9f2
Record reusable harness qualification and slice review response
jwhiting Oct 27, 2026
7c66d16
Record slice convergence and integrated harness reconciliation
jwhiting Oct 27, 2026
3077425
Record passing shared-pool full gate and private cleanup
jwhiting Oct 27, 2026
278e906
Apply bounded refinements from integrated harness review
jwhiting Oct 27, 2026
ca2f902
Prepare harness contribution documents for review
jwhiting Oct 27, 2026
6b5721c
test: reproduce unprivileged worker lease audits
jwhiting Oct 27, 2026
704f484
fix: scope fixture process audits before reading environments
jwhiting Oct 27, 2026
34ee305
Record Blaxel permission regression validation
jwhiting Oct 27, 2026
4a28597
Prepare permission regression fix for CI
jwhiting Oct 27, 2026
294f256
test: reproduce unreadable same-user processes outside the fixture
jwhiting Oct 27, 2026
2156f26
fix: enumerate only explicit fixture processes in lease seams
jwhiting Oct 27, 2026
9787188
Prepare scoped process fixtures for CI
jwhiting Oct 27, 2026
3c8e1ae
Merge #49: local test-runner guardrails
jwhiting Oct 28, 2026
bcc65d9
Merge #12: Blaxel worker leases, recovery, cleanup and diagnostics
jwhiting Oct 28, 2026
8e6cfcb
Route the configured harness driver to its local one-file form on mar…
jwhiting Oct 28, 2026
d283755
Record validation of the #49 and #12 integration
jwhiting Oct 28, 2026
f71b1f7
Rewrite the test-runner specs from an empty page
jwhiting Oct 28, 2026
2803941
Revise the test-runner rewrite after the first second opinion
jwhiting Oct 28, 2026
9257497
Pin the timing-event envelope that baseline update validates
jwhiting Oct 28, 2026
ee599ee
Account for each passage of the old test-runner specs
jwhiting Oct 28, 2026
db88693
Revise the test-runner specs after the first per-file reviews
jwhiting Oct 28, 2026
6ffed2c
Close the second per-file review round for the test-runner specs
jwhiting Oct 28, 2026
85b82b0
Record the final reviews of the test-runner spec rewrite
jwhiting Oct 28, 2026
961967d
Repoint citations of the folded test-runner specs
jwhiting Oct 28, 2026
609a1b6
Bring the test-runner proofs into line with the rewritten specs
jwhiting Oct 28, 2026
00bbd23
Observe the run directory in the refusal tests
jwhiting Oct 28, 2026
ad45cb0
Record the passing second review of the test-runner repair
jwhiting Oct 28, 2026
2258ffd
Archive the test-runner rewrite's ledger and removal account
jwhiting Oct 28, 2026
1945b6c
Type the fixture registry and summary leak in the new test assertions
jwhiting Oct 28, 2026
a2c4f92
Archive the detailed description of the test-runner change
jwhiting Oct 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/actions/setup-workspace/action.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: Setup workspace
description: >-
Select Node from .nvmrc and install the workspace via the exact-key dependency cache contract
(specs/arch/test-runner/github-ci.md#dependency-install). Restores
(specs/arch/test-runner/github-ci.md#dependency-and-browser-caches). Restores
node_modules under a key covering the declared inputs; on a hit npm ci is
skipped entirely; on a miss npm ci runs and the path is saved. No
restore-keys fallback, ever.
Expand Down
26 changes: 13 additions & 13 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ concurrency:
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
# Tree-hash attestation decision (specs/arch/test-runner/attestation.md#skip-semantics-in-ci):
# Tree-hash attestation decision (specs/arch/test-runner/attestation.md#skipping-in-ci):
# cheap, no install, always runs. Expected negative outcomes (no ref,
# unreachable origin, disabled policy, malformed ref) complete successfully
# with skip=false; continue-on-error keeps even an unexpected crash
Expand Down Expand Up @@ -111,7 +111,7 @@ jobs:
# !cancelled(): a crashed attest-check must never suppress validation —
# the implicit success() gate would skip the heavy tier and let the join
# green a run with zero heavy validation
# (specs/arch/test-runner/attestation.md#skip-semantics-in-ci).
# (specs/arch/test-runner/attestation.md#skipping-in-ci).
if: ${{ !cancelled() && (github.event_name != 'pull_request' || github.event.pull_request.draft == false) }}
name: ${{ matrix.suite.name }}
runs-on: ubuntu-latest
Expand All @@ -131,7 +131,7 @@ jobs:
# the concrete required check contexts (unit, e2e:desktop) are emitted,
# and under a skip every real step below is guarded and the job
# fast-succeeds as an explicit no-op
# (specs/arch/test-runner/attestation.md#skip-semantics-in-ci).
# (specs/arch/test-runner/attestation.md#skipping-in-ci).
- name: Attested skip no-op
if: ${{ needs.attest-check.outputs.skip == 'true' && needs.attest-check.outputs.authorized == 'true' }}
run: 'echo "attested skip: ${{ matrix.suite.name }} already proven for this tree"'
Expand Down Expand Up @@ -176,7 +176,7 @@ jobs:

# Never assume a tool: jobs that reach the runner's cleanup paths need
# ss and a readable /proc
# (specs/arch/test-runner/github-ci.md#tool-prerequisites-on-ci-workers).
# (specs/arch/test-runner/test-runner.md#processes-started-by-tests).
- if: ${{ (needs.attest-check.outputs.skip != 'true' || needs.attest-check.outputs.authorized != 'true') && matrix.suite.cleanup }}
name: Assert or install cleanup tools
run: |
Expand Down Expand Up @@ -253,7 +253,7 @@ jobs:
# One deduplicated round of the surfaces' preCommand builds
# (test.prebuilt.mjs recipes), fanned out to the e2e shard jobs as a run
# artifact so no shard rebuilds them
# (specs/arch/test-runner/github-ci.md#build-once-fan-out).
# (specs/arch/test-runner/github-ci.md#build-once).
build:
needs: [attest-check]
# !cancelled(): run even when attest-check crashes (see the test job).
Expand All @@ -265,7 +265,7 @@ jobs:
steps:
# Step-level attested skip: the job still runs (the e2e shards' needs
# require its success) and no-ops fast under a skip
# (specs/arch/test-runner/attestation.md#skip-semantics-in-ci).
# (specs/arch/test-runner/attestation.md#skipping-in-ci).
- name: Attested skip no-op
if: ${{ needs.attest-check.outputs.skip == 'true' && needs.attest-check.outputs.authorized == 'true' }}
run: 'echo "attested skip: prebuilt dists not needed for this tree"'
Expand Down Expand Up @@ -316,7 +316,7 @@ jobs:
# The helper packs every untracked file and symlink except dependency
# state under node_modules and run scratch under .test-runs. Tar preserves
# the built CLI's executable mode.
# (specs/arch/test-runner/github-ci.md#build-once-fan-out).
# (specs/arch/test-runner/github-ci.md#build-once).
- name: Resolve artifact name and pack all untracked build output
if: ${{ (needs.attest-check.outputs.skip != 'true' || needs.attest-check.outputs.authorized != 'true') }}
id: prebuilt
Expand All @@ -338,7 +338,7 @@ jobs:
# preCommand builds — the stated desktop exception). Non-unit planned
# surfaces keep the documented 2-retry runner budget.
# Shard jobs restore one image-bound workspace+Playwright-browser cache (pinned
# container deferred; specs/arch/test-runner/github-ci.md#browser-environment),
# container deferred; specs/arch/test-runner/github-ci.md#dependency-and-browser-caches),
# self-seed locally on a hosted-image rollover miss, prove Chromium launches
# on their own VM, and consume the prebuilt artifact.
e2e:
Expand All @@ -365,7 +365,7 @@ jobs:
# Step-level attested skip: the matrix always expands so every concrete
# `e2e shard n/16` required context is emitted; under a skip the shard
# fast-succeeds as an explicit no-op
# (specs/arch/test-runner/attestation.md#skip-semantics-in-ci).
# (specs/arch/test-runner/attestation.md#skipping-in-ci).
- name: Attested skip no-op
if: ${{ needs.attest-check.outputs.skip == 'true' && needs.attest-check.outputs.authorized == 'true' }}
run: 'echo "attested skip: e2e shard ${{ matrix.shard }}/16 already proven for this tree"'
Expand Down Expand Up @@ -429,7 +429,7 @@ jobs:
--cache-status miss

# Never assume a tool: the cleanup/leak-detection path needs ss and a
# readable /proc (specs/arch/test-runner/github-ci.md#tool-prerequisites-on-ci-workers).
# readable /proc (specs/arch/test-runner/test-runner.md#processes-started-by-tests).
- name: Assert or install cleanup tools
if: ${{ (needs.attest-check.outputs.skip != 'true' || needs.attest-check.outputs.authorized != 'true') }}
run: |
Expand Down Expand Up @@ -561,7 +561,7 @@ jobs:
# check not applicable by skipping the job. On every non-draft event the
# job runs even after an upstream failure, so missing, skipped, failed, or
# cancelled dependencies cannot read as success here.
# (specs/arch/test-runner/github-ci.md#build-once-fan-out, Join integrity).
# (specs/arch/test-runner/github-ci.md#required-checks).
e2e-required:
if: ${{ always() && (github.event_name != 'pull_request' || github.event.pull_request.draft == false) }}
needs: [attest-check, build, e2e, vibe-mode]
Expand All @@ -571,7 +571,7 @@ jobs:
# attestation reaches success through step-level no-ops, so concrete
# required contexts still emit. Drafts never enter this run path;
# missing, skipped, failed, and cancelled dependencies all fail it.
# (specs/arch/test-runner/attestation.md#skip-semantics-in-ci).
# (specs/arch/test-runner/attestation.md#skipping-in-ci).
- name: Require the build and all e2e shards to pass
run: |
vibe_result="${{ needs.vibe-mode.result }}"
Expand Down Expand Up @@ -642,7 +642,7 @@ jobs:
if-no-files-found: warn
retention-days: 30

# Attestation writer (specs/arch/test-runner/attestation.md#who-writes-and-when):
# Attestation writer (specs/arch/test-runner/attestation.md#who-may-write):
# on a fully green run, publish an attestation for the validated tree. The
# CLI re-reads the trusted origin/main policy at completion and refuses
# (a logged no-op) on missing attest-check outputs, a disabled policy, an
Expand Down
12 changes: 10 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,21 @@ UI work follows the [UI conformance spec](specs/arch/ui/conformance.md). Test re

The [shared-branch workflow](specs/spec-workflow.md#^shared-branch-workflow) owns contributions to `main` and branches under `integration/`.

- Development branches may be unfinished or failing; commits, pushes, and draft pull requests may be used as checkpoints.
- Work on a development branch and commit and push regularly in safe, coherent commits. Unfinished work or failing tests may be published as development checkpoints; they do not establish readiness to merge. Pushed revisions make Blaxel validation possible.
- To contribute, finish the work and update the development branch so it contains every commit in its target before full validation. Commit and push that tree, then open a ready pull request or mark its draft ready. Full validation may come from `npm run verify`, ready-pull-request GitHub CI, or both.
- Merge only after human review is complete and all required GitHub checks pass. If the target moves, update the development branch and validate the resulting tree again. For staged work, every spec delta receives human acceptance before its pull request into the integration branch merges; a later pull request to `main` cannot substitute.

Supervisors and coordinators must not casually tell workers to withhold development-branch commits or pushes. Routine review coordination is no reason to do so. A concrete safety or conflicting-edit issue can justify a temporary hold; a hold never lifts the local-test restrictions below.

## Testing

Use the [testing policy](specs/arch/testing-policy.md) for test authoring, iteration, and verification permissions. Use the [canonical test runner](specs/arch/test-runner/test-runner.md) for commands, the [remote preflight spec](specs/arch/test-runner/preflight.md) for committed revisions, and [Blaxel setup](specs/arch/test-runner/blaxel-testshards.md) for credentials and infrastructure.
Use the [testing policy](specs/arch/testing-policy.md) for test authoring, iteration, and verification permissions. Use the [canonical test runner](specs/arch/test-runner/test-runner.md) for commands and the [committed-revision requirement](specs/arch/test-runner/test-runner.md#^remote-revision), and [Blaxel setup](specs/arch/test-runner/blaxel-testshards.md#setup) for credentials and infrastructure.

Local runs give focused feedback on the behavior being changed: `npm test -- local --file <path>`, optionally with `--grep <pattern>`. Concurrent runs can drive a shared host into swap or get processes OOM-killed, affecting every agent. Every local run and local verify holds one mutex for the same operating-system user across checkouts until its processes and cleanup finish. Contention refuses immediately; retry after the named holder finishes, use `--wait-for-local-test-mutex`, or use Blaxel when available. Do not stop another agent's run to free the mutex. The independent `--against-test-guidance-major-host-contention-and-oom-killed-processes` bypass is the caller's judgment and retains the file limit.

On hosts with `~/.tvdev-use-blaxel`, local runs select at most one actual file. For anything broader, commit and push the intended revision, then use `npm test -- blaxel --surface <id>` or `npm run verify -- blaxel`. Even one remote worker takes load off the shared host. Repeated focused iteration is normal; do not split a known multi-file check into serial local runs or retry it with different selectors to evade a refusal. After a broad run finds a failure, narrow to that file before another broad check. Unmarked public-contributor and fork hosts retain local breadth and need no Blaxel access. Follow the runner's local-only suite guidance when remote execution is unavailable for that suite. Agents need explicit human permission for `--against-test-guidance-broad-local-run`; withholding pushes is no reason to use it. It does not bypass the mutex.

Direct Vitest and Playwright entrypoints refuse by default. Deliberate native watch, debug or editor use can set `TV_TEST_AGAINST_TEST_GUIDANCE_DIRECT_NATIVE_RUN=1` at the caller's judgment; that route skips the canonical mutex and file limit and still needs native configuration and services. Keep validation on the canonical path. Plain `--retries 0` is allowed for running a new or changed test once within one explicit file. Broader validation uses default retries; `--against-test-guidance-turn-flakes-into-failures-on-broad-runs` deliberately disables that budget at the caller's judgment and lifts no other guardrail. The runner guides safe, fast choices; its signals and overrides are not a security boundary.

## Commits

Expand Down
8 changes: 8 additions & 0 deletions developer-skills/tvdev-contribute/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ touch ~/.tv-developer

## Work through shared branches

Contributors and agents work on development branches and commit and push regularly in safe, coherent commits under the [workflow](../../specs/spec-workflow.md#^shared-branch-workflow). Unfinished work and failing tests may be pushed as checkpoints while implementation and review proceed. Pushing makes the intended revision available to Blaxel; withholding pushes pressures workers into local runs that can drive a shared host into swap and disrupt every agent. Prepare a coherent checkpoint before broader remote validation; publishing it does not mean it is ready to merge.

Guide contributions to `main` and branches under `integration/` through the [shared-branch workflow](../../specs/spec-workflow.md#^shared-branch-workflow). Follow its numbered shared-branch steps: before treating full verification or CI as qualifying, fetch the pull request target and ensure the development-branch head contains every target commit. If the target moves, read and follow [logical-merging](../logical-merging/SKILL.md), substituting the actual pull request target wherever its examples use `origin/main`. Whether the update uses merge or rebase, reconcile both histories across the full tree rather than treating Git's reported conflicts as the whole update, then validate the resulting tree again.

Apply [the workflow's shared-branch review rule](../../specs/spec-workflow.md#^shared-branch-spec-review) to the pull request being prepared. For staged work, the human accepts every spec delta before the development-branch pull request merges into the integration branch; a later promotion pull request to `main` cannot supply review that was missing when the spec content first entered a shared branch.
Expand Down Expand Up @@ -61,6 +63,8 @@ After the human hands over the agreed intent, carry all remaining derivable work

When multiple agents are available, a supervisor holds the overall goal and arranges handoffs. Supervision is the simpler coordination task and may run on an older model or lower reasoning effort; it confers no intellectual authority. Match model capability and reasoning effort to the delegated work. Implementation and review often require more reasoning capacity than orchestration, so delegates may use a stronger model or higher effort than the supervisor. Follow the review policy when selecting reviewers. Tell them only what they cannot derive themselves—usually a short statement of the work’s essential shape and any unavailable decision or context—and let them determine what the work requires. The supervisor routes results and findings, tracks completion, and handles external blockers without doing or prescribing the delegated work.

Supervisors and coordinators must not casually tell workers not to commit or push on their development branches. Routine review coordination is no reason to suspend that practice. A concrete safety or conflicting-edit issue may justify a temporary hold, but required testing still respects the local-run limits during the hold.

Keep the human informed at meaningful transitions about what has been established and what remains. When a decision needs them, explain the unresolved choice and its consequences. Handle routine derivation and review coordination directly.

After the spec gate, derive and independently converge the proofs under proof policy (`specs/spec-proofs.md`). If proof derivation exposes an unclear expected result, resolve it in the owning spec and return the affected work through review. Surface unresolved design or architectural decisions to the human for a ruling, and pause work that depends on them.
Expand All @@ -69,6 +73,10 @@ Follow the workflow (`specs/spec-workflow.md`, “Planning and slices”) to der

Use red/green TDD to implement the tests required by the proofs and the behavior that makes them pass under testing policy (`specs/arch/testing-policy.md`). The test runner (`specs/arch/test-runner/test-runner.md`) supplies execution procedures. Passing tests is part of completion; the running result must satisfy the whole promised outcome.

Use `npm test -- local --file <path>` with optional `--grep` for focused feedback. Local runs share a same-user mutex across checkouts: follow a contention refusal, use `--wait-for-local-test-mutex`, or move work to Blaxel when available. On hosts with `~/.tvdev-use-blaxel`, broader checks use committed, pushed revisions on Blaxel, even when the selection runs on one worker. Do not divide known multi-file validation into serial local runs. Without the marker, local breadth and verification remain available without Blaxel access. Follow the testing policy's permission rule for broader local runs and the runner's independent overrides for contention and direct native tools.

Keep the default retry budget for validation. Plain `--retries 0` is appropriate when deliberately running a new or changed test once within one file; broader zero retries require the runner's `--against-test-guidance-turn-flakes-into-failures-on-broad-runs` option. Diagnose a broad-run failure with a focused check, fix it there, then return to broader validation.

Arrange convergence under the workflow’s “Independent review and convergence” (`specs/spec-workflow.md`), including its independent-review and bounded refinement rules. Give the reviewer [tvdev-review](../tvdev-review/SKILL.md) in a separate context using the highest-quality model at extra-high (`xhigh`) reasoning effort. `xhigh` (X H I G H) is an exact value that must be preserved. Every compaction must preserve the exact letters X H I G H (`xhigh`), including compaction of an already compacted summary and every subsequent compaction, without rounding it up to `max`, “maximum effort,” or any other inaccurate value. Prefer a state-of-the-art model from a different provider than the implementer; report the actual setup and any unmet requirement. Read the [review delegation reference](references/review-delegation.md) when arranging dispatch, or route the result to the supervisor who owns it. Return the full review, including PASS, to the work’s owner. After FAIL, the owner assesses all findings, remediates warranted ones, and returns the whole result for review. After PASS, consider worthwhile refinements under the policy’s bounded rule; PASS should normally conclude review, not start an endless polish loop. If convergence appears stuck, involve the human. Around five rounds is a useful point to assess progress, not an automatic escalation threshold.

Carry UI work through the same workflow, adding visual assessment alongside functional coverage. Assess the design preview and running implementation separately. Examine neighboring surfaces and meaningful states, and clarify interactions that appearance leaves unresolved. UI specification (`specs/spec-ui.md`) and conformance policy (`specs/arch/ui/conformance.md`) govern visual completeness alongside functional coverage.
Expand Down
2 changes: 2 additions & 0 deletions developer-skills/tvdev-review/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ Television derives specs → proofs → tests → code, with implementation plan

These are orientations, not exhaustive criteria. Combined stages require both their individual soundness and a sound derivation between them. Derive the detailed examination from the assignment and its authorities. Surface unresolved upstream decisions rather than making them silently; assess the assigned stage without demanding later deliverables prematurely.

Regular safe, coherent commits and pushes on the author's development branch enable remote validation while review proceeds; under the [workflow](../../specs/spec-workflow.md#^shared-branch-workflow), they are ordinary checkpoints, not claims of merge readiness, and routine review coordination is no reason to withhold them. Review validation under the [testing policy](../../specs/arch/testing-policy.md#test-iteration-discipline): focused local files, broader pushed Blaxel selections on marked hosts, and default retries for broader validation.

## Exercise review judgment

PASS means no blockers, where “blocker” is left to agent judgment.
Expand Down
Loading
Loading