Internet-Draft Addition Guide
Use this guide for every new AEP Internet-Draft, including extension, grant
type, identity method, Platform, transport, policy, attestation, and other
future specification documents.
The goal is stronger than making CI pass. A draft that completes this guide
should be ready for public IETF posting: the source is in the right place, the
document is internally coherent, support artifacts match the prose, generated
outputs are current, and the posting package is ready.
1. Classify The Draft
Decide the correct ietf/specs/ subdirectory before editing content.
core/: baseline interoperable protocol behavior.grant-types/: concrete Grant and Revoke session credential formats.identity-methods/: concrete Agent identity methods.platforms/: Platform-operated APIs outside the Service-facing AEP command
surface.transports/: non-baseline transport bindings.extensions/: optional protocol capabilities that build on core and are not
better described by a more specific spec class.
Update ietf/specs/README.md and the target subdirectory README.md.
Exit criteria:
- The draft path matches the protocol layer it defines.
- Repo navigation explains the new spec class or existing class clearly.
- No README implies the draft belongs to a different class.
2. Set The Draft Name And Metadata
Choose an author-style Internet-Draft name, usually
draft-kavian-aep-<topic>-00.md. Avoid terms such as profile unless the
draft is truly a constrained profile of another mechanism.
Check:
- YAML
docnameexactly matches the filename without.md. title,abbrev,category,ipr,submissiontype,stand_alone, and
author metadata match existing drafts.- Normative references are required to implement the wire behavior.
- Informative references are short and directly relevant.
Exit criteria:
- Draft lint passes.
- Datatracker links derived from the docname are correct.
- Filename,
docname, README links, vectors, and generated index all use the
same identifier.
3. Read The Required Context
Read before editing:
ietf/STYLE.mdietf/specs/README.md- the target subdirectory
README.md - the closest existing draft in the same class
- any draft referenced normatively by the new draft
- source design material that motivated the draft
Extract requirements into a temporary gap list and mark each gap as: fix in
draft, fix in schemas, fix in vectors, fix in conformance, intentionally out of
scope, or defer with rationale.
Exit criteria:
- The draft does not rely on summary memory.
- Source requirements are implemented or explicitly scoped out.
- No private strategy, partner assumptions, or internal roadmap text leaks into
public draft files.
4. Write The Draft To IETF Quality
The draft needs:
- abstract stating what the document defines without marketing language
- introduction stating scope, non-goals, and relationship to AEP core
- BCP 14 Requirements Language
- terminology that reuses AEP core terms and defines only new terms
- complete wire-visible behavior
- request, response, validation, and error behavior for every new endpoint,
command, object, or registry value - testable normative statements
- examples that are fake, realistic, and schema-valid
lower_snake_caseJSON fields- string-encoded AEP-owned numeric protocol values
- RFC 3339 timestamps
- JWT NumericDate JSON numbers where governed by JWT specs
- no hand-written
# Referencessection
Exit criteria:
- The draft reads like the existing AEP Internet-Drafts.
- A new implementer can build the behavior from the draft alone.
- Examples and normative prose do not contradict each other.
5. Preserve AEP Architecture
The draft must state how it relates to AEP core and must not redefine core
claims, commands, errors, lifecycle states, roles, or fields.
Preserve:
- explicit discovery
- fail-closed authentication and replay behavior
- the
not_recognizedanti-enumeration surface where applicable - separation between Service-facing AEP commands and Platform-operated APIs
- optional behavior staying out of core unless required for minimum
interoperability
Exit criteria:
- The draft composes with AEP core without changing core semantics.
- Cross-layer references flow from the new draft to core, not from core to the
optional draft unless deliberately updating core. - Unsupported implementations can safely ignore optional behavior.
6. Review Security And Privacy
Security and Privacy Considerations must be specific to the draft.
Cover:
- authentication boundaries
- authorization boundaries
- replay protection
- idempotency for mutating operations
- credential, token, key, or secret disclosure
- information disclosure and enumeration risk
- denial-of-service and rate limiting
- audit requirements
- log and telemetry minimization
- correlation risk and pairwise identifiers where relevant
- recovery, rotation, suspension, revocation, or termination where relevant
Exit criteria:
- Security and privacy sections cover every new trust boundary.
- No endpoint exposes private signing material, raw credentials, or unnecessary
PII. - Failure behavior does not create probing-friendly distinctions.
7. Align JSON Schemas
Add schemas for stable wire objects introduced by the draft.
Check:
- schema names are consistent
$idvalues usehttps://www.aep.foundation/schemas/- required fields match normative prose
- optional fields are optional in prose
- enum values match normative prose exactly
- DID fields use appropriate patterns
- date-time fields use
format: date-time - numeric-string fields are strings, not JSON numbers
additionalPropertiesis intentional
Update ietf/schemas/README.md, ietf/scripts/check_schemas.rb, and
published copies under docs/schemas/.
Exit criteria:
- Every stable wire object has a schema or a documented reason it does not.
- Every schema has at least one validating test vector when practical.
- Schema and published-schema checks pass.
8. Build Meaningful Test Vectors
Vectors should cover interoperability behavior, not only object syntax.
Add vectors for:
- stable request objects
- stable success response objects
- important error or non-disclosure behavior
- idempotency behavior for mutating operations
- discovery or advertisement behavior
- lifecycle or state transitions when defined
Update ietf/scripts/check_test_vectors.rb and ietf/test-vectors/README.md
for new categories, roles, or profiles.
Exit criteria:
- Vectors exercise the draft’s interoperability surface.
- Vector checks pass.
- Schema-targeted vectors validate.
9. Define Conformance Impact
Decide whether the draft adds Agent, Service, Platform, binding, extension, or
other role requirements.
Define:
- support claim requirements
- Core, Standard, Extended, or claim-dependent status
- static-vector coverage
- live-harness coverage
- declaration-only requirements
Update ietf/conformance/README.md and
ietf/scripts/check_conformance_harness.rb when needed.
Exit criteria:
- An implementer knows how to claim support.
- Conformance text does not imply optional support is required.
- Harness checks pass.
10. Review Registry And Governance Needs
Decide whether the draft registers a command, grant type, identity method,
extension, error code, lifecycle state, well-known URI, media type, or other
wire identifier.
Update:
- IANA Considerations
ietf/registry/entriesietf/governance/README.mdietf/governance/extension-registration.mdonly when extension registration
behavior changesietf/scripts/check_registry.rbwhen validation rules change
Exit criteria:
- Every new wire identifier has a registration path or a clear reason no
registration is needed. - IANA Considerations is not empty when registrable values are defined.
- Registry checks pass.
11. Update Documentation And Navigation
Update:
- root
README.md ietf/README.mdietf/specs/README.md- the target subdirectory
README.md ietf/schemas/README.mdietf/test-vectors/README.mdCONTRIBUTING.mdif the workflow changes- AEP website protocol and draft-page links in
inflow-server - generated schema docs and copies
Exit criteria:
- A reader can discover the draft from the root README and IETF README.
- Website protocol and draft pages point to the stable, unnumbered release
asset names. - No public documentation points to an old filename, old folder, or old draft
classification. - The deployment workflow publishes both the immutable versioned artifacts and
stable aliases without the revision suffix.
12. Render And Inspect Artifacts
Run:
make -C ietf format
make -C ietf render-schemas
make -C ietf render-drafts
Inspect generated .txt, .html, .xml, and .pdf artifacts. Record render
warnings and decide whether they block posting.
Exit criteria:
- Rendered artifacts exist under the current docname.
- Generated outputs are readable enough for public review.
- Checked-in generated docs have no stale links.
13. Run Consistency Searches
Search for:
- old draft names
- old folder paths
- stale terminology
- old error names
profilewhen the draft is not a profileextensionin non-extension draft material- internal strategy terms
- private partner names or speculative launch language
Exit criteria:
- Stale hits are fixed or intentionally retained with a documented reason.
- Checked source and docs contain no stale draft name, path, or taxonomy.
14. Run The Full Check Gate
Run:
make -C ietf check
git diff --check
git status --short
git diff --stat
Review substantive diffs, not only summaries.
Exit criteria:
make -C ietf checkpasses.git diff --checkreports no whitespace errors.- All modified and untracked files are expected.
- No unrelated user changes were reverted or overwritten.
15. Perform Publication Readiness Review
Read the draft from top to bottom as if reviewing an IETF submission.
Confirm:
- title and abstract identify the specification
- required sections are present
- the draft can be implemented without private context
- examples are consistent and useful
- schemas and vectors cover stable wire behavior
- conformance impact is explicit
- IANA Considerations is correct
- Security Considerations is complete enough for public review
- Privacy Considerations is complete enough for public review
- source-design gaps do not block posting
Exit criteria:
- The editor would be comfortable posting the draft to IETF Datatracker.
- Remaining work, if any, is post-publication improvement rather than a blocker
to public review.
16. Prepare The IETF Posting Package
Use the rendered XML artifact for Datatracker upload.
Confirm:
- XML docname matches the intended draft identifier
- rendered text artifact has the expected title, date, author, and abstract
- references are complete
- no unresolved placeholders remain
- version suffix is correct
- release asset names align with the docname
Prepare a short posting summary: what the draft defines, what it depends on,
and what review is requested.
Exit criteria:
- The draft can be posted to IETF without additional repo surgery.
- Posting summary accurately represents the draft and its relation to AEP core.