Skip to content

[EPIC] Replace vendor-to-vendor translation with OpenAPM semantic models #2112

Description

@danielmeppiel

Is your feature request related to a problem? Please describe.
APM currently mixes target routing, schema normalization, default injection, and loss inside individual integrators. Some paths use one vendor's shape as the pivot for another vendor. This can make APM a permanent inter-vendor translation layer, hide semantic loss from operators, increase maintenance cost, and encourage vendor-specific schemas to become de facto standards.

Describe the solution you'd like
Adopt the approved standards-first architecture in docs/superpowers/specs/2026-07-10-openapm-standards-first-translation-design.md (design commit 12a384227).

APM will keep vendor-native import compatibility but normalize imports into small, immutable, versioned semantic models owned by OpenAPM. Each target renderer will consume only the primitive model, validate target capabilities, preserve the existing deny-wins executable trust gate, and return machine-readable transformation accounting. Unsupported required semantics fail clearly; vendor-only behavior remains available through explicit target-native declarations and is never cross-translated.

flowchart LR
    OA[OpenAPM declaration] --> IR[Per-primitive semantic model]
    VI[Vendor-native import] --> IA[Named import adapter]
    IA --> IR
    IR --> CV[Capability validation]
    CV --> TG[Executable trust gate]
    TG --> TR[Independent target renderer]
    TR --> VF[Canonical vendor file]
    TR --> RR[RenderResult]
    RR --> DC[DiagnosticCollector and CommandLogger]
Loading

There are deliberately no vendor-to-vendor edges:

flowchart TD
    F[Shared transformation and loss-report foundation] --> H[Hooks proving slice]
    F --> C[Commands]
    F --> M[MCP and environment semantics]
    F --> I[Instructions and rules]
    F --> A[Agents]
    F --> P[Plugin import and export]
    H --> P2097[Rework PR 2097]
    H --> P2095[Rework PR 2095]
Loading

One-release-cycle timeline

Stage Target Exit evidence
Foundation Week 1 RenderResult, capability registry, diagnostics, characterization fixtures
Hooks model Week 2 HookIR, adapters, renderers, trust boundary, spec amendment
Live bug PRs Weeks 2-3 PR #2097 and PR #2095 independently render from HookIR
Stabilization Week 4 Migration command, conformance, E2E, mutation-break, final panel and CI gates

If the foundation slips past the release-cycle boundary, PR #2097 and PR #2095 may land only as minimal, named compatibility bridges. Their migration to HookIR is then mandatory in the following minor release.

Work items

Live PR dispositions

  • PR fix(hooks): normalize flat entries for Claude #2097: rebase after the foundation; normalize flat legacy input into HookIR; render Claude nesting only in the Claude renderer; report matcher: "*" as an explicit semantics-preserving transformation; retain hermetic E2E and mutation-break proof; finish with visible ship_now and exact-final-SHA green CI.
  • PR fix(hooks): emit Kiro v1 hook documents #2095: rebase after the foundation; render Kiro v1 directly from HookIR; remove the Claude-shaped pivot and _kiro_* side channels; move Kiro-native import to a separate follow-up; retain hermetic E2E and mutation-break proof; finish with visible ship_now and exact-final-SHA green CI.

Describe alternatives you've considered

  • Make Claude the canonical internal schema: rejected because it violates neutrality and inherits one vendor's defaults.
  • Support only native distribution: rejected because imports and bounded portability remain valuable.
  • Continue pairwise best-effort conversion: rejected because maintenance and silent loss grow approximately with the number of source/target pairs.
  • Create one universal mega-IR: rejected because primitives have different semantics and maturity.

Additional context
The hooks slice is the proving surface. Commands, MCP, instructions/rules, agents, and plugin import/export each require their own design review before implementation. Existing OpenAPM requirements manifests and tests/spec_conformance remain the conformance authority. Lossless rendering remains quiet by default; transformation details appear under verbose or JSON output. Diagnostics report field paths, never secret values.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/multi-targetMulti-target deploy spec, target directory creation, agent surface routing.priority/highShips in current or next milestonestatus/acceptedDirection approved, safe to start work.theme/governanceGoverned by policy. apm-policy, audit, enforcement, enterprise rollout.theme/portabilityOne manifest, every target. Multi-target deploy, marketplace, packaging, install.type/architectureDesign-impacting change (new module, pattern, contract).

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    Status
    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions