From 05e9a00afc3057ab3e272b816a300d0d1b3c7f0f Mon Sep 17 00:00:00 2001 From: claude Date: Fri, 24 Jul 2026 16:46:38 +0200 Subject: [PATCH] =?UTF-8?q?fieldtest:=20harvest-sweep=20=E2=80=94=203=20ex?= =?UTF-8?q?amples,=201=20bug=20/=201=20friction=20/=206=20working?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Source-blind against the release binary at 120d116, one example per axis: hs_1_discovery (help -> --folds roster -> --tap spread=mean without opening source or JSON; fold row at the last warm ts as documented), hs_2_typo_key (three closed-set refusals — typo'd op key, undeclared tap, unknown fold — each naming token + valid set, exit 1), hs_3_three_taps (skipped-tap note fires exactly per skipped tap under an explicit plan, silent under record-all and bind-all). Findings routed: the op-key refusal cites the wrong line (points at the next element; recovery still carried by the key name) -> #336; declared-tap names have no positive discovery surface (the deferred #333 view half, evidence now in hand) -> #337. All seven sweep closures verified working from the outside. refs #336, refs #337 --- fieldtests/harvest-sweep/hs_1_discovery.ops.json | 16 ++++++++++++++++ fieldtests/harvest-sweep/hs_2_typo_key.ops.json | 12 ++++++++++++ .../harvest-sweep/hs_3_three_taps.ops.json | 16 ++++++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 fieldtests/harvest-sweep/hs_1_discovery.ops.json create mode 100644 fieldtests/harvest-sweep/hs_2_typo_key.ops.json create mode 100644 fieldtests/harvest-sweep/hs_3_three_taps.ops.json diff --git a/fieldtests/harvest-sweep/hs_1_discovery.ops.json b/fieldtests/harvest-sweep/hs_1_discovery.ops.json new file mode 100644 index 0000000..3873ae1 --- /dev/null +++ b/fieldtests/harvest-sweep/hs_1_discovery.ops.json @@ -0,0 +1,16 @@ +[ + {"op": "doc", "text": "SMA crossover bias with two measurement taps for fold discovery"}, + {"op": "source", "role": "price", "kind": "F64"}, + {"op": "add", "type": "SMA", "name": "fast", "bind": {"length": {"I64": 3}}}, + {"op": "add", "type": "SMA", "name": "slow", "bind": {"length": {"I64": 6}}}, + {"op": "add", "type": "SMA", "name": "px", "bind": {"length": {"I64": 1}}}, + {"op": "feed", "role": "price", "into": ["fast.series", "slow.series", "px.series"]}, + {"op": "add", "type": "Sub", "name": "sub"}, + {"op": "connect", "from": "fast.value", "to": "sub.lhs"}, + {"op": "connect", "from": "slow.value", "to": "sub.rhs"}, + {"op": "add", "type": "Bias", "name": "bias", "bind": {"scale": {"F64": 0.5}}}, + {"op": "connect", "from": "sub.value", "to": "bias.signal"}, + {"op": "tap", "from": "sub.value", "as": "spread"}, + {"op": "tap", "from": "px.value", "as": "price"}, + {"op": "expose", "from": "bias.bias", "as": "bias"} +] diff --git a/fieldtests/harvest-sweep/hs_2_typo_key.ops.json b/fieldtests/harvest-sweep/hs_2_typo_key.ops.json new file mode 100644 index 0000000..d5dfecf --- /dev/null +++ b/fieldtests/harvest-sweep/hs_2_typo_key.ops.json @@ -0,0 +1,12 @@ +[ + {"op": "source", "role": "price", "kind": "F64"}, + {"op": "add", "type": "SMA", "name": "fast", "params": {"length": {"I64": 3}}}, + {"op": "add", "type": "SMA", "name": "slow", "bind": {"length": {"I64": 6}}}, + {"op": "feed", "role": "price", "into": ["fast.series", "slow.series"]}, + {"op": "add", "type": "Sub", "name": "sub"}, + {"op": "connect", "from": "fast.value", "to": "sub.lhs"}, + {"op": "connect", "from": "slow.value", "to": "sub.rhs"}, + {"op": "add", "type": "Bias", "name": "bias"}, + {"op": "connect", "from": "sub.value", "to": "bias.signal"}, + {"op": "expose", "from": "bias.bias", "as": "bias"} +] diff --git a/fieldtests/harvest-sweep/hs_3_three_taps.ops.json b/fieldtests/harvest-sweep/hs_3_three_taps.ops.json new file mode 100644 index 0000000..552fa7d --- /dev/null +++ b/fieldtests/harvest-sweep/hs_3_three_taps.ops.json @@ -0,0 +1,16 @@ +[ + {"op": "doc", "text": "SMA crossover exposing three measurement taps to probe the skipped-tap note"}, + {"op": "source", "role": "price", "kind": "F64"}, + {"op": "add", "type": "SMA", "name": "fast", "bind": {"length": {"I64": 3}}}, + {"op": "add", "type": "SMA", "name": "slow", "bind": {"length": {"I64": 6}}}, + {"op": "feed", "role": "price", "into": ["fast.series", "slow.series"]}, + {"op": "add", "type": "Sub", "name": "sub"}, + {"op": "connect", "from": "fast.value", "to": "sub.lhs"}, + {"op": "connect", "from": "slow.value", "to": "sub.rhs"}, + {"op": "add", "type": "Bias", "name": "bias", "bind": {"scale": {"F64": 1.0}}}, + {"op": "connect", "from": "sub.value", "to": "bias.signal"}, + {"op": "tap", "from": "fast.value", "as": "fast_ma"}, + {"op": "tap", "from": "slow.value", "as": "slow_ma"}, + {"op": "tap", "from": "sub.value", "as": "spread"}, + {"op": "expose", "from": "bias.bias", "as": "bias"} +]