Harness Intelligence Wiki
Research

Baseline Skills and Edit Hooks Research

Baseline Skills and Edit Hooks Research

Context

Three readonly lanes checked the two reported baseline issues, the requested wait-what language contract for planning artifacts, and current official hook support in Codex, Claude Code, OpenCode, and Cursor. This report records the few facts needed for requirements and planning. It does not authorize product choices.

Trusted facts

  • Issue 102 conflicts with the current backlog model. write-backlog says fog is root-level and never a parent container, while the issue expects Finder-derived research, grilling, or prototype work to retain fog as an evidence parent. The Linear asset supports parentId, but its current mapping parents stories only and falls back when configured Kind labels are missing. Sources: issue 102, skills/agnostic/requirements/write-backlog/SKILL.md, skills/agnostic/requirements/write-backlog/assets/concepts/backlog-model.md, and skills/agnostic/requirements/write-backlog/assets/providers/linear-create-payload.md in the canonical shared-skills repository.
  • Issue 103 asks for concise research and wait-what language. Its phrase "optional short durable report" conflicts with the released contract that every parallel-research run writes and retains one report. The narrow compatible change is to keep durable mode mandatory, bound the report shape, apply the wait-what language contract before synthesis, and avoid duplicating the chat response. Sources: issue 103, skills/agnostic/research/parallel-research/SKILL.md, skills/agnostic/research/parallel-research/DURABLE-REPORT.md, and tests/parallel-research.contract.test.mjs in the canonical shared-skills repository.
  • The three requested artifact owners are distinct: create-spec writes SPEC.md, create-plan writes PLAN.md, and implement-spec creates and updates IMPLEMENTATION-NOTES.md. wait-what means: give enough context, use ASD-STE100 Simplified Technical English, and use the ubiquitous language from CONTEXT.md. No CONTEXT.md exists in either checkout. Sources: skills/agnostic/planning/{create-spec,create-plan,implement-spec} and skills/misc/wait-what/SKILL.md in the canonical shared-skills repository.
  • A neutral per-path format and lint runner already exists at .agents/hooks/format-edited-file.mjs. Oxfmt, Oxlint, and Ruff receive the edited path. Managed scaffold files are excluded. Claude and Cursor already pass one edited path through official post-edit events. Sources: the runner, .agents/scripts/harness-projection/adapters/{claude,cursor}.mjs, Claude Code hooks, and Cursor hooks.
  • Codex now documents native PostToolUse hooks. The payload does not expose a dedicated edited-path field for apply_patch, so the patch command must be parsed; Bash edits still need git-state inference. The checked-in Codex config uses codex_hooks = true, while the current working-tree recovery changes it to hooks = true. Source: Codex hooks, .codex/config.toml, and .agents/scripts/harness-projection/adapters/codex.mjs.
  • OpenCode provides both automatic custom formatters with $FILE and tool.execute.after plugins. The current projection configures both paths to invoke the same runner, so one edit can run format and lint twice. Sources: OpenCode formatters, OpenCode plugins, and .agents/scripts/harness-projection/adapters/opencode.mjs.

Conflicts and open decisions

  • Decide whether fog-as-evidence-parent is a provider-general backlog rule or a Linear-only repair. The former also requires aligned GitHub, Azure, and monday provider guidance; monday currently rejects fog children.
  • Decide whether missing configured Kind labels may be created and where the workspace policy that authorizes creation lives. Without authority, preflight must return an exact setup blocker before any write.
  • Decide whether the new artifact rule invokes $wait-what or applies its three prose rules directly. The user asked for its language, while the skill is marked as a user-invoked corrective. Also choose the terminology fallback when CONTEXT.md is absent.
  • Decide whether every implementation-notes update must follow the language contract or only final production. The lifecycle updates the file after every wave.
  • Choose one OpenCode execution path. The plugin can sequence format then lint and log advisory failures; the native formatter is simpler but runs in the background.

Next route

Closed for this re-projection. The explicit stack-repair and delivery instruction accepted recovery of the existing pull request #109 implementation and superseded the proposed new grill and plan. Future changes to these contracts need a new decision route; this report does not pre-authorize them.

Maintainer decision closure — 2026-08-09

The recovered implementation selected these decisions:

  • Fog evidence parenting is provider-general. Finder-derived grilling, research, and prototype items may retain a source fog as evidence lineage while keeping their own capability placement. Each provider must declare a native parent or immutable-link representation before mutation. Missing capability, required metadata, or creation authorization fails preflight with no provider write.
  • wait-what is the direct prose contract for SPEC.md, PLAN.md, and every IMPLEMENTATION-NOTES.md create or update: enough context, ASD-STE100 Simplified Technical English, and ubiquitous language from CONTEXT.md when present. When it is absent, use the artifact glossary and repository vocabulary. Applying the contract must not change settled decisions or recorded evidence.
  • Implementation notes stay current during every implementation wave, not only at final production closeout.
  • OpenCode activation is plugin-only through its auto-loaded .opencode/plugins/format-edited-file.mjs. The managed native formatter entry is removed so one edit has one owner.

On this page