Context
Issue #14812 exposed a naming and category drift in the direction-validation line: the graph helper added by PR #14803 is named hindcastHarness, while Neo already uses Agent Harness as a first-class product/substrate name.
Evidence checked before filing:
README.md:93 and learn/agentos/decisions/0020-agent-harness-concept.md:1 define the Agent Harness as the downloadable Electron-shelled Agent OS operating surface.
learn/agentos/decisions/0033-direction-contract.md:81 defines the direction-validation sequence and May holdout, but does not require Agent Harness substrate.
ai/graph/hindcastHarness.mjs only exports pure direction replay helpers plus JUNE_2026_FIXTURE and runHoldout().
rg "hindcastHarness|runHoldout|runHindcastWindow" finds only ai/graph/hindcastHarness.mjs and its unit spec.
The Problem
hindcastHarness uses "harness" in the generic test-wrapper sense, but that term is already locally occupied by the Agent Harness product line. The collision made #14812 read like Agent Harness work even though it is only about a direction-model backtest/replay helper.
This is not harmless vocabulary drift. Tickets, PR reviews, and future search results now mix two unrelated concepts:
- Agent Harness: runtime owner, fleet cockpit, Electron shell, wake/lifecycle/fleet substrate.
- Direction hindcast replay: pure
ai/graph helper for historical attribution windows.
That ambiguity already caused a ticket-intake misclassification on #14812. Leaving it in place creates recurring pickup debt.
The Architectural Reality
The owning substrate is ai/graph, not the Agent Harness line. Structure-map evidence shows ai/graph/hindcastHarness.mjs sits beside directionAttribution.mjs, directionVelocity.mjs, and directionSchema.mjs; it is a direction graph primitive.
ADR 0020 owns the Agent Harness product vocabulary. ADR 0033 owns direction validation and render-gate sequencing. This ticket aligns those vocabularies by moving the direction helper away from the loaded "harness" term.
The Fix
Rename the graph helper and spec to use direction/backtest/replay vocabulary instead of harness vocabulary. Recommended concrete shape:
ai/graph/hindcastHarness.mjs -> ai/graph/directionHindcastReplay.mjs
test/playwright/unit/ai/graph/hindcastHarness.spec.mjs -> test/playwright/unit/ai/graph/directionHindcastReplay.spec.mjs
- Update imports, test titles, module JSDoc, and public prose in the touched files so "harness" is not used for this direction replay helper.
Do not implement the May skill report here. This ticket is the naming debt cleanup only.
Contract Ledger Matrix
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback |
Docs |
Evidence |
ai/graph/hindcastHarness.mjs module path |
ADR 0033 direction validation sequence |
Rename to a direction-specific replay/backtest helper name |
Keep exports behavior-compatible if possible |
Module JSDoc |
rg proves current name is local to module/spec |
| Unit spec path/title |
Unit-test location under test/playwright/unit/ai/graph |
Rename to match the module and remove direction-helper "harness" language |
N/A |
Spec title/JSDoc |
Focused unit run |
| Agent Harness vocabulary |
ADR 0020 Agent Harness concept anchor |
Reserve "Agent Harness" / "harness" product framing for runtime/fleet/cockpit substrate |
Generic test terms may be used elsewhere only when they cannot collide |
README/ADR references |
README.md:93, ADR 0020 |
Decision Record impact
Aligned-with ADR 0020 and ADR 0033. This does not amend either ADR; it repairs local naming so those authorities stop colliding.
Acceptance Criteria
Out of Scope
- Implementing the May 2026 skill report.
- Defining #14570's render input schema.
- Changing direction attribution, velocity composition, or holdout semantics.
- Any Agent Harness / Fleet Manager / Electron / wake-routing implementation.
Avoided Traps
- Do not keep "harness" because it is a generic test term. In this repo it is already a proper noun with product meaning.
- Do not solve #14812 by adding more ceremony prose. Either make the direction validation artifact concrete in a separate ticket or keep this ticket to the naming cleanup.
Related
Related: #14812 #14569 #14570 #13012
PR context: #14803
Live latest-open sweep: checked latest 20 open issues immediately before filing; no equivalent focused rename ticket found.
A2A in-flight sweep: checked recent mailbox messages immediately before filing; no competing claim found.
Origin Session ID: 6ab85930-3c14-4b18-b3b3-97989d1e75c6
Retrieval Hint: "hindcastHarness Agent Harness naming collision directionHindcastReplay #14812"
Context
Issue #14812 exposed a naming and category drift in the direction-validation line: the graph helper added by PR #14803 is named
hindcastHarness, while Neo already uses Agent Harness as a first-class product/substrate name.Evidence checked before filing:
README.md:93andlearn/agentos/decisions/0020-agent-harness-concept.md:1define the Agent Harness as the downloadable Electron-shelled Agent OS operating surface.learn/agentos/decisions/0033-direction-contract.md:81defines the direction-validation sequence and May holdout, but does not require Agent Harness substrate.ai/graph/hindcastHarness.mjsonly exports pure direction replay helpers plusJUNE_2026_FIXTUREandrunHoldout().rg "hindcastHarness|runHoldout|runHindcastWindow"finds onlyai/graph/hindcastHarness.mjsand its unit spec.The Problem
hindcastHarnessuses "harness" in the generic test-wrapper sense, but that term is already locally occupied by the Agent Harness product line. The collision made #14812 read like Agent Harness work even though it is only about a direction-model backtest/replay helper.This is not harmless vocabulary drift. Tickets, PR reviews, and future search results now mix two unrelated concepts:
ai/graphhelper for historical attribution windows.That ambiguity already caused a ticket-intake misclassification on #14812. Leaving it in place creates recurring pickup debt.
The Architectural Reality
The owning substrate is
ai/graph, not the Agent Harness line. Structure-map evidence showsai/graph/hindcastHarness.mjssits besidedirectionAttribution.mjs,directionVelocity.mjs, anddirectionSchema.mjs; it is a direction graph primitive.ADR 0020 owns the Agent Harness product vocabulary. ADR 0033 owns direction validation and render-gate sequencing. This ticket aligns those vocabularies by moving the direction helper away from the loaded "harness" term.
The Fix
Rename the graph helper and spec to use direction/backtest/replay vocabulary instead of harness vocabulary. Recommended concrete shape:
ai/graph/hindcastHarness.mjs->ai/graph/directionHindcastReplay.mjstest/playwright/unit/ai/graph/hindcastHarness.spec.mjs->test/playwright/unit/ai/graph/directionHindcastReplay.spec.mjsDo not implement the May skill report here. This ticket is the naming debt cleanup only.
Contract Ledger Matrix
ai/graph/hindcastHarness.mjsmodule pathrgproves current name is local to module/spectest/playwright/unit/ai/graphREADME.md:93, ADR 0020Decision Record impact
Aligned-with ADR 0020 and ADR 0033. This does not amend either ADR; it repairs local naming so those authorities stop colliding.
Acceptance Criteria
ai/graph/hindcastHarness.mjsis renamed to a direction-specific replay/backtest name.rg "hindcastHarness|HindcastHarness"returns no stale code references after the rename.Out of Scope
Avoided Traps
Related
Related: #14812 #14569 #14570 #13012
PR context: #14803
Live latest-open sweep: checked latest 20 open issues immediately before filing; no equivalent focused rename ticket found.
A2A in-flight sweep: checked recent mailbox messages immediately before filing; no competing claim found.
Origin Session ID: 6ab85930-3c14-4b18-b3b3-97989d1e75c6
Retrieval Hint: "hindcastHarness Agent Harness naming collision directionHindcastReplay #14812"