ulw-loop SDK: follow-ups from the #8345 review (evidenceRoot for v1 plans, driver.objectiveMatchesPlan in per_story, artifacts on re-record)

Author: code-yeongyuCreated Sep 16, 2026Updated Sep 16, 2026

Summary

Follow-ups from the code review of #8345 (merged as 2b05bdc73, closes #8332 #8333 #8334). None blocked the merge; each is small and self-contained.

Items

  1. status().evidenceRoot vs evidence-layout v1 planssdk/factory.ts emits evidenceRoot for every session-scoped plan, while status-next-actions.ts still tells v1 plans "artifacts go under .omo/evidence/". Make evidenceRoot follow plan.evidenceLayoutVersion (.omo/evidence for v1) so one envelope gives one answer. New plans are v2, so this only affects pre-existing plans.
  2. status().result.driver.objectiveMatchesPlan in per_story mode with no active goaldriver-relation.ts derives the expected set from the active goal only, so it reports false where the next checkpoint would accept. Derive it from the same expectedCodexObjective + compatibleCodexObjectives path checkpoint uses (or omit the field when no goal is active).
  3. recordEvidence without artifacts clears artifacts bound by an earlier record (evidence.ts, the else delete criterion.artifacts branch) while notes is preserved. Decide and test one rule: either the latest record replaces the whole capture (then notes should follow), or artifacts accumulate until a criteria reset. The ledger keeps every record either way.
  4. LOW: evidence-artifacts.ts treats any relative path starting with .. as outside the cwd (a directory literally named ..foo inside the cwd is stored absolute); plan-goal-factory.ts carries an unused default goalId; stringsFrom applies the 8-item nextActions cap to warnings too; steering-batch.ts still seeds criteria without the surface; normalizeDriverObjective duplicates the private normalizeObjective.
  5. Discoverability (#8334 item 4): senpi's tool_search catalog indexes tools only; indexing skills or env-published eval SDKs is a senpi-side decision still open.

Acceptance

  • Items 1-3 each ship with a unit test in the component suite; item 4 is cleanup with no behavior change beyond the .. case.
  • Bundle regenerated on Linux with the node runner (build-extension.mjs --check green).

Related

#8332 #8333 #8334 #8345

Source: code-yeongyu/oh-my-openagent