Skip to content

fix(targets): enforce native layouts and correct conformance evidence - #49

Merged
steve-calvert-glean merged 10 commits into
mainfrom
fix/target-conformance
Oct 22, 2026
Merged

steve-calvert-glean merged 10 commits into
mainfrom
fix/target-conformance

Conversation

@steve-calvert-glean

Copy link
Copy Markdown
Contributor

Problem

Several target outputs passed build but were wrong for the host, or failed our own validate:

  • Copilot and legacy Codex wrote "hooks": "hooks/hooks.json" whenever a hooks/ directory existed, even with no hooks.json.
  • Two plugins in one target with the same path silently overwrote each other.
  • The README Quick Start failed as written: its config referenced an override directory its tree did not contain, its Copilot agent lacked the .agent.md suffix, and its Codex entry lacked required fields.
  • A custom marketplaceDir built for claude and cursor, but both hosts load only from .claude-plugin/ and .cursor-plugin/. claude plugin validate --strict rejected the output.
  • Codex entries with missing fields, invalid skill names for package targets, and hooks dropped by agent-plugins all built without a warning.
  • Three install-info claims had gone stale: Claude Code now has a shell claude plugin marketplace add command, Antigravity documents installing from a GitHub URL, and the legacy Codex manifest rule had no current source.
  • Nothing prompted a refresh of citations or vendored schemas.

Change

  • The hooks pointer is written only when hooks/hooks.json ships.
  • Same-target output collisions, including case-only and NFC differences, fail before any write.
  • The Quick Start is complete and correct, and a test builds and validates it from the README for every configured target.
  • claude and cursor reject a non-default marketplaceDir, with the fixed path and the evidence in the error.
  • New build warnings cover the cases above, with the target and the authored source file in each message.
  • install-info prints the current documented commands. The target citations were re-checked against the docs and dated today. The vendored Cursor and Agent Plugins schemas were re-fetched and are byte-identical to upstream.
  • A weekly Evidence freshness workflow fails when a citation or schema is more than 90 days old. It runs on a schedule, not on PRs, because its result depends on the date, not the change.
  • The README Targets section links each target's oracle, and the hero image shows all six targets.

Breaking changes

A non-default marketplaceDir on claude or cursor now fails config loading. Remove it, or use outDir to move the repository.

Testing

npm run check passes. The freshness check passes when simulated for 2026-10-26, the first scheduled run.

Keep hook pointers and custom marketplace validation consistent with emitted files. Refuse same-target overwrites before writing output, and report package skill, Codex entry, and omitted hooks problems during build.
Provide every authored file, use Copilot-compatible agent names, and supply Codex marketplace policy fields. Materialize the README blocks in CI and run the built CLI for every configured target. Clarify oracle strength, custom marketplace validation, and target migration cleanup.
Fail CI when citation or vendored-schema verification dates expire, are invalid, or are in the future. Preserve the recorded verification dates and document how to recheck claims and diff pinned schemas before advancing them.
The freshness checks depend on the date, not on the change under test, so running them in npm test would turn every pull request red the day a citation ages out. Run them weekly and on demand instead, and keep the pure boundary test in the suite.
Claude Code and Cursor discover manifests at fixed paths, so reject custom marketplace directories before emission instead of validating an output the clients cannot load. Legacy Codex hooks pointers must name a file that actually ships.

Point skill warnings at authored files, including overrides, and keep the target illustration, collision guidance, and executable quick start aligned with the output. Refresh only target citations confirmed against current sources.
Re-fetch both pinned schema sets and record their byte-identical upstream revisions. Keep historical dates on two contradicted install restrictions and the undocumented legacy Codex minimum rather than falsely certifying them. The scheduled check will continue to flag those claims until they are resolved.
Keep managed paths at the shared validation layer. Native target validators no longer consume them, so retain the original two-parameter contract and enforce it with a type assertion.
Use documented Claude shell commands and Antigravity GitHub URL installation. Retain interactive Claude commands and a path-aware local Antigravity fallback in the notes. Cite the tagged Codex legacy parser instead of claiming the host requires a name. Refresh only these three verified citations and cover the install-info output.
The signature is a seam other changes may legitimately extend, for example to tell a validator whether managed state exists. The behavior tests in this file already cover what the pin was protecting.
# ------------------------ >8 ------------------------
# Do not modify or remove the line above.
# Everything below it will be ignored.
#
# Conflicts:
#	README.md
#	src/targets/claude.ts
#	src/targets/cursor.ts
#	src/targets/engine.ts
@steve-calvert-glean
steve-calvert-glean marked this pull request as ready for review October 22, 2026 00:02
@steve-calvert-glean
steve-calvert-glean merged commit 7f715cd into main Oct 22, 2026
@steve-calvert-glean
steve-calvert-glean deleted the fix/target-conformance branch October 22, 2026 00:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

breaking Considered a breaking change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant