The repository harness exists to make a round of work mechanically checkable. The current baseline is intentionally small: document structure, package tests, package build, and an opt-in local app smoke path.
scripts/harness.shruns the baseline checks. With no arguments it runsdocs,test, andbuild.scripts/harness.sh ciis the non-GUI path used by CI.scripts/harness.sh smokelaunches the macOS app in harness mode, loads a deterministic debug scenario, captures local artifacts, and auto-exits after a short timeout.scripts/harness.sh smoke-allruns the full debug-scenario suite and validates each artifact set.scripts/check-docs.shenforces the minimum doc map and required links.
- Core docs remain present and indexed from docs/index.md.
- Markdown files under
docs/keep a visible top-level heading. swift teststays green for the package targets.swift buildstays green for the package products.- The app can be launched locally in a deterministic harness mode without requiring live hook traffic.
- The smoke path produces a machine-readable report plus PNG, accessibility, and runtime-observability evidence for the rendered window surface.
scripts/smoke-dev-app.sh sets harness environment variables before launching OpenIslandApp.
The smoke path is intentionally aimed at the repository executable, not ~/Applications/Open Island Dev.app. The dev bundle remains useful for manual end-to-end OSS verification, but harness automation should target the current branch's OpenIslandApp binary so the verification result matches the checked-out code exactly.
OPEN_ISLAND_HARNESS_SCENARIOselects a case fromIslandDebugScenarioOPEN_ISLAND_HARNESS_PRESENT_OVERLAYmirrors the scenario onto the real island overlayOPEN_ISLAND_HARNESS_SHOW_CONTROL_CENTERcontrols whether the debug window is frontmostOPEN_ISLAND_HARNESS_START_BRIDGEskips live socket setup when disabledOPEN_ISLAND_HARNESS_BOOT_ANIMATIONdisables the normal boot animation for deterministic runsOPEN_ISLAND_HARNESS_CAPTURE_DELAY_SECONDScontrols when artifact capture runs after launchOPEN_ISLAND_HARNESS_AUTO_EXIT_SECONDSterminates the app automatically after the selected durationOPEN_ISLAND_HARNESS_ARTIFACT_DIRselects the output directory forreport.json,timeline.json,runtime.log, PNG captures, and.ax.jsonaccessibility snapshots
The default smoke path writes artifacts under output/harness/.
Each smoke artifact directory now includes a minimal observability slice:
report.jsonfor the scenario summary and runtime artifact indextimeline.jsonfor ordered launch milestones and harness log eventsruntime.logfor a grep-friendly textual event stream*.pngand*.ax.jsonfor visual and semantic UI evidence
The validator also checks that launch reaches a complete bootstrap milestone, that overlay presentation is observed for overlay runs, and that bootstrap and capture timings stay inside a conservative local threshold.
For the deterministic scenario suite, the harness now performs these semantic checks against the accessibility snapshot:
closed: compact geometry remains in the closed-notch rangesessionList: expanded geometry is present and the list exposes multiple actionable rowsapprovalCard: overlay stays open and the accessibility tree containsDenyplus an allow-style button labelquestionCard: overlay stays open and the three answer choices appear as buttonscompletionCard: overlay stays open and exposes theDonecompletion copylongCompletionCard: overlay stays open and exposes the long completion response text instead of collapsing away
Every meaningful round should leave behind:
- passing
scripts/harness.sh ci - any additional targeted verification for the changed subsystem
- a short summary of remaining gaps, especially when a GUI-only path was not exercised
- CI does not run the GUI smoke step yet because the current baseline avoids depending on a window-server-backed runner path.
- The harness captures milestone timings and log summaries, but it does not yet provide a queryable log/metrics/trace stack.
- The current accessibility assertions are still scenario-specific rather than full golden snapshots.
- We do not yet have execution-plan lifecycle automation beyond the directory conventions defined in docs/exec-plans/README.md.