@hecer/yoke 1.21.1 → 1.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codex-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +48 -0
  4. package/README.md +8 -1
  5. package/TODOS.md +6 -0
  6. package/bench/analyze-codex-comparison.mjs +90 -17
  7. package/bench/compare-codex.mjs +159 -36
  8. package/bench/result-schema.mjs +132 -0
  9. package/canon/manifest.yaml +1 -1
  10. package/canon/skills/visual-verification/SKILL.md +25 -2
  11. package/canon/tools/codex-rtk-hook.mjs +6 -16
  12. package/dist/agents/pi-telemetry.js +2 -1
  13. package/dist/agents/process-streams.js +12 -64
  14. package/dist/agents/provider-selection.js +12 -0
  15. package/dist/agents/telemetry.js +52 -52
  16. package/dist/change/inbox.js +8 -3
  17. package/dist/check/command.js +69 -17
  18. package/dist/check/delivery.js +121 -0
  19. package/dist/cli.js +91 -3
  20. package/dist/code-intelligence/adapters/mcp.js +1 -0
  21. package/dist/code-intelligence/budgets.js +138 -0
  22. package/dist/code-intelligence/contracts.js +2 -0
  23. package/dist/code-intelligence/coordinator.js +159 -85
  24. package/dist/code-intelligence/evidence.js +87 -34
  25. package/dist/code-intelligence/index.js +1 -0
  26. package/dist/code-intelligence/mcp-client.js +25 -6
  27. package/dist/code-intelligence/mcp-server.js +14 -11
  28. package/dist/code-intelligence/preflight.js +71 -0
  29. package/dist/dashboard/analytics.js +5 -3
  30. package/dist/goals/command.js +183 -53
  31. package/dist/goals/usage.js +87 -0
  32. package/dist/loop/cache-isolation.js +36 -0
  33. package/dist/loop/candidate-cleanup.js +47 -17
  34. package/dist/loop/candidates.js +17 -11
  35. package/dist/loop/dispatcher.js +89 -26
  36. package/dist/loop/failure.js +104 -0
  37. package/dist/loop/gate-snapshot.js +19 -0
  38. package/dist/loop/git.js +1 -1
  39. package/dist/loop/loop.js +124 -70
  40. package/dist/loop/parallel-adapters.js +57 -6
  41. package/dist/loop/parallel-command.js +49 -7
  42. package/dist/loop/proof-retention.js +70 -0
  43. package/dist/loop/recovery.js +23 -5
  44. package/dist/loop/reporter.js +22 -5
  45. package/dist/loop/run-command.js +101 -47
  46. package/dist/loop/runner.js +6 -5
  47. package/dist/loop/worker.js +152 -91
  48. package/dist/observability/history.js +2 -1
  49. package/dist/observability/invocation.js +42 -0
  50. package/dist/observability/local-report.js +120 -0
  51. package/dist/observability/usage.js +19 -0
  52. package/dist/prd/command.js +20 -7
  53. package/dist/prd/decompose.js +5 -2
  54. package/dist/retrofit/config.js +29 -2
  55. package/dist/retrofit/gitignore.js +12 -0
  56. package/dist/retrofit/planners/codex.js +20 -20
  57. package/dist/routing/attempts.js +241 -0
  58. package/dist/routing/capability.js +13 -9
  59. package/dist/routing/optimization.js +73 -0
  60. package/dist/routing/registry.js +7 -1
  61. package/dist/routing/router.js +282 -127
  62. package/dist/setup/command.js +8 -2
  63. package/dist/smoke/command.js +387 -85
  64. package/dist/update/check.js +1 -1
  65. package/docs/BENCHMARK-MANIFEST.md +131 -0
  66. package/docs/CODE-INTELLIGENCE.md +43 -1
  67. package/docs/CODEX-COMPARISON-2026-09-29.md +15 -0
  68. package/docs/DELIVERY-JOURNEYS.md +206 -0
  69. package/docs/ECONOMIC-ROUTING.md +180 -0
  70. package/docs/GOALS.md +61 -4
  71. package/docs/RELEASE-VALIDATION-1.22.0.md +115 -0
  72. package/docs/RELEASE-VALIDATION-1.23.0.md +39 -0
  73. package/docs/benchmarks/2026-10-04-efficiency/ANALYSE.md +182 -0
  74. package/docs/benchmarks/2026-10-04-efficiency/compare-help.py +55 -0
  75. package/docs/benchmarks/2026-10-04-efficiency/manifest.json +125 -0
  76. package/docs/benchmarks/2026-10-04-efficiency/provenance-analysis.json +90 -0
  77. package/docs/benchmarks/2026-10-04-efficiency/provenance-design.json +90 -0
  78. package/docs/benchmarks/2026-10-04-efficiency/provenance-original-report.json +90 -0
  79. package/docs/benchmarks/2026-10-04-efficiency/raw/DEVELOPMENT_ANALYSIS.md +142 -0
  80. package/docs/benchmarks/2026-10-04-efficiency/raw/RESULT.md +21 -0
  81. package/docs/benchmarks/2026-10-04-efficiency/raw/commands.jsonl +26 -0
  82. package/docs/benchmarks/2026-10-04-efficiency/raw/environment.json +31 -0
  83. package/docs/benchmarks/2026-10-04-efficiency/raw/final-yoke-smoke.json +40 -0
  84. package/docs/benchmarks/2026-10-04-efficiency/raw/model-purpose-hints.csv +19 -0
  85. package/docs/benchmarks/2026-10-04-efficiency/raw/observations.jsonl +21 -0
  86. package/docs/benchmarks/2026-10-04-efficiency/raw/observer-command-phases.csv +12 -0
  87. package/docs/benchmarks/2026-10-04-efficiency/raw/roles.csv +5 -0
  88. package/docs/benchmarks/2026-10-04-efficiency/raw/shell-categories.csv +8 -0
  89. package/docs/benchmarks/2026-10-04-efficiency/raw/stories.csv +8 -0
  90. package/docs/benchmarks/2026-10-04-efficiency/raw/summary.json +469 -0
  91. package/docs/benchmarks/2026-10-04-efficiency/raw/yoke-history.jsonl +104 -0
  92. package/docs/benchmarks/2026-10-04-efficiency/raw/yoke-loop-1.log +58 -0
  93. package/docs/benchmarks/2026-10-04-efficiency/raw/yoke-loop-2.log +29 -0
  94. package/docs/benchmarks/2026-10-04-efficiency/raw/yoke-loop-3.log +5 -0
  95. package/docs/benchmarks/2026-10-04-efficiency/raw/yoke-loop-4.log +12 -0
  96. package/docs/benchmarks/2026-10-04-efficiency/raw/yoke-phases.csv +10 -0
  97. package/docs/benchmarks/2026-10-04-efficiency/regression-comparison.json +104 -0
  98. package/docs/parallel-execution.md +37 -9
  99. package/docs/superpowers/plans/2026-10-04-yoke-1.23-efficiency-prd.json +11 -0
  100. package/docs/superpowers/plans/2026-10-04-yoke-1.23-efficiency.md +83 -0
  101. package/docs/superpowers/specs/2026-10-04-yoke-1.23-efficiency-design.md +120 -0
  102. package/gemini-extension.json +1 -1
  103. package/package.json +1 -1
@@ -0,0 +1,115 @@
1
+ # Yoke 1.22.0 validation — 2026-10-03
2
+
3
+ Implementation was based on `f2d9180f4e72afe79c9930c62625874d734db3c6`
4
+ (1.21.1). Parallel implementation and independent reviews covered routing and
5
+ telemetry, goals, worker recovery, Code Intelligence, benchmark provenance and
6
+ delivery evidence. This record separates deterministic regression evidence from
7
+ provider performance or publication claims.
8
+
9
+ ## Local release gates
10
+
11
+ Environment: Linux, Node.js **24.19.0**, npm **11.9.0**.
12
+
13
+ | Gate | Result |
14
+ | --- | --- |
15
+ | Baseline before changes | 1,426 tests in 156 files passed. |
16
+ | `npm run prepublishOnly` | Passed: lint, build, complete test suite, README metadata and package dry-run. |
17
+ | Complete corrected suite | **1,610 tests in 177 files passed**, no skipped tests; 63.75 seconds in this run. |
18
+ | Canon validation | Passed with `node --import tsx src/cli.ts validate canon`. |
19
+ | Dependency audit | `npm audit --audit-level=high`: **0 vulnerabilities**. |
20
+ | Whitespace validation | `git diff --check` passed. |
21
+ | Tarball installation | Passed in a fresh prefix with lifecycle scripts disabled: installed binary starts and validates its packaged Canon. |
22
+ | Package contents | 376 files; all five packaged version manifests report 1.22.0; new runtime modules are included, with no root test suite, dependency tree or `.yoke` runtime state. |
23
+
24
+ The usual `npm run yoke -- validate canon` wrapper was blocked by this host's
25
+ restriction on the tsx CLI's local IPC socket (`EPERM`). Loading the same source
26
+ CLI through Node's tsx import hook passed. No project permission or verification
27
+ policy was weakened to accommodate that environment restriction.
28
+
29
+ The first integrated runs exposed issues added during concurrent implementation;
30
+ the corrected final suite above passed. A registry-eviction test additionally
31
+ needed an explicit clock advance: equal-millisecond event filenames have UUID
32
+ tie ordering, so wall-clock timing could leave an older observation in its
33
+ fixture. The test now establishes eviction deterministically and still verifies
34
+ that the independent durable attempt account remains exhausted.
35
+
36
+ The first GitHub matrix passed both Linux jobs and exposed a Windows-only fixture
37
+ issue in the new recovery tests. Windows TEMP can use a DOS short-name alias while
38
+ recovery intentionally persists canonical paths. The JavaScript `realpathSync`
39
+ implementation can retain that alias, so an initial fixture correction was
40
+ insufficient. Both fixtures now use `realpathSync.native`, matching recovery's
41
+ handle-based resolution, before asserting exact ownership paths. Production
42
+ recovery validation remains unchanged. The full matrix is rerun on that correction.
43
+
44
+ ## Regressions covered
45
+
46
+ - Durable implementation admission across restarts, registry write failures and
47
+ eviction of more than 1,000 optional observations; concurrent reservations and
48
+ interrupted attempts retain their spent slots.
49
+ - Per-call goal budget checks before dispatch, planning consumption before worker
50
+ admission, native/ordinary provider selection and complete or partial usage
51
+ through failure paths.
52
+ - Stable usage IDs, reviewer/critic/repair joins, partial provider telemetry and
53
+ dashboard aggregates that preserve known child calls.
54
+ - Economic selection of comparable complete execution sequences, including
55
+ failed attempts and escalation, model/policy changes, cold starts, missing
56
+ costs and all three objectives. Synthetic observations test the decision
57
+ rules; they do not measure model superiority.
58
+ - Real temporary Git repositories for incomplete-worker recovery and candidate
59
+ retention. Pause, cancellation, failed gates and selection errors preserve
60
+ work; ownership, contract, base and repository validation guard reuse.
61
+ - Unchanged gate reuse, invalidation after relevant changes, typed completion
62
+ repair, persistent no-progress blocking and separate candidate scopes.
63
+ - Code Intelligence reference direction, unknown freshness, incomplete traversal,
64
+ total response budgets, shared deadlines and pre-mutation receipt admission.
65
+ - Delivery artifact/source/acceptance binding, bounded hashing, unsafe paths,
66
+ command outcomes and secret-safe multi-step browser proof reports.
67
+ - Benchmark manifests binding actual source/build identity, fixture, acceptance,
68
+ model and startup policy; incompatible and legacy rows stay out of verified
69
+ comparison groups.
70
+
71
+ ## Limits and operational behavior
72
+
73
+ No paid LLM calls, authenticated provider benchmarks, production deployments or
74
+ real-browser end-to-end application runs were performed for this release. Browser
75
+ journey tests use deterministic browser seams. Model cost/latency observations
76
+ are fixtures, and there is no claimed percentage saving or general speedup.
77
+
78
+ Old routing configurations retain their ranking unless optimization is enabled.
79
+ New setup configurations choose `balanced`, requiring 20 comparable complete
80
+ samples for baseline and alternative; the supported minimum is 10. Cost tiers
81
+ and versioned setup profiles are configuration priors. Missing actual costs,
82
+ partial usage or ambiguous role attribution prevent economic promotion.
83
+
84
+ Provider counters reported only at call completion cannot impose an in-flight
85
+ hard token cap. Known overruns are retained and block further dispatch; unknown
86
+ interrupted usage needs an explicit budget decision. Separately prepared project
87
+ planning and human time are not amortized into execution-sequence comparisons.
88
+
89
+ Recovery preserves code and evidence, not a previous process's callback closures.
90
+ A recovered integration cannot manufacture a missing economic success outcome.
91
+ Candidate races resume the first retained alternative through ordinary recovery;
92
+ additional alternatives remain available for inspection and explicit cleanup.
93
+ Custom lifecycles without `retain` preserve their prior cleanup contract.
94
+
95
+ Artifact hashes compare pre-check and post-check contents. They do not detect a
96
+ change reverted between snapshots, establish reproducible builds or prove that a
97
+ particular deployed binary or device was exercised. Hashing is bounded to 512 MiB
98
+ per artifact, 1 GiB and 10 seconds per snapshot; checks run between synchronous
99
+ reads and cannot preempt an individual blocked filesystem read. Delivery commands
100
+ and declared environment labels remain project-authored evidence.
101
+
102
+ Code Intelligence uses a conservative UTF-8 byte-based token estimate, not
103
+ provider token accounting. Tiny budgets may only return the documented bounded
104
+ error envelope. Backend freshness remains unknown without independent evidence.
105
+
106
+ ## Remote verification and publication
107
+
108
+ The repository CI matrix runs Linux and Windows with Node 20 and 24. Its status
109
+ is attached to the pushed release commit and pull request in GitHub Actions;
110
+ local success alone does not establish cross-platform success.
111
+
112
+ The dated [changelog](../CHANGELOG.md#1220--2026-10-03) is the source of release
113
+ notes. A Git commit, push or tag does not imply npm publication. Publishing a
114
+ GitHub Release triggers the separate trusted npm workflow; publication must be
115
+ verified independently before reporting this version as available from npm.
@@ -0,0 +1,39 @@
1
+ # Yoke 1.23.0: local implementation and validation
2
+
3
+ Date: 2026-10-04. Source baseline: `e2e3c18` (1.22.0). Isolated branch: `codex/yoke-1.23-efficiency`. After the limitations below were disclosed, the user explicitly authorized publication with “publish it”. The release includes the implemented contracts and preserves the remaining E7/E8/E9 work as follow-ups; it does not claim complete original E1–E9 acceptance or general model speed/cost improvements.
4
+
5
+ ## Evidence and checks
6
+
7
+ The first remote matrix exposed two new tests assuming RTK was installed on every host. Production correctly reported missing RTK as degraded. Commit `a9d3200` replaces those assumptions with deterministic native-protocol and ENOENT fixtures, preserving exact argument/payload/response assertions and adding one mandatory case. Independent checks passed all eight cases with both normal and empty PATH; no host-dependent skips were added. A broader 46-test tools suite and TypeScript checks passed. The earlier 1,694-pass full local run below precedes this test-only correction; source behavior is unchanged and final discovery contains 1,697 cases. Remote CI for the correction is tracked in [draft PR 16](https://github.com/HECer/yoke/pull/16).
8
+
9
+ The user approved the design before implementation. New behavior was developed with failing regression tests followed by focused checks. The nine-story [executable PRD](superpowers/plans/2026-10-04-yoke-1.23-efficiency-prd.json) passes `runPrdCheck`; its `passes` fields remain false because this change was implemented through scoped native workers rather than a Yoke-owned PRD loop.
10
+
11
+ Environment: Windows, Node 24.13.0. The clean detached baseline ran the entire suite: **1,607 passed, 1 failed, 2 skipped**. The failure was native Windows `EPERM` while removing a temporary MCP directory before the process had finished closing. The corrected client shares and awaits shutdown completion. The first integrated green full run had **1,669 passed, 0 failed, 2 skipped**; final counts after the last cache and notifier regressions are recorded below when verified.
12
+
13
+ Independent read-only code and security review found no remaining concrete blockers in the production snapshot. Its final focused run passed **87 tests, 0 failures**. This review covered CLI compatibility, partial telemetry, actual tool preflight, proof transfer, write scopes, per-gate cache checks, completion cleanliness, smoke identity and secret redaction. It explicitly did not certify the open acceptance items below.
14
+
15
+ After source freeze, the complete suite passed **1,694 tests, 0 failures, 2 skipped** using `vitest run --maxWorkers=2`; the worker limit changes concurrency, not scope. TypeScript lint/build, Canon validation, package dry-run and dependency audit (**0 vulnerabilities**) passed. README metadata was regenerated after the final test additions. A real tarball installed offline into a fresh prefix with lifecycle scripts disabled; its installed CLI validated its packaged Canon. All five version sources report 1.23.0; cache isolation, proof retention, preflight and local-report compiled modules are packaged. The tarball contains declared benchmark fixture configurations but no root `.yoke` runtime evidence or dependency tree. Complete raw Vitest reports are retained locally in `.yoke/artifacts/release-1.23/`; earlier failing/intermediate reports are distinct from the clean baseline and final report.
16
+
17
+ ## Narrow paired regression experiment
18
+
19
+ The final full-suite observation was 237.858 seconds across 184 files (n=1); it is an observed local duration, not a future timeout or completion estimate. The two Windows skips concern executable-intent semantics in package enumeration/application; no newly added efficiency regression was skipped.
20
+
21
+ [Reproduction script](benchmarks/2026-10-04-efficiency/compare-help.py) and [raw results](benchmarks/2026-10-04-efficiency/regression-comparison.json) compare compiled CLI dispatch for `setup --help --yes --host=codex`. Both exclude the external update notifier and start a new Node process for each call. Three paired samples per target condition alternate execution order. Snapshot reads occur outside the timer; user file contents are checked after every call.
22
+
23
+ | Target condition | 1.22 observed range | 1.23 observed range | Changed files, 1.22 → 1.23 |
24
+ | --- | --- | --- | --- |
25
+ | Fresh target, n=3 pairs | 376.805–396.646 ms | 277.688–303.768 ms | 97 → 0 |
26
+ | Repeated target, n=3 pairs | 345.871–390.249 ms | 276.348–283.960 ms | 1 → 0 |
27
+
28
+ These are fresh/repeated project targets, **not measured cold/warm OS, dependency or provider caches**. Concurrent local verification and filesystem conditions can affect timings. No model calls, guardian calls or paid comparisons were made. There is no general product speed, token or cost improvement claim. Terminal help's update-notifier process mutation was separately caught with failing TTY tests and corrected.
29
+
30
+ ## Open acceptance and release limits
31
+
32
+ - E9 genuine controlled cold/warm setup comparison and a new paired full NEXUS model run remain unmeasured. Approval/guardian waiting and missing prices cannot be inferred from the local help experiment.
33
+ - The original populated-layout regression is present in `YokeEfficiencyTest1/tests/browser/benchmark.spec.mjs`: seven incidents, contained desktop panels, reachable inspector actions and timestamped events. A new focused Playwright run was attempted with output outside the source checkout. It did **not** run any test: Vite could not start from the copied macOS dependency tree. Windows `.bin` launchers and `@rolldown/binding-win32-x64-msvc` are missing. Original source and dependencies were not replaced, and this infrastructure failure is not a passing layout result.
34
+ - E7 guards conventional writable cache roots and actual candidate writes. Package-level pnpm links and immutable download stores remain allowed. Yoke has no dependency installer to own offline-miss/network retry behavior or lockfile-keyed install reuse; prompt guidance does not count as executable installer enforcement. Package/lock invalidation and cold/warm install evidence therefore remain open.
35
+ - E8 reporting supports explicit observer/infrastructure/product categories and preserves `unknown` when missing. Current production emitters do not uniformly populate those categories; synthetic category tests do not establish production classification coverage. Guardian/approval and inaccessible host sessions remain unknown.
36
+ - Static served-byte identity is a conservative same-origin pin checked before and after smoke journeys, not an independent deployment attestation or protection against changes between checks. Production requires an intentional pin; injected test drivers may remain explicitly unverified.
37
+ - The corrected Linux/Windows × Node 20/24 CI matrix passed all four jobs at `46b6279`: [CI run](https://github.com/HECer/yoke/actions/runs/37202687686). Linux Node 24 passed 1,697 tests; Windows Node 24 passed 1,695 with two platform skips. Publication additionally verifies the final documentation-only release commit, merge/tag identity and npm registry result. Open acceptance items remain listed in `TODOS.md` and prevent a claim of complete original E1–E9 DoD.
38
+
39
+ The detailed measured workload, story times, overlapping durations, failed attempts, token coverage and required priorities remain in the [German analysis](benchmarks/2026-10-04-efficiency/ANALYSE.md).
@@ -0,0 +1,182 @@
1
+ # Yoke-Effizienz: Auswertung und notwendige Änderungen
2
+
3
+ Stand: 2026-10-04. Vom KI-Assistenten aus lokalen Messdaten und einer gezielten Quellcodeprüfung erstellt. Zielversion im Entwurf: **1.23.0**. Noch keine implementierte oder veröffentlichte Verbesserung.
4
+
5
+ ## Aussage der Messung
6
+
7
+ Yoke 1.22.0 brachte das NEXUS-Projekt auf sieben bestandene Stories. Die vier Loop-Prozesse liefen zusammen **56:24,7 Minuten**. Der gesamte erfasste Zeitraum betrug **91:44,8 Minuten**, einschließlich Einrichtung, Unterbrechungen, zusätzlicher Beobachtung und Analyse. Es gibt **einen Produktlauf**, keinen direkten Codex-Kontrolllauf und keine gemessene allgemeine Beschleunigung.
8
+
9
+ Die wichtigsten notwendigen Änderungen betreffen sichere CLI-Erkundung, zutreffende Infrastrukturdiagnosen, korrekten Parallelstatus, saubere Laufzeitdateien, dauerhafte Prüfbelege und nachvollziehbare Verbrauchserfassung. Tests pauschal zu reduzieren oder mehr Worker einzuschalten wird durch diesen Lauf nicht begründet.
10
+
11
+ ## Grundlage und Reproduzierbarkeit
12
+
13
+ Originale: `G:/NN-Developed/ToolTesting/Yoke/YokeEfficiencyTest1/benchmark-artifacts/`. Der ursprüngliche Lauf fand unter macOS statt; die aktuelle Analyse erfolgt unter Windows. Der `.git`-Verweis des kopierten Testprojekts zeigt auf einen nicht vorhandenen macOS-Worktree und wurde nicht verändert.
14
+
15
+ Ausgewählte Rohdaten liegen unverändert unter [raw/](raw/); [manifest.json](manifest.json) enthält Herkunft und SHA-256. Die vollständigen Sessions, Modellaufrufe, Shell-Metriken, Statusstichproben und Bilder bleiben im Originalverzeichnis. Der bisherige Bericht ist als `raw/DEVELOPMENT_ANALYSIS.md` erhalten.
16
+
17
+ Gezielte Prüfung des aktuellen Yoke-Codes: Commit `e2e3c18`, Paketversion 1.22.0. Der Hauptarbeitsbaum enthält Nutzeränderungen. Die Vorbereitung erfolgt deshalb auf `codex/yoke-1.23-efficiency` in einem separaten Worktree.
18
+
19
+ Messumgebung: Codex CLI 0.160.0, Modell `gpt-6.1-sol`, Effort `medium`, RTK 0.51.0, isolierte Worktrees, automatische Parallelität/Entscheidungen, keine kontinuierliche Exploration. Code-Intelligence-Facade aktiv und MCP-Handshake erfolgreich, aber graft/graphify/serena nicht verfügbar. Kein nachgewiesener semantischer Effizienzgewinn.
20
+
21
+ ## Welche Arbeit wie lange dauerte
22
+
23
+ | Story | Aufgabe | Implementierung | Yoke-Gates | Integration | Versuche |
24
+ |---|---|---:|---:|---:|---:|
25
+ | 1 | React/TypeScript/Vite-Grundlage, Typen und Testinfrastruktur | 9:25,9 min | 3,058 s | 6,301 s | 1 |
26
+ | 2 | Deterministische Telemetrie, Incidents und Maschinenaktionen | 6:07,4 min | 2,816 s | 8,723 s | 1 |
27
+ | 3 | Interaktive SVG-Topologie, Gesten und visuelle Zustände | 11:36,3 min | 5,190 s | 9,183 s | 1 |
28
+ | 4 | Maschineninspektor, Fleet, Ereignisse und KPIs | 8:25,8 min | 4,124 s | 11,815 s | 1 |
29
+ | 5 | Integration der Oberfläche und Tastatur-Kommandopalette | 9:26,1 min | 11,580 s | 35,665 s | 2 |
30
+ | 6 | Integrierte Browserprüfung, Fehlerkorrektur und Bildbelege | 11:23,2 min | 28,821 s | 28,292 s | 1 |
31
+ | 7 | Nachträgliche Reparatur von Desktop-Höhe und mobiler Priorität | 8:04,2 min | 18,435 s | 0,000 s im separaten Integrationsfeld | 1 |
32
+
33
+ Alle sieben Stories bestanden. STORY-7 lief seriell; ihr Nullwert im separaten Integrationsfeld bedeutet nicht, dass kein Commit oder Abschluss stattfand. Der Loop meldete dort insgesamt 8m23s. Die Tabelle zeigt verschiedene Phasen, keine sieben unabhängigen Gesamtprojektzeiten.
34
+
35
+ Beobachtete Implementierungsdauer je Story: **6:07–11:36 Minuten**, sieben unterschiedliche Stories, STORY-5 mit zwei Versuchen. Das ist keine Prognosespanne für neue Aufgaben. Einzelne Implementierungsversuche: acht, darunter der Recovery-Versuch von STORY-5 mit 90,363 s.
36
+
37
+ Warum die längeren Stories länger dauerten: STORY-3 kombiniert visuelle Gestaltung und SVG-Interaktion; STORY-6 prüft die integrierte Anwendung im Browser und schreibt Belege. Dies ist eine aus Aufgaben und sichtbaren Aktionen abgeleitete Erklärung. Exakte Sekundenanteile für Modelllatenz, Reasoning, Tool-Wartezeit und Programmieren fehlen.
38
+
39
+ ### Phasen des Loops
40
+
41
+ | Phase | Ereignisse | Summierte Zeit | Bedeutung |
42
+ |---|---:|---:|---|
43
+ | Implementierung | 8 | 3.868,892 s / 64:28,9 min | Summe der Workerintervalle, inklusive interner Tools/Tests |
44
+ | Verifikation | 9 | 74,024 s | Eigenständige Yoke-Gate-Phasen |
45
+ | Integration | 7 | 99,979 s | Enthält verschachtelte Phasen; nicht nochmals addieren |
46
+ | `waiting-resource` | 14 | 97,927 s | Teilweise innerhalb Integration; keine reine Schedulerwartezeit |
47
+ | Design | 4 | 14,082 s | Design-Gates, kein vollständiger UX-Nachweis |
48
+ | Commit | 8 | 2,701 s | Innerhalb übergeordneter Phasen |
49
+ | Ressourcenwartezeit vor Implementierung | 8 | 0,038 s | Hier kein belegter großer Engpass |
50
+ | Integrationswarteschlange | 7 | 0,019 s | Hier kein belegter großer Engpass |
51
+ | Ressourcenwartezeit vor Integration | 7 | 0,017 s | Hier kein belegter großer Engpass |
52
+
53
+ Die Vereinigungsdauer der Implementierungsintervalle beträgt **3.184,729 s / 53:04,7 min**. Die beobachtete Überlappung beträgt **684,163 s / 11:24,2 min**. Diese Differenz ist keine Einsparung gegenüber einem gemessenen seriellen Kontrolllauf. 530 Stichproben alle zehn Sekunden zeigen maximal zwei Implementierungsworker; kurze Zwischenpeaks können fehlen. Die Abhängigkeiten der Stories begrenzen Parallelität.
54
+
55
+ Vier abgeschlossene Loop-Aufrufe, davon zwei fehlgeschlagen: eine abgelehnte Integration nach Observer-Commit und ein Startabbruch bei verschmutztem Worktree. Das sind keine zwei fehlgeschlagenen Produktimplementierungen.
56
+
57
+ ### Einrichtung, Beobachtung und Abschluss außerhalb der Workeransicht
58
+
59
+ Die folgenden Zeiten betreffen nur über `measure.py` gestartete Prozesse. Sie sind keine lückenlose Zerlegung der 91,7 Minuten und überlappen andere Tabellen.
60
+
61
+ | Instrumentierte Befehlsphase | Befehle | Fehler | Prozess-Wallzeit | Child-CPU |
62
+ |---|---:|---:|---:|---:|
63
+ | Umgebung | 4 | 1 | 0,914 s | 0,646 s |
64
+ | Code-Intelligence-Probe | 3 | 0 | 1,987 s | 1,251 s |
65
+ | Planung | 5 | 1 | 61,429 s | 11,040 s |
66
+ | Dependency-Setup | 2 | 1 | 10,049 s | 6,796 s |
67
+ | Erster Yoke-Smoke | 1 | 1 | 0,423 s | 0,271 s |
68
+ | Loop-Ausführung | 4 | 2 | 3.384,740 s | 1.277,859 s |
69
+ | Recoverybefehl | 1 | 0 | 0,531 s | 0,345 s |
70
+ | Serverstart | 1 | 1 | 0,826 s | 0,506 s |
71
+ | Observer-Browserkontrolle | 2 | 0 | 14,340 s | 5,432 s |
72
+ | Abschließende Projektprüfung | 1 | 0 | 19,997 s | 30,002 s |
73
+ | Zwei abgelehnte finale Smokes vor Cutoff | 2 | 2 | 5,513 s | 4,183 s |
74
+
75
+ Child-CPU kann durch parallele Unterprozesse größer als Wallzeit sein. Uninstrumentierte Tool-Roundtrips, Gespräche, Berichtserstellung und Providerwartezeit sind nicht vollständig getrennt. Die Differenz von ungefähr 35,3 Minuten zwischen erfasstem Gesamtzeitraum und summierten Loop-Prozessen darf deshalb nicht als exakt gemessener Yoke-Orchestrierungsaufwand ausgegeben werden.
76
+
77
+ ## Wo Aufwand innerhalb der Worker entstand
78
+
79
+ | Shell-Kategorie | Aufrufe | Nicht erfolgreich/abgebrochen | Summierte Prozessdauer |
80
+ |---|---:|---:|---:|
81
+ | Repositoryerkundung | 73 | 12 | 32,161 s |
82
+ | Dependency-Setup | 10 | 5 | 114,453 s |
83
+ | Tests und Prüfungen | 92 | 25 | 461,324 s / 7:41,3 min |
84
+ | Browserverifikation | 23 | 9 | 103,280 s |
85
+ | Devserver/gemischte Befehle | 12 | 12 | 677,782 s / 11:17,8 min |
86
+ | Sonstiges | 17 | 3 | 86,671 s |
87
+ | Separate Dateiedits | 1 | 0 | 0,269 s |
88
+
89
+ Die Kategorien sind heuristisch. Ein gemischter Befehl kann mehrere Aufgaben enthalten. Langlebige Server werden am Ende abgebrochen; ihre Prozessdauer ist nicht automatisch blockierende Wartezeit. Rote TDD-Tests gehören zur korrekten Entwicklung. Ein einzelner separater Dateiedit sagt nichts über die gesamte Schreibarbeit aus.
90
+
91
+ Die 92 Workerprüfungen sind ein Kandidat für gezielte Wiederverwendung, aber nicht 92 überflüssige Prüfungen. Vor Optimierung muss Yoke Testzweck, geprüften Source-/Config-/Environment-Zustand und geschützte Gates unterscheiden. Die zusätzlichen 74 Sekunden Yoke-Gates sind eine andere Messgröße. Prüfzeiten sind teilweise bereits in Implementierungszeiten enthalten.
92
+
93
+ ## Tokens und Messlücken
94
+
95
+ | Rolle | Sessions | Usage-Ereignisse | Input inkl. Cache | Cache-Lesen | Frischer Input | Output |
96
+ |---|---:|---:|---:|---:|---:|---:|
97
+ | Implementierung | 8 | 189 | 11.234.592 | 10.621.952 | 612.640 | 82.193 |
98
+ | Coordinator/Observer | 1 | 127 | 15.525.113 | 15.139.456 | 385.657 | 107.118 |
99
+ | Guardian/Approval | 7 | 48 | 1.281.675 | 1.073.152 | 208.523 | 5.404 |
100
+ | Planner/Review | 2 | 2 | 52.718 | 14.336 | 38.382 | 1.215 |
101
+ | Gesamt bis Cutoff | 18 | 366 | 28.094.098 | 26.848.896 | 1.245.202 | 195.930 |
102
+
103
+ **95,57 % des kumulierten Inputs sind Cache-Lesen.** Die 28 Millionen zählen wiederholt mitgesendeten Kontext bei Modellereignissen; sie sind keine 28 Millionen einmalig gelesenen Tokens. Cache-Tokens sind nicht nachgewiesen kostenlos. Geldkosten sind unbekannt. Reasoning-Output ist Teil des Outputs, nicht zusätzlich zu addieren. Native Usage und Yoke-Usage sind alternative Sichten und werden nicht addiert.
104
+
105
+ Der Coordinator verursacht 55,26 % der kumulierten Input-Tokens und 107.118 Output-Tokens. Er umfasst Messinstrumentierung, Kommunikation, Einrichtung und unabhängige Kontrolle. Daraus folgt **nicht**, dass Yoke im normalen Einsatz stets mehr Controller- als Workeraufwand benötigt. Routinebeobachtung sollte ohne neue Modellaufrufe erfolgen; die konkrete Einsparung muss ein Folgelauf messen.
106
+
107
+ Das Feld `measured_provider_calls` in der Story-CSV zählt aggregierte Worker-Usagemeldungen (meist eine pro Versuch). Es widerspricht den 189 nativen Implementierungs-Usage-Ereignissen nicht und darf nicht als eine einzige Modellanfrage je Story interpretiert werden. Eindeutige Usage-Ereignisse sind außerdem kein unabhängig bestätigter HTTP-Requestzähler.
108
+
109
+ Heuristischer Zweck der 189 Implementierungsereignisse:
110
+
111
+ | Zweckhinweis | Ereignisse | Input | Cache | Output |
112
+ |---|---:|---:|---:|---:|
113
+ | Erkundung | 35 | 2.015.491 | 1.824.896 | 6.669 |
114
+ | Tests/Checks | 63 | 3.377.368 | 3.130.624 | 44.163 |
115
+ | Code-Intelligence | 6 | 263.056 | 252.160 | 785 |
116
+ | Dependency-Setup | 6 | 270.273 | 244.480 | 2.947 |
117
+ | Server/gemischte Aktionen | 12 | 809.495 | 797.184 | 4.029 |
118
+ | Warten/Polling | 26 | 1.668.311 | 1.642.752 | 1.869 |
119
+ | Browserprüfung | 41 | 2.830.598 | 2.729.856 | 21.731 |
120
+
121
+ Polling beim Coordinator: 35 Ereignisse, 4.593.089 Input und 31.499 Output. Die Zuordnung beruht auf zuletzt sichtbaren Toolaktionen und beweist nicht, dass diese Tokens ausschließlich fürs Warten verwendet wurden. Ereignisbasierte Statusaktualisierung ist deshalb eine zu prüfende Optimierung.
122
+
123
+ RTK: 42 registrierte Befehle, Toolschätzung 13.752 Input-/11.635 Output-Tokens, 2.117 eingespart (**15,4 % dieser Befehle**). Kein Beleg für 15,4 % weniger Providerverbrauch im Gesamtprojekt. Automatische Umschreibung verschachtelter Code-Mode-Aufrufe wurde nicht nachgewiesen. Explizite RTK-Nutzung ist belegt.
124
+
125
+ ## Konkrete Nacharbeit und Fehlerzuordnung
126
+
127
+ 1. **STORY-5:** Observer änderte Target-HEAD während Integration. Yoke lehnte korrekt ab und behielt den Kandidaten. Erstversuch 475,741 s Implementierung; erneute Implementierungsphase 90,363 s, danach 5,504 s Gate und 17,627 s Integration. Diese Recovery-Phasen sind beobachtet, aber keine vollständig isolierte Schadensdauer. Die vier Minuten zwischen Versuchen sind nicht eindeutig in aktive Reparatur und andere Wartezeit zerlegt.
128
+ 2. **STORY-7:** Unabhängige, korrekt dem Server zugeordnete Kontrolle entdeckte 938 px Dokumenthöhe bei 900 px Viewport; Eventpanel-Unterkante 914 px. Reparatur beanspruchte 484,220 s Implementierung und 18,435 s Gate. Danach 900 px Dokumenthöhe und Unterkante 884 px. Vermeidbarer Qualitätsrücklauf, wenn die ursprüngliche Abnahme sichtbare Panelgrenzen in befüllten Zuständen prüft.
129
+ 3. **Dependency-Setup:** Ein `npm ci` scheiterte mit ECONNRESET. Offline-Installation aus einem vorhandenen Cache installierte 105 Pakete in vier Sekunden. Ein Einzelfall, keine allgemeine Cache-Beschleunigung.
130
+ 4. **Sandbox:** Wiederverwendete Dependencies führten zu EPERM beim Schreiben in Root-`node_modules/.vite-temp`. Diese Ursache gehört zur Umgebung, nicht zur Simulation oder zum Modell.
131
+ 5. **Falscher Browser-Server:** Der erste Observer prüfte einen bereits belegten Port 4173. Start des vorgesehenen Servers scheiterte; fremde Bilder wurden invalidiert. Zeit und Tokens bleiben Messaufwand, visuelle Aussagen sind kein Produktbefund.
132
+ 6. **Finaler Smoke:** Zwei Browserabläufe bestanden, aber Source-Nachweise wurden wegen Observer-Schreibzugriffen korrekt abgelehnt. Nach stabilem committed Root-Zustand bestand ein weiterer Smoke am 09:28:21 UTC in 2,156 s, **nach dem Token-Cutoff**. Seine Konfiguration enthält einen Foundation-Flow ohne Interaktionsschritte; er ersetzt keine vollständige UX-Abnahme.
133
+
134
+ ## Alle dokumentierten Findings und Handlungsbedarf
135
+
136
+ P0 = zuerst vor weiterem produktivem Ausbau; P1 = Bestandteil des geplanten Effizienz-Releases; P2 = anschließende messpflichtige Optimierung. Die Prioritäten sind Empfehlungen, keine CVSS-Schweregrade.
137
+
138
+ | Finding | Ursache und Änderung | Priorität / Zuordnung |
139
+ |---|---|---|
140
+ | CLI-HELP-MUTATION | Hilfe vor Dispatch behandeln; unbekannte Flags vor jedem Schreibzugriff ablehnen. Setup-Hilfe erzeugte 95 Dateien, Retrofit-Hilfe schaltete Loop ab. Im aktuellen `src/cli.ts` weiter plausibel bestätigt. | P0, Yoke |
141
+ | RTK-INIT-FLAGS | Inkompatible RTK-Init-Flags gezielt validieren und dokumentieren. | P1, Integration/Setup |
142
+ | CI-WORKSPACE-ID | Konfigurierten Workspace-Identifier berücksichtigen und gültige Kennung maschinenlesbar liefern. Aktueller Coordinator hasht Root, Server übergibt konfigurierte Kennung nicht. | P1, Yoke |
143
+ | CI-BACKENDS-MISSING | Konfigurierten Modus von tatsächlich verfügbaren Fähigkeiten trennen; Fallback und fehlende Backends ausweisen. | P1, Yoke/Umgebung |
144
+ | RTK-DUPLICATE-HOOKS | Native Hookeinrichtung idempotent machen; nur Yoke-eigene Legacyregistrierung migrieren, fremde Hooks erhalten. | P0, Yoke |
145
+ | COMPACT-STATUS-MISSING | Worker und Integrator aus Parallelstatus ausgeben; niemals `phase=undefined`. Aktueller Code interpoliert weiterhin nur Top-Level-Story/Phase. | P0, Yoke |
146
+ | WRITE-SCOPE-DRIFT | Tatsächlichen Diff gegen deklarierte `writes` prüfen; Abweichungen und Kollisionen vor Integration behandeln. Keine Sicherheitsgarantie aus Deklarationen ableiten. | P1, Yoke; aktuelle Durchsetzung erneut prüfen |
147
+ | SMOKE-MISDIAGNOSIS | Fehlendes Paket, Browserbinary, Sandbox und sonstige Launchfehler unterscheiden; Ursache behalten und sensible Inhalte redigieren. Aktuell gemeinsames `catch → null`. | P0, Yoke |
148
+ | EPHEMERAL-PROOF | Erforderliche Belege vor Worktree-Cleanup übernehmen, hash-/sourcegebunden manifestieren; Kopierfehler dürfen nicht als Abschluss gelten. | P1, Yoke; aktueller Lebenszyklus erneut prüfen |
149
+ | RTK-LEGACY-ALLOW | Aktueller Canonadapter enthält weiterhin `updatedInput` ohne `permissionDecision`; statt eigener veralteter Antwort native RTK-Integration mit echtem Host-Vertrag prüfen. | P0, Yoke/Host-Vertrag |
150
+ | RTK-NATIVE-CORRECTION | Bereits im Benchmark erfolgte lokale Hookkorrektur erhalten; sie ist kein ausgelieferter Yoke-Fix. | Korrekturbeleg |
151
+ | SHARED-DEPS-SANDBOX | Paketdownloadcache gemeinsam nutzen, beschreibbare Runtime-/Dependency-Verzeichnisse pro Worktree isolieren. Keine pauschale Rechteaufweitung. | P1, Umgebung/Isolation |
152
+ | NETWORK-RETRY-CACHE | Lockfilegebundenen Paketcache vorbereiten; Netzfehler getrennt melden, begrenzt wiederholen. | P1, Setup |
153
+ | GUARDIAN-USAGE-GAP | Implementierung und zusätzliche Approvalsessions getrennt erfassen; nicht verfügbare Kontrollkosten als unbekannt kennzeichnen. | P1, Yoke/Providertelemetrie |
154
+ | OBSERVER-HEAD-RACE | Busy-/Integrationszustand veröffentlichen, Observer-Schreiben koordinieren; erhaltenen Kandidaten mit neuen Nachweisen fortsetzen. HEAD-Schutz beibehalten. | P1, Observer verursacht; Yoke-Diagnose verbessern |
155
+ | VISUAL-COMPOSITION | Frühere visuelle Schlussfolgerung wurde wegen falschem Server invalidiert und bleibt ausgeschlossen. | Kein gültiger Produktbefund |
156
+ | OBSERVER-WRONG-SERVER | Erfolgreichen Serverstart, owning cwd und Source-Identität vor Browserbelegen prüfen; eigenen Port reservieren. | P1, Messharness/Browserbelege |
157
+ | RUNTIME-IGNORE-GAP | `.yoke/supervision/` in generierte Ignoreliste aufnehmen. `src/loop/git.ts` schließt es aktuell schon aus: Lücke betrifft Retrofit und externe Git-Sichten, keine neue pauschale Git-Ausnahme. | P0, Yoke |
158
+ | COMPLETION-DIRTY-PROOFS | Rerun-Belege in Runtimeverzeichnis; nur ausgewählte endgültige Artefakte explizit übernehmen. Keine automatische Aufnahme fremder Änderungen. | P1, Yoke/Projektprüfkommandos |
159
+ | VERIFIED-VISUAL-GAP | Layoutabnahme um Unterkanten, befüllte Incident-/Eventzustände und mobilen Prioritätsbereich erweitern. Design-Scan nicht als UX-Nachweis darstellen. | P1, Abnahme/Projektqualität |
160
+ | OBSERVER-FINAL-SMOKE-DIRTY | Source-Prüfintervalle als Schreibsperre für koordinierte Tools respektieren; Auswertung außerhalb des Intervalls erzeugen. | P1, Observer verursacht |
161
+
162
+ ## Empfohlene neue Version
163
+
164
+ **1.23.0 „verlässliche Effizienzbasis“**: Zuerst P0-Regressionskorrekturen, dann Preflight, Integration/Belege und Telemetrie. Kein Versprechen eines bestimmten Sparprozentsatzes. Abnahmeentwurf und Storyreihenfolge stehen im [Versionsentwurf](../../superpowers/specs/2026-10-04-yoke-1.23-efficiency-design.md).
165
+
166
+ Die Alternativen sind ein kleiner 1.22.1-Hotfix nur für P0 oder ein umfassender Umbau von Scheduler/Routing. Der Hotfix lässt wesentliche Mess- und Beleglücken offen. Ein Schedulerumbau ist durch praktisch verschwindende Queuezeiten nicht begründet. 1.23.0 bündelt konkrete Reparaturen mit der Datenbasis für spätere Optimierung.
167
+
168
+ Anschließend gezielt untersuchen: weniger LLM-Polling, wiederverwendbare Erkundung/Kontextpakete, sichere Testwiederverwendung und nachweislich funktionierendes RTK. Vor jeder Codeänderung prüfen, welche dieser Fähigkeiten schon vorhanden sind. Keine vollständige Neuimplementierung existierender Kontext- oder Routingmodule.
169
+
170
+ ## Nachweis einer tatsächlichen Verbesserung
171
+
172
+ Dieselbe Aufgabe, unveränderte geschützte Abnahmen, Modell/Effort/CLI-Versionen und vergleichbare Umgebung für 1.22.0 und 1.23.0. Mindestens drei gepaarte Wiederholungen pro kaltem/warmem Cachezustand als erste Untersuchungsstufe; kleine Stichprobe ausdrücklich benennen. Mehr Läufe nötig, wenn Streuung oder behauptete Effekte das verlangen.
173
+
174
+ Erfassen: Laufzeit bis unabhängiger Abnahme, Union/Summe der Phasen, Rework, Infrastrukturfehler, Observeraufwand, Usage aller verfügbaren Rollen, Coverage-Lücken, tatsächlich gestartete Worker, unveränderte Testqualität. Empirische Spanne und Stichprobenzahl berichten; Geldkosten nur bei verfügbaren Preis-/Usagebelegen. Kein direkter-Codex-Effizienzclaim ohne passenden Kontrollarm.
175
+
176
+ Keine feste Umsetzungsdauer aus diesem Lauf ableiten. Die sieben UI-Stories sind keine Vergleichsdaten für Harnessänderungen. Nutzerwartezeit, Modell-/Netzwerklatenz und neue Fehler bleiben unbekannt.
177
+
178
+ ## Provenienz und aktueller Arbeitsstand
179
+
180
+ Read-only `audit-provenance` für den vorhandenen Bericht: keine unterstützte C2PA-Struktur gefunden; unterstützter Scan vollständig. Kryptographische Verifikation und Vertrauen unbekannt, weil Verifier und Trust-Policy fehlen. Text-Metadatenprivatsphäre unbekannt. Proprietäre/keyed Wasserzeichen nicht überprüfbar; kein beobachtetes Signal beweist keine menschliche Autorenschaft. Es wurden keine Herkunftsmerkmale entfernt. Dieser neue Bericht benennt seine KI-Erstellung explizit.
181
+
182
+ Vorbereitet: isolierter Versionszweig, unveränderte Evidenzkopien mit Hashmanifest, Analyse und testbarer Versionsentwurf. Produktionscode, Versionsnummer und Releaseartefakte sind noch unverändert. Designfreigabe ist gemäß `brainstorming` vor Implementierung erforderlich. Eine unabhängige Code-/Sicherheitsprüfung ist noch nicht erfolgt; Veröffentlichung und Merge werden erst mit den Releasegates bewertet.
@@ -0,0 +1,55 @@
1
+ """Local help regression experiment; no agents, network, or provider cache claims."""
2
+ import hashlib
3
+ import json
4
+ from pathlib import Path
5
+ import subprocess
6
+ import sys
7
+ import tempfile
8
+ import time
9
+
10
+
11
+ def snapshot(root):
12
+ return {str(p.relative_to(root)): hashlib.sha256(p.read_bytes()).hexdigest()
13
+ for p in root.rglob('*') if p.is_file()}
14
+
15
+
16
+ baseline, candidate, output = map(Path, sys.argv[1:4])
17
+ runs = []
18
+ with tempfile.TemporaryDirectory(prefix='yoke-help-comparison-') as temporary:
19
+ experiment = Path(temporary)
20
+ for pair in range(1, 4):
21
+ targets = {}
22
+ for label in ('baseline', 'candidate'):
23
+ root = experiment / str(pair) / label
24
+ root.mkdir(parents=True)
25
+ (root / 'package.json').write_text('{"name":"help-probe","private":true}')
26
+ (root / 'user.txt').write_text('preserve me')
27
+ targets[label] = root
28
+ for condition in ('fresh-target', 'repeat-target'):
29
+ order = ('baseline', 'candidate') if pair % 2 else ('candidate', 'baseline')
30
+ for label in order:
31
+ source = baseline if label == 'baseline' else candidate
32
+ target = targets[label]
33
+ before = snapshot(target)
34
+ # Import the public dispatch function to exclude the CLI's external
35
+ # update-notifier side effect equally from both versions.
36
+ program = 'const {main}=await import(process.argv[1]); process.exitCode=await main(["setup",process.argv[2],"--help","--yes","--host=codex"]);'
37
+ start = time.perf_counter()
38
+ result = subprocess.run(['node', '--input-type=module', '-e', program,
39
+ (source / 'dist/cli.js').as_uri(), str(target)],
40
+ capture_output=True, timeout=60)
41
+ elapsed = (time.perf_counter() - start) * 1000
42
+ after = snapshot(target)
43
+ changed = sorted(p for p in before.keys() | after.keys() if before.get(p) != after.get(p))
44
+ assert result.returncode == 0, result.stderr.decode(errors='replace')
45
+ assert after['user.txt'] == before['user.txt']
46
+ if label == 'candidate':
47
+ assert not changed, changed
48
+ runs.append(dict(pair=pair, condition=condition, version=label,
49
+ milliseconds=round(elapsed, 3), changedFiles=len(changed),
50
+ exitCode=result.returncode))
51
+ report = {'method': '3 paired fresh/repeated target help calls per version, alternating order; each call starts a new Node process',
52
+ 'limits': 'Not OS/provider/npm cold/warm cache measurements; no LLM, guardian, approval or full-product speed/cost inference. File reads for snapshots are outside timed calls.',
53
+ 'baseline': str(baseline), 'candidate': str(candidate), 'runs': runs}
54
+ output.write_text(json.dumps(report, indent=2) + '\n', encoding='utf-8')
55
+ print(json.dumps(report, indent=2))
@@ -0,0 +1,125 @@
1
+ {
2
+ "created": "2026-10-04",
3
+ "yoke_source_commit": "e2e3c18",
4
+ "measurement_cutoff_utc": "2026-10-04T09:27:32.214737+00:00",
5
+ "scope": "Selected evidence only; full model sessions, shell metrics, screenshots and status samples remain at source.",
6
+ "files": [
7
+ {
8
+ "source": "G:\\NN-Developed\\ToolTesting\\Yoke\\YokeEfficiencyTest1\\benchmark-artifacts\\measurements\\summary.json",
9
+ "copy": "raw\\summary.json",
10
+ "sha256": "229f334a465a6d04c1078202557d27ba1f34e91045251f574893977dac3d932b",
11
+ "bytes": 12888
12
+ },
13
+ {
14
+ "source": "G:\\NN-Developed\\ToolTesting\\Yoke\\YokeEfficiencyTest1\\benchmark-artifacts\\measurements\\stories.csv",
15
+ "copy": "raw\\stories.csv",
16
+ "sha256": "2065f027d1867431e9d0d2845106da14ba92cd38c3548fe3a4bbb27fddd1c90d",
17
+ "bytes": 1168
18
+ },
19
+ {
20
+ "source": "G:\\NN-Developed\\ToolTesting\\Yoke\\YokeEfficiencyTest1\\benchmark-artifacts\\measurements\\roles.csv",
21
+ "copy": "raw\\roles.csv",
22
+ "sha256": "6d9444e824ab15bad5450b254aa66f645e29ab7f3db48d3f7f9afae6ea430779",
23
+ "bytes": 378
24
+ },
25
+ {
26
+ "source": "G:\\NN-Developed\\ToolTesting\\Yoke\\YokeEfficiencyTest1\\benchmark-artifacts\\measurements\\yoke-phases.csv",
27
+ "copy": "raw\\yoke-phases.csv",
28
+ "sha256": "bbad66f4c3ba41781cf76222ea83d3c62070bbd7995e862ce48cc05e031b3cb8",
29
+ "bytes": 294
30
+ },
31
+ {
32
+ "source": "G:\\NN-Developed\\ToolTesting\\Yoke\\YokeEfficiencyTest1\\benchmark-artifacts\\measurements\\shell-categories.csv",
33
+ "copy": "raw\\shell-categories.csv",
34
+ "sha256": "9ff81a192ea799fcc51738087e37f612086cd5ca4ded00de6e06f44524f5e74a",
35
+ "bytes": 351
36
+ },
37
+ {
38
+ "source": "G:\\NN-Developed\\ToolTesting\\Yoke\\YokeEfficiencyTest1\\benchmark-artifacts\\measurements\\model-purpose-hints.csv",
39
+ "copy": "raw\\model-purpose-hints.csv",
40
+ "sha256": "2d1adacdc01cfb17e764ab84c2164ce5849dfb3c38240ef8b334b0fcf53f88f6",
41
+ "bytes": 1005
42
+ },
43
+ {
44
+ "source": "G:\\NN-Developed\\ToolTesting\\Yoke\\YokeEfficiencyTest1\\benchmark-artifacts\\measurements\\observer-command-phases.csv",
45
+ "copy": "raw\\observer-command-phases.csv",
46
+ "sha256": "08a4619844836497d6c9c98972bae759d07f15b10bdb337b1599d785627c1fa0",
47
+ "bytes": 476
48
+ },
49
+ {
50
+ "source": "G:\\NN-Developed\\ToolTesting\\Yoke\\YokeEfficiencyTest1\\benchmark-artifacts\\measurements\\yoke-history.jsonl",
51
+ "copy": "raw\\yoke-history.jsonl",
52
+ "sha256": "844dfabe11be010597b6694f4e86d84372cbc20ff7ed155733adcbe1da68fa12",
53
+ "bytes": 37522
54
+ },
55
+ {
56
+ "source": "G:\\NN-Developed\\ToolTesting\\Yoke\\YokeEfficiencyTest1\\benchmark-artifacts\\measurements\\observations.jsonl",
57
+ "copy": "raw\\observations.jsonl",
58
+ "sha256": "a594301f8b6fcc624db1e02c6eee42a20416c7db4f3f9994708cc13aa6670312",
59
+ "bytes": 10810
60
+ },
61
+ {
62
+ "source": "G:\\NN-Developed\\ToolTesting\\Yoke\\YokeEfficiencyTest1\\benchmark-artifacts\\measurements\\commands.jsonl",
63
+ "copy": "raw\\commands.jsonl",
64
+ "sha256": "a33e17d6c9fbbc679fd6b51ec152cf58c54e2b740473aeda703d372419e1069b",
65
+ "bytes": 9973
66
+ },
67
+ {
68
+ "source": "G:\\NN-Developed\\ToolTesting\\Yoke\\YokeEfficiencyTest1\\benchmark-artifacts\\measurements\\environment.json",
69
+ "copy": "raw\\environment.json",
70
+ "sha256": "c28c57bef5b0b02d9ec2b5a9946f4f5f7153876a81adc691054cc1445c284a5d",
71
+ "bytes": 786
72
+ },
73
+ {
74
+ "source": "G:\\NN-Developed\\ToolTesting\\Yoke\\YokeEfficiencyTest1\\benchmark-artifacts\\measurements\\final-yoke-smoke.json",
75
+ "copy": "raw\\final-yoke-smoke.json",
76
+ "sha256": "dd3ae282a5dae3cda9b6dc6a278d0086ef97acc794652d3a6e621401842fdb15",
77
+ "bytes": 1074
78
+ },
79
+ {
80
+ "source": "G:\\NN-Developed\\ToolTesting\\Yoke\\YokeEfficiencyTest1\\benchmark-artifacts\\measurements\\yoke-loop-1.log",
81
+ "copy": "raw\\yoke-loop-1.log",
82
+ "sha256": "33ae649658411fe5c5a2717a97244178ebae55b152bdb7f60e606f53b5c1e0e1",
83
+ "bytes": 4232
84
+ },
85
+ {
86
+ "source": "G:\\NN-Developed\\ToolTesting\\Yoke\\YokeEfficiencyTest1\\benchmark-artifacts\\measurements\\yoke-loop-2.log",
87
+ "copy": "raw\\yoke-loop-2.log",
88
+ "sha256": "36b62e1c4bbcafe6e7f1a8bea19f4ebe36d470f9c70dc60ef8b036bef6713a8f",
89
+ "bytes": 1906
90
+ },
91
+ {
92
+ "source": "G:\\NN-Developed\\ToolTesting\\Yoke\\YokeEfficiencyTest1\\benchmark-artifacts\\measurements\\yoke-loop-3.log",
93
+ "copy": "raw\\yoke-loop-3.log",
94
+ "sha256": "cddf9adb7482b91e8aace24b754daeea2df6895723041868797fcb7dc82e523f",
95
+ "bytes": 473
96
+ },
97
+ {
98
+ "source": "G:\\NN-Developed\\ToolTesting\\Yoke\\YokeEfficiencyTest1\\benchmark-artifacts\\measurements\\yoke-loop-4.log",
99
+ "copy": "raw\\yoke-loop-4.log",
100
+ "sha256": "e3e6e099d98b1e4681503faab42446ffa1fa003bf4ef0cf3f0caeebb56dbc3e9",
101
+ "bytes": 1035
102
+ },
103
+ {
104
+ "source": "G:\\NN-Developed\\ToolTesting\\Yoke\\YokeEfficiencyTest1\\benchmark-artifacts\\DEVELOPMENT_ANALYSIS.md",
105
+ "copy": "raw\\DEVELOPMENT_ANALYSIS.md",
106
+ "sha256": "f1f7ba9f901376809bddf43bfb4a3f0b2f9fe9d8f4893aa1fd8335aac6bd5dc0",
107
+ "bytes": 19452
108
+ },
109
+ {
110
+ "source": "G:\\NN-Developed\\ToolTesting\\Yoke\\YokeEfficiencyTest1\\benchmark-artifacts\\RESULT.md",
111
+ "copy": "raw\\RESULT.md",
112
+ "sha256": "b8ca35238a32fab4971ac1518afbc7991c7333f5f2f1f868bc1afaa850647807",
113
+ "bytes": 3110
114
+ }
115
+ ],
116
+ "checks": {
117
+ "copied_files": 18,
118
+ "history_events": 104,
119
+ "unique_history_ids": true,
120
+ "raw_phase_sums_match_summary": true,
121
+ "role_usage_sums_match_summary": true,
122
+ "all_seven_stories_pass": true,
123
+ "product_tests_run": false
124
+ }
125
+ }
@@ -0,0 +1,90 @@
1
+ {
2
+ "answers": {
3
+ "located": "NO",
4
+ "scan_complete": "YES",
5
+ "trusted": "UNKNOWN",
6
+ "verified": "UNKNOWN"
7
+ },
8
+ "asset": "G:\\NN-Developed\\Worktrees\\yoke-1.23-efficiency\\docs\\benchmarks\\2026-10-04-efficiency\\ANALYSE.md",
9
+ "asset_sha256": "4b7ca4bbfd2387463f9e000f5491d706b551eed9fa104a1b7d740986d025c2be",
10
+ "components": [
11
+ {
12
+ "detail": "No C2PA structure was found. The text mentions Content Credentials, which is not evidence and does not warrant verification.",
13
+ "ran": true,
14
+ "skill": "inspect-content-provenance",
15
+ "summary": "presence=ABSENT"
16
+ },
17
+ {
18
+ "detail": "No verifier was supplied; cryptographic questions cannot be answered.",
19
+ "ran": false,
20
+ "skill": "verify-content-credentials",
21
+ "summary": "not run"
22
+ },
23
+ {
24
+ "detail": "Format TEXT has no supported metadata parser in this build, so no privacy conclusion can be drawn.",
25
+ "ran": true,
26
+ "skill": "audit-metadata-privacy",
27
+ "summary": "risk=UNKNOWN"
28
+ },
29
+ {
30
+ "detail": null,
31
+ "ran": true,
32
+ "skill": "detect-text-watermark",
33
+ "summary": "status=NO_SIGNAL_OBSERVED"
34
+ }
35
+ ],
36
+ "evidence": {
37
+ "integrity": "UNKNOWN",
38
+ "manifest": {
39
+ "actions": [],
40
+ "assertion_labels": [],
41
+ "claim_generator": null,
42
+ "format": null,
43
+ "ingredient_count": 0,
44
+ "signature_alg": null,
45
+ "signature_issuer": null,
46
+ "signature_time": null,
47
+ "title": null
48
+ },
49
+ "manifest_presence": "ABSENT",
50
+ "markers": [],
51
+ "signer_trust": "UNKNOWN"
52
+ },
53
+ "format": "TEXT",
54
+ "limitations": [
55
+ "This is a composition of the underlying analyzers; it performs no new analysis.",
56
+ "No answer here is an authorship classification.",
57
+ "A trust answer is only meaningful relative to the named trust policy."
58
+ ],
59
+ "privacy_risk": "UNKNOWN",
60
+ "reason": null,
61
+ "schema_version": "2.0",
62
+ "text_signals": {
63
+ "did_not_run": [
64
+ "anthropic-official",
65
+ "kgw-research",
66
+ "synthid-text"
67
+ ],
68
+ "scan_complete": true,
69
+ "status": "NO_SIGNAL_OBSERVED"
70
+ },
71
+ "tool": "audit-provenance",
72
+ "trust_policy": null,
73
+ "unknowns": [
74
+ {
75
+ "next_step": "Re-run with --c2patool pointing at c2patool 0.20.0 or newer.",
76
+ "question": "verified",
77
+ "why": "No conforming verifier was supplied."
78
+ },
79
+ {
80
+ "next_step": "Re-run with --c2patool pointing at c2patool 0.20.0 or newer.",
81
+ "question": "trusted",
82
+ "why": "No conforming verifier was supplied."
83
+ },
84
+ {
85
+ "next_step": "None available. Do not infer authorship from this.",
86
+ "question": "text_watermark",
87
+ "why": "Keyed model-level watermarks cannot be checked without the provider's key."
88
+ }
89
+ ]
90
+ }