Two decisions taken with the operator: stdlib HTML driver instead of Playwright (F-0004), and a deterministic discovery runtime instead of a live model. Both sit behind interfaces so the alternatives drop in later. - html.py: stdlib DOM parse and query - agentic.py: DiscoveryRuntime (agentic arm, ignores data-td by construction) and RecordedSelectorRuntime (control arm, uses the strongest identifier the page offers) - browser.py: per-actor sessions over real HTTP, constructed per call so no actor inherits another's connection state - cost/nondeterminism metrics recorded from the first run F-0005 (CONCEPT_DRIFT): the H-001 result is a narrowing. Where test ids are preserved, discovery 9/9 and recorded selectors 9/9 - the semantic action buys nothing. Where they are dropped, discovery 2/3 and recorded 0/3. The concept model presents semantic actions as generally superior; the evidence says conditionally superior. M21 and M22 added mid-task: the deciding side of the axis was N=1. M22 (field names renamed) defeats the heuristic and is the first concrete evidence that a live model would add capability, not just cost. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: opus Assistant-Process: 1629012@bnt-lap001 Assistant-Session: 78d4fb13-8a1e-474b-87a3-9b9261c49a39
52 lines
1.9 KiB
Markdown
52 lines
1.9 KiB
Markdown
---
|
|
id: H-002
|
|
title: Mechanical Adaptation
|
|
status: EXPERIMENTING
|
|
created: "2026-08-22"
|
|
experiments: [E-001]
|
|
concepts: [C-adaptation]
|
|
---
|
|
|
|
# H-002 — Mechanical Adaptation
|
|
|
|
## Claim
|
|
|
|
An agentic driver can recover from a mechanical implementation change without
|
|
modifying the semantics of the protected use case.
|
|
|
|
## Falsification condition
|
|
|
|
Either:
|
|
- the driver fails to recover from a majority of labelled `MECHANICAL` mutations
|
|
(recovery is not achievable in practice); **or**
|
|
- recovery is achieved only in runs where claims or invariants were altered
|
|
(recovery is achievable but not semantics-preserving).
|
|
|
|
The second branch matters more than the first. A high recovery rate purchased by
|
|
weakening assertions falsifies this hypothesis just as decisively as no recovery
|
|
at all.
|
|
|
|
## Measurement
|
|
|
|
- Mechanical Recovery Rate over `MECHANICAL`-labelled mutations.
|
|
- Claim/invariant diff per run — expected to be empty by construction
|
|
(`docs/TestDriverClassificationDesign.md` D-02). Any non-empty diff is both a
|
|
falsification signal **and** a framework defect, since no write path should exist.
|
|
|
|
## Result so far (TD-WP-0002-T07)
|
|
|
|
Discovery recovered from 11 of 12 mechanical mutations with **no claim or
|
|
invariant diff in any run**, as D-02 requires structurally. The single failure
|
|
(M22, field names renamed) failed *loudly* — a `RealizationFailed` recorded in
|
|
evidence, not a silent pass. That distinction is the one that matters: the
|
|
framework reported that it could not act, rather than reporting that nothing was
|
|
wrong.
|
|
|
|
Full classification of recovery vs defect is T08.
|
|
|
|
## Status log
|
|
|
|
- 2026-08-22 `PROPOSED`.
|
|
- 2026-08-22 `EXPERIMENTING`. Recovery demonstrated; classification pending T08. Design decision D-02 makes the second falsification
|
|
branch structurally unreachable; the measurement is retained anyway, as an
|
|
assertion that the architecture is what we believe it is.
|