Skip to content

feat(spec): default emitter manifests for the opentrons and hamilton adapters - #418

Draft
LamaSu wants to merge 2 commits into
masterfrom
feat/spec-lab-emitter-manifests
Draft

LamaSu wants to merge 2 commits into
masterfrom
feat/spec-lab-emitter-manifests

Conversation

@LamaSu

@LamaSu LamaSu commented Sep 24, 2026 •

Copy link
Copy Markdown
Owner

Update, 443ac4c6, after evidence's review (#3251):

  • hamilton: APPROVED, with the receipt core.
  • opentrons: limited to the tier-0 floor (decl.self_attested only). Its real path emits non-vocabulary types (protocol_uploaded, run_action, run_*) and no real completion event.

It rises once evidence maps those events to the vocabulary. The kernel coverage test still holds, and a spec test pins opentrons at tier 0.

What

Evidence asked for this (#3174): propose the lab manifests, with emit sites cited and no mock.

The kernel's adapter factory registers opentrons and hamilton (adapter-factory.ts:494-495), but @pcc/spec shipped no default emitter manifest for either. So:

The lab vertical therefore capped at tier 0.

The entries

Both get the kernel receipt core and nothing more, because that is all the code emits today.

Primitive Emit site
receipt.kernel_signed, ident.registered_key The kernel's EvidenceEmitter finalizes and signs every job-step bundle (kernel/src/evidence-emitter.ts, finalize → signFn → kernelSignature). This holds for any kernel adapter, exactly as for octoprint and ipp.
confirm.execution_mode (expected: real) The same emitter marks mock and simulated events fabricated, so they never satisfy a real tier (the isFabricated handling). The Opentrons adapter reports simulated: true in mock mode (opentrons/adapter.ts:53), and its mock events carry mock: true.
artifact.hash, decl.self_attested The receipt core's integrity floor and tier-0 floor, the same as every kernel connector.

Not claimed:

  • machine.execution_log. Neither adapter feeds LogCaptureService; only printer-log-adapter.ts does. The real Opentrons path emits protocol_uploaded and run_action. Hamilton emits execution_started, execution_completed and execution_failed. Neither is a hash-chained, kernel-captured controller log.
  • Any telemetry primitive.
  • PyLabRobot. It is not a kernel AdapterType (kernel-config.ts), so it gets no entry here.

Tests

  • A new kernel test, adapter-manifest-coverage.test.ts, fails if any machine adapter the factory registers lacks a default manifest. On master it fails with [hamilton, opentrons].
  • The spec emitter-manifest.test.ts adapter lists gain both, including "eligible by default at tier 1".
  • Spec: 797 passed, tsc clean. Kernel coverage plus adapter-factory: 50 passed.

Review

Evidence reviews. Data only; no code shape changes.

🤖 Generated with Claude Code

https://claude.ai/code/session_01PkeiQMnVePeBGU9svhREFy

LamaSu and others added 2 commits September 24, 2026 16:20
…adapters

The kernel's adapter factory registers opentrons and hamilton, but spec
shipped no default emitter manifest for either, so auto-onboarding wrote
free-text tier-0 evidence for liquid handlers and the provenance planner
saw them supply nothing (the lab vertical capped at tier 0).

Both get the kernel receipt core and nothing more, because that is what the
code emits:
- the kernel's EvidenceEmitter signs every job-step bundle and marks
  mock/simulated events fabricated (kernel/src/evidence-emitter.ts), which
  is the basis of receipt.kernel_signed, ident.registered_key and
  confirm.execution_mode for any kernel adapter;
- the real Opentrons path emits protocol_uploaded and run_action; Hamilton
  emits execution_started/completed/failed;
- neither feeds LogCaptureService (only printer-log-adapter does), so no
  machine.execution_log is claimed, and neither emits telemetry.
PyLabRobot is not a kernel AdapterType, so it gets no entry.

A kernel test now fails if any registered machine adapter lacks a default
manifest (it fails on master with [hamilton, opentrons]). The spec tests'
adapter lists gain both, including tier-1 eligibility by default.

Tests: spec 797/797, tsc clean; kernel coverage + adapter-factory 50/50.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PkeiQMnVePeBGU9svhREFy
…p to the vocabulary (evidence review)

Evidence's review of #418 (#3251): hamilton approved; opentrons changes
requested. The kernel Opentrons adapter's real path emits only
non-vocabulary types (protocol_uploaded, run_action, run_*) and no real
completion event, so the receipt core over-claims. Its default manifest is
now decl.self_attested only (tier 0), keeping the kernel coverage test
honest, until evidence maps its events (offered in #3251). A spec test pins
opentrons at tier 0; hamilton keeps the receipt core.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PkeiQMnVePeBGU9svhREFy

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant