Status: Accepted by ADR 0026 in APG38.
This specification defines the owner graph, triggers, boundaries, and removal model for APG’s Go testing component profiles. It does not restate the component procedures; each leaf owns its own procedure, structural contract, and stops.
Two independent owners are retained. There is no composition owner.
go-language-profile general Go semantics (existing)
go-test-profile native testing lifecycle and go test semantics
go-cmp-test-profile optional, after project dependency selection
Indentation records subject-matter narrowing only. It is not a call sequence, an entry order, or a dependency.
| Owner | Owns | Does not own |
|---|---|---|
go-test-profile |
native testing and go test behavior: placement, subtests, helper attribution, reporting, cleanup and isolation, TestMain, parallelism, goroutine reporting boundaries, examples, benchmarks, fuzzing, selection, caching, and test-specific effects of the effective language version |
dependency selection, library-specific behavior, general Go semantics, project commands and policy |
go-cmp-test-profile |
version-bounded go-cmp behavior after selection: equality versus diff, option composition and filters, comparer and transformer obligations, ignoring and unexported boundaries, sorting and approximation contracts, ambiguity and panic conditions, diagnostic exposure | whether to adopt the dependency, native lifecycle, terse local assertions, production equality design, project commands and policy |
Each profile is triggered directly by the material judgment it owns. Reaching a component profile without passing through another owner is the normal path.
go-test-profile triggers when a task materially depends on native test
lifecycle, structure, isolation, reporting, or go test behavior. It does
not require any dependency to be present.go-cmp-test-profile triggers only when the repository has already
selected google/go-cmp and the task materially depends on semantic
comparison. Selection is a precondition, never an outcome.go-language-profile or a process skill applies.implementing-with-test-discipline primary; a review can
keep reviewing-and-verifying-repository-work primary.No composition owner is created or implied.
go-testing-stack leaf, specification, catalog row, projection, route, or
router subgraph is created by this specification or by ADR 0026.A component leaf may name another owner only to state a genuine boundary, and only under these constraints:
go-test-profile; structured or domain-sensitive comparison routed
to a retained go-cmp-test-profile after selection; general Go semantics
routed to go-language-profile; and all assertion, selection, command,
flag, fallback, and policy questions routed to the target repository. When
a named optional owner is unavailable, the cross-reference states the
project-owned fallback rather than pointing to an absent skill.| Owner | Calibration | Refresh condition |
|---|---|---|
go-test-profile |
current supported Go 1.26.5 and 1.25.12 sources plus installed Go 1.25.10 compatibility evidence, the language-version specification, and build constraints | testing API, language-version rules, fuzzing or artifact behavior, caching, or false-escalation evidence changes materially |
go-cmp-test-profile |
google/go-cmp v0.7.0 comparison, option, sorting, and equating sources |
the selected release differs, or the option set, comparer obligations, transformer filtering, unexported handling, sorting or approximation contracts, or documented panics change |
The optional component profile treats a differing selected release as a stop and
reverify condition before any behavior claim, not as an assumption of
compatibility. The native profile distinguishes the module go directive, the
effective per-file language version, and the installed toolchain, and never
infers language semantics from the toolchain alone.
APG text is independently written. No upstream prose, code, example, table, or diagnostic text is copied or adapted; factual API identifiers are used as facts.
These profiles never select, and always defer to the repository on: whether
the dependency exists and at what version; supported Go releases and
toolchain selection; the module go directive; package layout and test
placement; exact commands and flags; race, coverage, fuzz duration and corpus
retention, benchmark, and worker policy; platform and CI policy; timeouts,
fixtures, and temporary roots; live-service and destructive-action authority;
protected-data classification and redaction policy; artifact classification;
accepted exceptions; validation; and rollback.
A stricter project policy always wins over a profile default. A more permissive project policy may relax only a profile default, through an accepted bounded exception with an owner, evidence, adverse-case validation, a growth limit, a refresh condition, and rollback. No exception relaxes a safety, privacy, truthfulness, or authority stop.
One overlap is foreseeable and is resolved by rule, not by another owner:
go-cmp owns comparison and diff-rendering behavior; native testing still
owns how a test reports or withholds that diagnostic.When two owners appear to give contradictory answers about the same part of one test’s observable contract, that is a finding to escalate to the maintainer and to record as candidate composition evidence — not a case to resolve by inventing a coordinating owner.
Each leaf is removable through a candidate-independent mechanical operation. Removing one requires deleting its canonical leaf, checked flat projection, catalog row, capability-map entry, current-development release-policy entry, strict inventory entry, focused contract, and public scenario fixture, while preserving ADR, evaluation, and exit history.
Because no composition owner exists, removal does not require a replacement stack. It does require the same change to repair surviving cross-references and state the retained owner or project-owned fallback. Removing native Go also requires remaining component leaves to state that native lifecycle is project-owned until a retained native owner exists. Removal never adds, removes, or changes a target repository’s dependency, and grants no execution authority.
Before any candidate is retained, a later separately authorized Codex phase must:
provisional, with
projection, catalog row, general-router entry, release policy, and strict
inventory added together;go-testing-stack artifact, route, or subgraph appears; andThis specification is wrong, and must be revised or withdrawn, if any of the following turns out to be true:
go-test-profile cannot state the
native contract without restating go-language-profile, the owner boundary
between language and test semantics is misplaced.Each condition is intended to be checkable by a later phase against executable evidence rather than by argument.