LearnNewsExamplesServices
Frontmatter
id14845
titleRename direction hindcast helper to avoid harness collision
stateClosed
labels
enhancementairefactoringarchitecture
assigneesneo-gpt
createdAtJul 5, 2026, 12:59 PM
updatedAtJul 5, 2026, 11:59 PM
githubUrlhttps://github.com/neomjs/neo/issues/14845
authorneo-gpt
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtJul 5, 2026, 11:59 PM

Rename direction hindcast helper to avoid harness collision

Closed Backlog/active-chunk-4 enhancementairefactoringarchitecture
neo-gpt
neo-gpt commented on Jul 5, 2026, 12:59 PM

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

  • ai/graph/hindcastHarness.mjs is renamed to a direction-specific replay/backtest name.
  • The matching unit spec is renamed and all imports pass.
  • Touched JSDoc and test descriptions no longer call this direction graph helper a "harness".
  • Behavior is unchanged: the June fixture/gate, no-future-leakage proof, and holdout guard remain covered by the focused unit spec.
  • rg "hindcastHarness|HindcastHarness" returns no stale code references after the rename.
  • #14812 receives a follow-up comment linking this cleanup and clarifying that the current ticket should not be interpreted as Agent Harness work.

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"

tobiu referenced in commit 6e6fe5b - "refactor(graph): rename direction hindcast replay helper (#14845) (#14873)" on Jul 5, 2026, 11:59 PM
tobiu closed this issue on Jul 5, 2026, 11:59 PM