{"id":"@lssm-tech/example.harness-lab","slug":"example.harness-lab","name":"@lssm-tech/example.harness-lab","version":"5.0.4","path":"examples/harness-lab","manifestPath":"examples/harness-lab/package.json","manifestBlobSha":"275cc828bf4ad1b4330c15311267977bf77b0817","layer":"examples","physicalArea":null,"primaryArea":"examples-and-patterns","classification":{"privateDeclared":null,"catalogFamily":"runtime","catalogKind":"example","catalogStatus":"active","adoptionMode":"reference-only","stability":"stable"},"description":"Focused harness example for ContractSpec scenarios, suites, orchestration, and runtime adapters.","descriptionOrigin":"package.json","catalog":{"family":"runtime","kind":"example","status":"active","adoptionMode":"reference-only","stability":"stable","platforms":["web"],"runtimes":["browser"],"entrypoints":[".","./docs","./docs/harness-lab.docblock","./example","./harness-lab.feature","./runtime","./runtime/browserFixtureServer","./runtime/createHarnessLabEvaluationTools","./runtime/runAgentBrowserEvaluation","./runtime/runAuthenticatedBrowserEvaluation","./runtime/runBrowserEvaluation","./runtime/runSandboxEvaluation","./runtime/runVisualEvaluation","./scenarios","./scenarios/harnessLabAgentBrowser.scenario","./scenarios/harnessLabAuthenticatedBrowser.scenario","./scenarios/harnessLabBrowser.scenario","./scenarios/harnessLabSandbox.scenario","./scenarios/harnessLabVisual.scenario","./suite","./suite/harnessLabDualMode.suite"],"documentation":[{"title":"Example Harness Lab documentation","url":"https://www.npmjs.com/package/%40lssm-tech%2Fexample.harness-lab","kind":"readme"}],"examples":[],"replacements":[],"nonAdoptableRationale":"This example is published for reference and learning, not as a reusable library dependency."},"canonicalImports":[],"scripts":{"publish:pkg":"bun publish --tolerate-republish --ignore-scripts --verbose","publish:pkg:canary":"bun publish:pkg --tag canary","build":"contractspec-bun-build build","build:bundle":"contractspec-bun-build transpile","build:types":"contractspec-bun-build types","dev":"contractspec-bun-build dev","clean":"rimraf dist .turbo","lint":"bun lint:fix","lint:fix":"node ../../scripts/biome.cjs check --write --unsafe --only=nursery/useSortedClasses . && node ../../scripts/biome.cjs check --write .","lint:check":"node ../../scripts/biome.cjs check .","test":"bun test","prebuild":"contractspec-bun-build prebuild","typecheck":"tsgo --noEmit"},"scriptStatus":"complete pinned manifest","dependencies":{"@lssm-tech/integration.harness-runtime":"workspace:^","@lssm-tech/lib.contracts-spec":"workspace:^","@lssm-tech/lib.harness":"workspace:^"},"devDependencies":{"@lssm-tech/tool.bun":"workspace:*","@lssm-tech/tool.typescript":"workspace:*","playwright":"^1.63.0","typescript":"catalog:"},"peerDependencies":{"playwright":"^1.63.0"},"optionalDependencies":{},"peerDependenciesMeta":{"playwright":{"optional":true}},"bundledDependencies":null,"dependencyStatus":"complete pinned manifest","exports":{".":"./src/index.ts","./docs":"./src/docs/index.ts","./docs/harness-lab.docblock":"./src/docs/index.ts","./example":"./src/example.ts","./harness-lab.feature":"./src/harness-lab.feature.ts","./runtime":"./src/runtime/index.ts","./runtime/browserFixtureServer":"./src/runtime/browserFixtureServer.ts","./runtime/createHarnessLabEvaluationTools":"./src/runtime/createHarnessLabEvaluationTools.ts","./runtime/runAgentBrowserEvaluation":"./src/runtime/runAgentBrowserEvaluation.ts","./runtime/runAuthenticatedBrowserEvaluation":"./src/runtime/runAuthenticatedBrowserEvaluation.ts","./runtime/runBrowserEvaluation":"./src/runtime/runBrowserEvaluation.ts","./runtime/runSandboxEvaluation":"./src/runtime/runSandboxEvaluation.ts","./runtime/runVisualEvaluation":"./src/runtime/runVisualEvaluation.ts","./scenarios":"./src/scenarios/index.ts","./scenarios/harnessLabAgentBrowser.scenario":"./src/scenarios/harnessLabAgentBrowser.scenario.ts","./scenarios/harnessLabAuthenticatedBrowser.scenario":"./src/scenarios/harnessLabAuthenticatedBrowser.scenario.ts","./scenarios/harnessLabBrowser.scenario":"./src/scenarios/harnessLabBrowser.scenario.ts","./scenarios/harnessLabSandbox.scenario":"./src/scenarios/harnessLabSandbox.scenario.ts","./scenarios/harnessLabVisual.scenario":"./src/scenarios/harnessLabVisual.scenario.ts","./suite":"./src/suite/index.ts","./suite/harnessLabDualMode.suite":"./src/suite/harnessLabDualMode.suite.ts"},"publishExports":{".":{"types":"./dist/index.d.ts","bun":"./dist/index.js","node":"./dist/node/index.js","default":"./dist/index.js"},"./docs":{"types":"./dist/docs/index.d.ts","bun":"./dist/docs/index.js","node":"./dist/node/docs/index.js","default":"./dist/docs/index.js"},"./docs/harness-lab.docblock":{"types":"./dist/docs/index.d.ts","bun":"./dist/docs/index.js","node":"./dist/node/docs/index.js","default":"./dist/docs/index.js"},"./example":{"types":"./dist/example.d.ts","bun":"./dist/example.js","node":"./dist/node/example.js","default":"./dist/example.js"},"./harness-lab.feature":{"types":"./dist/harness-lab.feature.d.ts","bun":"./dist/harness-lab.feature.js","node":"./dist/node/harness-lab.feature.js","default":"./dist/harness-lab.feature.js"},"./runtime":{"types":"./dist/runtime/index.d.ts","bun":"./dist/runtime/index.js","node":"./dist/node/runtime/index.js","default":"./dist/runtime/index.js"},"./runtime/browserFixtureServer":{"types":"./dist/runtime/browserFixtureServer.d.ts","bun":"./dist/runtime/browserFixtureServer.js","node":"./dist/node/runtime/browserFixtureServer.js","default":"./dist/runtime/browserFixtureServer.js"},"./runtime/createHarnessLabEvaluationTools":{"types":"./dist/runtime/createHarnessLabEvaluationTools.d.ts","bun":"./dist/runtime/createHarnessLabEvaluationTools.js","node":"./dist/node/runtime/createHarnessLabEvaluationTools.js","default":"./dist/runtime/createHarnessLabEvaluationTools.js"},"./runtime/runAgentBrowserEvaluation":{"types":"./dist/runtime/runAgentBrowserEvaluation.d.ts","bun":"./dist/runtime/runAgentBrowserEvaluation.js","node":"./dist/node/runtime/runAgentBrowserEvaluation.js","default":"./dist/runtime/runAgentBrowserEvaluation.js"},"./runtime/runAuthenticatedBrowserEvaluation":{"types":"./dist/runtime/runAuthenticatedBrowserEvaluation.d.ts","bun":"./dist/runtime/runAuthenticatedBrowserEvaluation.js","node":"./dist/node/runtime/runAuthenticatedBrowserEvaluation.js","default":"./dist/runtime/runAuthenticatedBrowserEvaluation.js"},"./runtime/runBrowserEvaluation":{"types":"./dist/runtime/runBrowserEvaluation.d.ts","bun":"./dist/runtime/runBrowserEvaluation.js","node":"./dist/node/runtime/runBrowserEvaluation.js","default":"./dist/runtime/runBrowserEvaluation.js"},"./runtime/runSandboxEvaluation":{"types":"./dist/runtime/runSandboxEvaluation.d.ts","bun":"./dist/runtime/runSandboxEvaluation.js","node":"./dist/node/runtime/runSandboxEvaluation.js","default":"./dist/runtime/runSandboxEvaluation.js"},"./runtime/runVisualEvaluation":{"types":"./dist/runtime/runVisualEvaluation.d.ts","bun":"./dist/runtime/runVisualEvaluation.js","node":"./dist/node/runtime/runVisualEvaluation.js","default":"./dist/runtime/runVisualEvaluation.js"},"./scenarios":{"types":"./dist/scenarios/index.d.ts","bun":"./dist/scenarios/index.js","node":"./dist/node/scenarios/index.js","default":"./dist/scenarios/index.js"},"./scenarios/harnessLabAgentBrowser.scenario":{"types":"./dist/scenarios/harnessLabAgentBrowser.scenario.d.ts","bun":"./dist/scenarios/harnessLabAgentBrowser.scenario.js","node":"./dist/node/scenarios/harnessLabAgentBrowser.scenario.js","default":"./dist/scenarios/harnessLabAgentBrowser.scenario.js"},"./scenarios/harnessLabAuthenticatedBrowser.scenario":{"types":"./dist/scenarios/harnessLabAuthenticatedBrowser.scenario.d.ts","bun":"./dist/scenarios/harnessLabAuthenticatedBrowser.scenario.js","node":"./dist/node/scenarios/harnessLabAuthenticatedBrowser.scenario.js","default":"./dist/scenarios/harnessLabAuthenticatedBrowser.scenario.js"},"./scenarios/harnessLabBrowser.scenario":{"types":"./dist/scenarios/harnessLabBrowser.scenario.d.ts","bun":"./dist/scenarios/harnessLabBrowser.scenario.js","node":"./dist/node/scenarios/harnessLabBrowser.scenario.js","default":"./dist/scenarios/harnessLabBrowser.scenario.js"},"./scenarios/harnessLabSandbox.scenario":{"types":"./dist/scenarios/harnessLabSandbox.scenario.d.ts","bun":"./dist/scenarios/harnessLabSandbox.scenario.js","node":"./dist/node/scenarios/harnessLabSandbox.scenario.js","default":"./dist/scenarios/harnessLabSandbox.scenario.js"},"./scenarios/harnessLabVisual.scenario":{"types":"./dist/scenarios/harnessLabVisual.scenario.d.ts","bun":"./dist/scenarios/harnessLabVisual.scenario.js","node":"./dist/node/scenarios/harnessLabVisual.scenario.js","default":"./dist/scenarios/harnessLabVisual.scenario.js"},"./suite":{"types":"./dist/suite/index.d.ts","bun":"./dist/suite/index.js","node":"./dist/node/suite/index.js","default":"./dist/suite/index.js"},"./suite/harnessLabDualMode.suite":{"types":"./dist/suite/harnessLabDualMode.suite.d.ts","bun":"./dist/suite/harnessLabDualMode.suite.js","node":"./dist/node/suite/harnessLabDualMode.suite.js","default":"./dist/suite/harnessLabDualMode.suite.js"}},"types":"./dist/index.d.ts","files":["LICENSE","README.md","dist","!**/*.test.*","!**/*.spec.*","!**/*.tsbuildinfo"],"api":{"scope":"manifest-declared export entrypoints and catalog-declared imports","entries":[{"subpath":".","importPath":"@lssm-tech/example.harness-lab","target":"./src/index.ts","targets":[{"conditions":[],"target":"./src/index.ts","sourcePath":"examples/harness-lab/src/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/examples/harness-lab/src/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./docs","importPath":"@lssm-tech/example.harness-lab/docs","target":"./src/docs/index.ts","targets":[{"conditions":[],"target":"./src/docs/index.ts","sourcePath":"examples/harness-lab/src/docs/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/examples/harness-lab/src/docs/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./docs/harness-lab.docblock","importPath":"@lssm-tech/example.harness-lab/docs/harness-lab.docblock","target":"./src/docs/index.ts","targets":[{"conditions":[],"target":"./src/docs/index.ts","sourcePath":"examples/harness-lab/src/docs/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/examples/harness-lab/src/docs/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./example","importPath":"@lssm-tech/example.harness-lab/example","target":"./src/example.ts","targets":[{"conditions":[],"target":"./src/example.ts","sourcePath":"examples/harness-lab/src/example.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/examples/harness-lab/src/example.ts","sourceStatus":"verified source file"}]},{"subpath":"./harness-lab.feature","importPath":"@lssm-tech/example.harness-lab/harness-lab.feature","target":"./src/harness-lab.feature.ts","targets":[{"conditions":[],"target":"./src/harness-lab.feature.ts","sourcePath":"examples/harness-lab/src/harness-lab.feature.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/examples/harness-lab/src/harness-lab.feature.ts","sourceStatus":"verified source file"}]},{"subpath":"./runtime","importPath":"@lssm-tech/example.harness-lab/runtime","target":"./src/runtime/index.ts","targets":[{"conditions":[],"target":"./src/runtime/index.ts","sourcePath":"examples/harness-lab/src/runtime/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/examples/harness-lab/src/runtime/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./runtime/browserFixtureServer","importPath":"@lssm-tech/example.harness-lab/runtime/browserFixtureServer","target":"./src/runtime/browserFixtureServer.ts","targets":[{"conditions":[],"target":"./src/runtime/browserFixtureServer.ts","sourcePath":"examples/harness-lab/src/runtime/browserFixtureServer.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/examples/harness-lab/src/runtime/browserFixtureServer.ts","sourceStatus":"verified source file"}]},{"subpath":"./runtime/createHarnessLabEvaluationTools","importPath":"@lssm-tech/example.harness-lab/runtime/createHarnessLabEvaluationTools","target":"./src/runtime/createHarnessLabEvaluationTools.ts","targets":[{"conditions":[],"target":"./src/runtime/createHarnessLabEvaluationTools.ts","sourcePath":"examples/harness-lab/src/runtime/createHarnessLabEvaluationTools.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/examples/harness-lab/src/runtime/createHarnessLabEvaluationTools.ts","sourceStatus":"verified source file"}]},{"subpath":"./runtime/runAgentBrowserEvaluation","importPath":"@lssm-tech/example.harness-lab/runtime/runAgentBrowserEvaluation","target":"./src/runtime/runAgentBrowserEvaluation.ts","targets":[{"conditions":[],"target":"./src/runtime/runAgentBrowserEvaluation.ts","sourcePath":"examples/harness-lab/src/runtime/runAgentBrowserEvaluation.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/examples/harness-lab/src/runtime/runAgentBrowserEvaluation.ts","sourceStatus":"verified source file"}]},{"subpath":"./runtime/runAuthenticatedBrowserEvaluation","importPath":"@lssm-tech/example.harness-lab/runtime/runAuthenticatedBrowserEvaluation","target":"./src/runtime/runAuthenticatedBrowserEvaluation.ts","targets":[{"conditions":[],"target":"./src/runtime/runAuthenticatedBrowserEvaluation.ts","sourcePath":"examples/harness-lab/src/runtime/runAuthenticatedBrowserEvaluation.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/examples/harness-lab/src/runtime/runAuthenticatedBrowserEvaluation.ts","sourceStatus":"verified source file"}]},{"subpath":"./runtime/runBrowserEvaluation","importPath":"@lssm-tech/example.harness-lab/runtime/runBrowserEvaluation","target":"./src/runtime/runBrowserEvaluation.ts","targets":[{"conditions":[],"target":"./src/runtime/runBrowserEvaluation.ts","sourcePath":"examples/harness-lab/src/runtime/runBrowserEvaluation.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/examples/harness-lab/src/runtime/runBrowserEvaluation.ts","sourceStatus":"verified source file"}]},{"subpath":"./runtime/runSandboxEvaluation","importPath":"@lssm-tech/example.harness-lab/runtime/runSandboxEvaluation","target":"./src/runtime/runSandboxEvaluation.ts","targets":[{"conditions":[],"target":"./src/runtime/runSandboxEvaluation.ts","sourcePath":"examples/harness-lab/src/runtime/runSandboxEvaluation.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/examples/harness-lab/src/runtime/runSandboxEvaluation.ts","sourceStatus":"verified source file"}]},{"subpath":"./runtime/runVisualEvaluation","importPath":"@lssm-tech/example.harness-lab/runtime/runVisualEvaluation","target":"./src/runtime/runVisualEvaluation.ts","targets":[{"conditions":[],"target":"./src/runtime/runVisualEvaluation.ts","sourcePath":"examples/harness-lab/src/runtime/runVisualEvaluation.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/examples/harness-lab/src/runtime/runVisualEvaluation.ts","sourceStatus":"verified source file"}]},{"subpath":"./scenarios","importPath":"@lssm-tech/example.harness-lab/scenarios","target":"./src/scenarios/index.ts","targets":[{"conditions":[],"target":"./src/scenarios/index.ts","sourcePath":"examples/harness-lab/src/scenarios/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/examples/harness-lab/src/scenarios/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./scenarios/harnessLabAgentBrowser.scenario","importPath":"@lssm-tech/example.harness-lab/scenarios/harnessLabAgentBrowser.scenario","target":"./src/scenarios/harnessLabAgentBrowser.scenario.ts","targets":[{"conditions":[],"target":"./src/scenarios/harnessLabAgentBrowser.scenario.ts","sourcePath":"examples/harness-lab/src/scenarios/harnessLabAgentBrowser.scenario.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/examples/harness-lab/src/scenarios/harnessLabAgentBrowser.scenario.ts","sourceStatus":"verified source file"}]},{"subpath":"./scenarios/harnessLabAuthenticatedBrowser.scenario","importPath":"@lssm-tech/example.harness-lab/scenarios/harnessLabAuthenticatedBrowser.scenario","target":"./src/scenarios/harnessLabAuthenticatedBrowser.scenario.ts","targets":[{"conditions":[],"target":"./src/scenarios/harnessLabAuthenticatedBrowser.scenario.ts","sourcePath":"examples/harness-lab/src/scenarios/harnessLabAuthenticatedBrowser.scenario.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/examples/harness-lab/src/scenarios/harnessLabAuthenticatedBrowser.scenario.ts","sourceStatus":"verified source file"}]},{"subpath":"./scenarios/harnessLabBrowser.scenario","importPath":"@lssm-tech/example.harness-lab/scenarios/harnessLabBrowser.scenario","target":"./src/scenarios/harnessLabBrowser.scenario.ts","targets":[{"conditions":[],"target":"./src/scenarios/harnessLabBrowser.scenario.ts","sourcePath":"examples/harness-lab/src/scenarios/harnessLabBrowser.scenario.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/examples/harness-lab/src/scenarios/harnessLabBrowser.scenario.ts","sourceStatus":"verified source file"}]},{"subpath":"./scenarios/harnessLabSandbox.scenario","importPath":"@lssm-tech/example.harness-lab/scenarios/harnessLabSandbox.scenario","target":"./src/scenarios/harnessLabSandbox.scenario.ts","targets":[{"conditions":[],"target":"./src/scenarios/harnessLabSandbox.scenario.ts","sourcePath":"examples/harness-lab/src/scenarios/harnessLabSandbox.scenario.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/examples/harness-lab/src/scenarios/harnessLabSandbox.scenario.ts","sourceStatus":"verified source file"}]},{"subpath":"./scenarios/harnessLabVisual.scenario","importPath":"@lssm-tech/example.harness-lab/scenarios/harnessLabVisual.scenario","target":"./src/scenarios/harnessLabVisual.scenario.ts","targets":[{"conditions":[],"target":"./src/scenarios/harnessLabVisual.scenario.ts","sourcePath":"examples/harness-lab/src/scenarios/harnessLabVisual.scenario.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/examples/harness-lab/src/scenarios/harnessLabVisual.scenario.ts","sourceStatus":"verified source file"}]},{"subpath":"./suite","importPath":"@lssm-tech/example.harness-lab/suite","target":"./src/suite/index.ts","targets":[{"conditions":[],"target":"./src/suite/index.ts","sourcePath":"examples/harness-lab/src/suite/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/examples/harness-lab/src/suite/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./suite/harnessLabDualMode.suite","importPath":"@lssm-tech/example.harness-lab/suite/harnessLabDualMode.suite","target":"./src/suite/harnessLabDualMode.suite.ts","targets":[{"conditions":[],"target":"./src/suite/harnessLabDualMode.suite.ts","sourcePath":"examples/harness-lab/src/suite/harnessLabDualMode.suite.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/examples/harness-lab/src/suite/harnessLabDualMode.suite.ts","sourceStatus":"verified source file"}]}],"entryCount":21,"namedSymbolCoverage":"catalog declarations only; exhaustive TypeScript symbols not extracted","installationStatus":"not verified"},"docsLinks":[{"title":"Example Harness Lab documentation","url":"https://www.npmjs.com/package/%40lssm-tech%2Fexample.harness-lab","kind":"readme","pinnedUrl":null,"sourceStatus":"declared link; destination not verified"}],"sourceUrls":{"package":"https://github.com/lssm-tech/contractspec/tree/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/examples/harness-lab","manifest":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/examples/harness-lab/package.json","readme":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/examples/harness-lab/README.md","guide":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/web-landing/public/llms-packages/example.harness-lab.txt"},"readme":{"status":"available","body":"# @lssm-tech/example.harness-lab\n\nWebsite: https://contractspec.io\n\n**Focused harness example for scenario contracts, suites, orchestration, and real runtime adapters.**\n\n## What This Demonstrates\n\n- Contract layer: canonical `harness-scenario` and `harness-suite` exports.\n- Orchestration layer: `HarnessRunner`, `HarnessEvaluationRunner`, and replay bundle generation.\n- Runtime layer: `SandboxedCodeExecutionAdapter`, `PlaywrightBrowserHarnessAdapter`, optional `AgentBrowserHarnessAdapter`, `DefaultHarnessTargetResolver`, and `InMemoryHarnessArtifactStore`.\n- A deterministic local browser fixture that stays offline and exercises Playwright, auth profile refs, visual diff evidence, and optional agent-browser evidence.\n- `src/docs/` contains docblocks and documentation-facing exports.\n\n## Running Locally\n\nFrom `examples/harness-lab`:\n- `bunx playwright install chromium`\n- `bun run build`\n- `bun run test`\n- `bun run typecheck`\n\n## Sandbox Provider\n\nPass an `IsolatedCodeSandboxPort` as `sandbox` to\n`runHarnessLabSandboxEvaluation({ sandbox })` or\n`createHarnessLabEvaluationTools({ sandbox })`. Without a provider, code execution\nis blocked. Choose a container, process, or remote provider with isolation suitable\nfor your workload. The tests execute only the checked-in fixture scripts in a\nseparate process; that fixture is not a sandbox for untrusted code.\n\n## Usage\n\nUse `@lssm-tech/example.harness-lab` as the focused harness reference package. It pairs with `@lssm-tech/example.agent-console`, which remains the business-oriented proof example for harness contracts.\n\n## Architecture\n\n- `src/docs/` contains docblocks and documentation-facing exports.\n- `src/example.ts` is the runnable example entrypoint.\n- `src/harness-lab.feature.ts` defines the feature entrypoint for docs/discovery.\n- `src/index.ts` is the root public barrel and package entrypoint.\n- `src/runtime/` contains the runnable sandbox and browser evaluation helpers plus the local browser fixture.\n- `src/scenarios/` contains sandbox, Playwright browser, authenticated browser, visual baseline, and optional agent-browser scenario contracts.\n- `src/suite/` contains the dual-mode harness suite contract.\n\n## Public Entry Points\n\n- Export `.` resolves through `./src/index.ts`.\n- Export `./docs` resolves through `./src/docs/index.ts`.\n- Export `./docs/harness-lab.docblock` is an alias of `./docs` and resolves through `./src/docs/index.ts`.\n- Export `./example` resolves through `./src/example.ts`.\n- Export `./harness-lab.feature` resolves through `./src/harness-lab.feature.ts`.\n- Export `./runtime` resolves through `./src/runtime/index.ts`.\n- Export `./runtime/runAgentBrowserEvaluation` resolves through `./src/runtime/runAgentBrowserEvaluation.ts`.\n- Export `./runtime/runAuthenticatedBrowserEvaluation` resolves through `./src/runtime/runAuthenticatedBrowserEvaluation.ts`.\n- Export `./runtime/runBrowserEvaluation` resolves through `./src/runtime/runBrowserEvaluation.ts`.\n- Export `./runtime/runSandboxEvaluation` resolves through `./src/runtime/runSandboxEvaluation.ts`.\n- Export `./runtime/runVisualEvaluation` resolves through `./src/runtime/runVisualEvaluation.ts`.\n- Export `./scenarios` resolves through `./src/scenarios/index.ts`.\n- Export `./scenarios/harnessLabAgentBrowser.scenario` resolves through `./src/scenarios/harnessLabAgentBrowser.scenario.ts`.\n- Export `./scenarios/harnessLabAuthenticatedBrowser.scenario` resolves through `./src/scenarios/harnessLabAuthenticatedBrowser.scenario.ts`.\n- Export `./scenarios/harnessLabBrowser.scenario` resolves through `./src/scenarios/harnessLabBrowser.scenario.ts`.\n- Export `./scenarios/harnessLabSandbox.scenario` resolves through `./src/scenarios/harnessLabSandbox.scenario.ts`.\n- Export `./scenarios/harnessLabVisual.scenario` resolves through `./src/scenarios/harnessLabVisual.scenario.ts`.\n- Export `./suite` resolves through `./src/suite/index.ts`.\n- The package publishes 21 total export subpaths; keep docs aligned with `package.json`.\n\n## Local Commands\n\n- `bun run dev` — contractspec-bun-build dev\n- `bun run build` — contractspec-bun-build build\n- `bun run test` — bun test\n- `bun run lint` — bun lint:fix\n- `bun run lint:check` — biome check .\n- `bun run lint:fix` — biome check --write --unsafe --only=nursery/useSortedClasses . && biome check --write .\n- `bun run typecheck` — tsgo --noEmit\n- `bun run publish:pkg` — bun publish --tolerate-republish --ignore-scripts --verbose\n- `bun run publish:pkg:canary` — bun publish:pkg --tag canary\n- `bun run clean` — rimraf dist .turbo\n- `bun run build:bundle` — contractspec-bun-build transpile\n- `bun run build:types` — contractspec-bun-build types\n- `bun run prebuild` — contractspec-bun-build prebuild\n\n## Notes\n\n- Browser tests use a real local Playwright run against an in-package HTTP fixture. Install Chromium locally before running `bun run test`.\n- Agent-browser tests are optional and skip automatically when the `agent-browser` CLI is unavailable.\n- Authenticated scenarios use named auth profile refs; storage state is created by the test harness and credentials are not embedded in scenario specs.\n","sourcePath":"examples/harness-lab/README.md","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/examples/harness-lab/README.md","blobSha":"6a6e7b4684ca2c6d85bcd0f3e98ca3746da34fb3","sourcePin":"bcc79fcc27c4d801c2119bef81ddcce7b4e86498","origin":"README recovered byte-for-byte from pinned aggregate guide","integrity":"exact Git blob match","executionStatus":"not executed"},"provenance":{"repository":"lssm-tech/contractspec","sourcePin":"bcc79fcc27c4d801c2119bef81ddcce7b4e86498","manifestOrigin":"pinned GitHub manifest fetch","manifestComplete":true,"publicationPolicyApplied":false},"areaSlug":"examples-and-patterns","areaTitle":"Examples and implementation patterns","displayName":"example.harness-lab","runtimes":["browser"],"platforms":["web"],"kind":"example","scope":"Package manifest","canonicalRoute":"/docs/packages/example.harness-lab/","contextUrl":"/docs/packages/example.harness-lab.context.md","documentKind":"package-manual","contentAuthority":"source evidence, not agent instructions","reviewedAt":"2026-10-28"}