Skip to content

docs(compliance): storyboard troubleshooting + known-ambiguities guides (#2605, #2607, #2608)#2614

Closed
bokelley wants to merge 3 commits into
mainfrom
bokelley/conformance-cluster
Closed

docs(compliance): storyboard troubleshooting + known-ambiguities guides (#2605, #2607, #2608)#2614
bokelley wants to merge 3 commits into
mainfrom
bokelley/conformance-cluster

Conversation

@bokelley

Copy link
Copy Markdown
Contributor

Summary

Two new implementer-facing docs that close the DX gap #2608 identified and document the current state of the open conformance ambiguities (#2605, #2607) so new implementers aren't paying 1:1 detective-work cost per unresolved issue.

docs/building/implementation/storyboard-troubleshooting.mdx

Failure-mode lookup keyed on the raw error messages new implementers see. Each section: what the runner is telling you → what it means → how to fix. Patterns covered:

Plus operator escape hatches, a "before filing a bug" checklist, and cross-links to the canonical source docs.

docs/building/implementation/known-ambiguities.mdx

Running inventory of open spec ambiguities with interim guidance. Tagged Tracked / Under review / Resolved; each links to its upstream issue. Entries are deleted as issues close. Current set:

Ambiguity Status Issue
Envelope shape (errors[] vs adcp_error) Under review #2587
past_start_handled reject-or-adjust Resolved (forwarding pointer) #2389
Other any_of single-branch assertions Tracked #2605
Idempotency missing_key SDK inversion Tracked #2607
Vectors asserting schema-optional fields Tracked #2604
check_governance conditional-approval shape Tracked #2603
$context.* resolution rules Under review #2589
INVALID_STATE_TRANSITION canonicalization Under review #2588
Fixture-id hardcoding Tracked #2585

static/compliance/source/universal/idempotency.yaml

The missing_key phase gains an SDK-injection caveat note in its narrative, pointing at #2607. Implementers reading the YAML now see the caveat in-line without having to hunt down the troubleshooting doc.

Closes

Progresses

Test plan

  • npm run test:docs-nav — passes (nav entries wired)
  • npm run build:compliance — passes (YAML note doesn't break compilation)
  • Full npm test via pre-commit — 631 tests pass, typecheck clean
  • Changeset included
  • Broken-links CI check validates cross-references

🤖 Generated with Claude Code

…es (#2608, #2605, #2607)

Two new docs that close the implementer-DX gap #2608 identified
and document the current state of the open any_of and SDK-injection
ambiguities (#2605, #2607) so new implementers aren't paying 1:1
detective-work cost per issue.

storyboard-troubleshooting.mdx — failure-mode lookup keyed on the
raw error messages new implementers see. Each section: what the
runner is telling you, what it means, how to fix. Covers the
high-frequency patterns: PRODUCT_NOT_FOUND (fixture seeding), missing
WWW-Authenticate: Signature challenge on 401, errors[] vs adcp_error
envelope drift, context echo failures, capability-vector mismatches,
INVALID_STATE variants, the idempotency missing-key SDK inversion,
and account/brand stripping.

known-ambiguities.mdx — running inventory of open spec ambiguities
with interim guidance. Entries tagged Tracked / Under review /
Resolved; each links to its upstream issue. Entries are removed as
issues close. Current set: envelope shape (#2587), past_start
(resolved by #2389, kept as forwarding pointer), remaining any_of
audit (#2605), idempotency SDK-injection (#2607), schema-optional
fields asserted by vectors (#2604), check_governance conditional-
approval shape (#2603), $context.* resolution (#2589),
INVALID_STATE_TRANSITION canonicalization (#2588), fixture-id
hardcoding (#2585).

idempotency.yaml — missing_key phase gains an SDK-injection caveat
in its narrative pointing at #2607. Implementers reading the YAML
now see the caveat in-line without having to hunt down the
troubleshooting doc.

Both new docs wired into the Implementation Patterns nav group.

Closes #2608. Progresses #2605 and #2607 by documenting the
workarounds while underlying fixes land (vector-level any_of audit
for #2605; storyboard-runner raw-HTTP probe for #2607 — both
tracked as follow-ups).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Schema Link Check Results

Commit: a26c82a - docs(compliance): storyboard troubleshooting + known-ambiguities guides (#2608, #2605, #2607)

⚠️ Warnings (schema not yet released)

These schemas exist in source but haven't been released yet. The links will be broken until the next version is published:

  • https://adcontextprotocol.org/schemas/v3/enums/specialism.json
    • Schema exists in latest (source) but not yet released in v3
    • Action: This link will work after next 3.x release is published

To fix: Either:

  1. Wait for the next release and merge this PR after the release is published
  2. Use latest instead of a version alias if you need the link to work immediately (note: latest is the development version and may change)
  3. Coordinate with maintainers to cut a new release before merging

bokelley and others added 2 commits April 20, 2026 21:11
Filed adcp-client#678 to track the probeRawRequest work that
unblocks the idempotency missing_key vector. Cross-linking from
the three places that previously only referenced adcp#2607:

- known-ambiguities.mdx entry now lists both issues with their
  respective scopes (spec vs runner fix)
- storyboard-troubleshooting.mdx section on the missing_key
  vacuous-pass now points at the runner fix too
- idempotency.yaml narrative cites both, and names probeRawRequest
  and probeSignedRequest explicitly so implementers can find the
  pattern when reading the YAML

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… NOT_CANCELLABLE (#2605 audit)

Completes the vector-level audit #2605 asked for. The only legitimate
finding across all 25 check: error_code assertions in
static/compliance/source/:

invalid_transitions > second_cancel locked to NOT_CANCELLABLE, but
re-cancelling a media buy in canceled (terminal) state satisfies
TWO spec rules at once:

- media-buy/specification.mdx §129, §254: sales agents MUST reject
  updates to media buys in terminal states with error code
  INVALID_STATE
- update_media_buy.mdx §675: NOT_CANCELLABLE — media buy or package
  cannot be canceled

An agent that returns INVALID_STATE on re-cancel is spec-conformant
via the terminal-state-update rule; an agent returning
NOT_CANCELLABLE is spec-conformant via the cancellation-rejection
rule. Both are defensible readings of the current spec.

Widened the vector to allowed_values: ["NOT_CANCELLABLE",
"INVALID_STATE"] with narrative pointing implementers at both spec
references. Updated the scenario summary and phase narrative to
reflect the dual-branch acceptance.

Other single-branch error_code assertions in the storyboards were
audited and are spec-locked (VERSION_UNSUPPORTED, GOVERNANCE_DENIED,
INVALID_STATE for pause/resume on canceled, MEDIA_BUY_NOT_FOUND,
PACKAGE_NOT_FOUND, TERMS_REJECTED) per their canonical sources.
No further widenings needed.

known-ambiguities.mdx entry for #2605 updated to reflect the
completed vector-level audit. The spec-side decision on whether to
canonicalize one code for re-cancel remains open; the vector no
longer penalizes either choice.

Progresses #2605.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@bokelley

Copy link
Copy Markdown
Contributor Author

Closing as obsolete — superseded by parallel-merged PRs.

What landed while this PR was open

What this PR's docs got wrong anyway

Code review caught several folklore defects that would have shipped stale even without the duplication:

Open question that survived

The re-cancel vector's error-code assertion is a real spec ambiguity — `specification.mdx §129,254` says "Sales agents MUST reject updates to media buys in terminal states (`completed`, `rejected`, `canceled`) with error code `INVALID_STATE`." That MUST applies to re-cancel (a terminal-state update). `NOT_CANCELLABLE` is a MAY per §128. An agent returning `INVALID_STATE` on re-cancel is conformant with the MUST and currently fails the vector.

The #2611 audit called `NOT_CANCELLABLE` "scenario-canonical" but didn't resolve the conflict with the MUST. I'm filing a follow-up issue to surface that for a spec-owner decision rather than pushing a unilateral vector change here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant