42 Commits

Author SHA1 Message Date
ba38569319 fix: update hash format validation to -01 spec (plain base64url, no prefix)
Go ValidateHashFormat was still validating the old -00 format
(algorithm:base64url with sha-256/sha-384/sha-512 prefix). Updated to
validate plain base64url without prefix per -01 spec and RFC 9449.
Python was already updated but uncommitted. Both refimpls now match.
2026-04-11 17:51:29 +02:00
884d2dc836 feat: migrate refimpls from draft-00 to draft-01 claim names
- Rename `par` to `pred` (predecessor) in types, serialization, tests
- Remove `pol`, `pol_decision` from core payload; move to `ect_ext`
- Remove `sub` from payload (not part of ECT spec)
- Update `typ` from `wimse-exec+jwt` to `exec+jwt` (accept both)
- Rename MaxParLength to MaxPredLength everywhere
- Update testdata, demos, READMEs with migration table
- All Go tests pass, all 56 Python tests pass (90% coverage)
2026-04-03 10:55:58 +02:00
ba044f6626 Merge branch 'main' of git.xorwell.de:c/ietf-wimse-ect 2026-04-03 07:53:47 +02:00
8cf0d8aade feat: polish draft-01 for submission — claim renames, review fixes, refimpl docs
Draft improvements:
- Rename ext -> ect_ext, clarify iss/aud requirements per level
- Add algorithm agility guidance and RFC 8725 reference
- Add HTTP header size constraints and body transport fallback
- Add cross-level parent reference semantics
- Add emerging agent protocols (A2A, MCP) to Related Work
- Fix HTTP error handling (403 not 401), IANA +jwt suffix note
- Add workflow consistency check to DAG validation
- Add defense-in-depth note for acyclicity check

Supporting files:
- Fix blog post outdated claim names (par -> pred, ext -> ect_ext)
- Update refimpl README with -00 vs -01 migration mapping
- Add refimpl IMPROVEMENTS.md section 6 with -01 migration tasks
2026-04-03 07:49:36 +02:00
16a1973d02 Fix: prevent duplicate triggers and bot self-triggering 2026-03-09 22:21:04 +00:00
342ca5257c Add Claude workflow with cost controls and model selection 2026-03-09 22:17:26 +00:00
bd2a5f819a Fix build errors: duplicate anchors, missing ref, back-matter numbering
- Add unique anchors for security subsections that collided with
  protocol section anchors (level-1/2/3, x509-binding, wimse-binding)
- Fix broken {{jwt-claims}} reference to {{exec-claims}}
- Fix I-D.oauth-transaction-tokens-for-agents reference (add manual
  entry since bibxml3 lookup fails)
- Remove RFC2119/8174 from YAML normative block (bcp14-tagged
  boilerplate adds them automatically)
- Add {:numbered="false"} to all back-matter subsections

Build now succeeds: XML, TXT, and HTML generated cleanly.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 20:07:11 +01:00
eb79c6998a Apply comprehensive review fixes to draft-nennemann-wimse-ect-01
Critical fixes:
- Add RFC 2119/8174 to normative refs, move RFC 9449 to normative
- Rewrite level detection algorithm with precise parsing order
  (JWS first, then base64url-decode for L1)
- Add downgrade attack analysis and minimum-level policy requirement
- Complete application/wimse-exec+jwt IANA registration template
- Fix bare draft-00 citations, fix I-D reference anchor format
- Rewrite abstract to remove changelog language

Medium fixes:
- Add jti replay check to L1 verification procedure
- Add L3 async failure handling (notify downstream, treat as L2)
- Add L3 sync timeout retry/fallback guidance
- Add identity binding security subsection (JWK caching, OCSP
  failure policy, trust bundle refresh)
- Add audit ledger threats subsection (availability, split-view,
  receipt authenticity, async gap)
- Collapse redundant Section 9 into HTTP Error Handling
- Remove redundant L3 verification steps for iss/aud
- Add L2 use case (multi-vendor SaaS document pipeline)

Low fixes:
- Strengthen ext object limits from SHOULD NOT to MUST NOT
- Add level negotiation future work note
- Document L1 DAG validation limitation without ledger
- Add alg=none defense-in-depth note
- Strengthen self-assertion limitation for L1
- Add workflow topology leakage to privacy considerations
- Add cross-workflow correlation to privacy considerations
- Add RATS (RFC 9334) to related work
- Expand SCITT comparison with L3 audit ledger parallel
- Pin SPIFFE reference to specific version URL
- Clean up redundant {:numbered="false"} in back matter

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 19:58:04 +01:00
139a4e85e2 Rename 'par' claim to 'pred' and fix area to SEC
Rename the 'par' (Parent Task Identifiers) JWT claim to 'pred'
(Predecessor Task Identifiers) to avoid collision with RFC 9126
(Pushed Authorization Requests) which already registers 'par' in
the IANA JWT Claims registry. Fix IETF area from ART to SEC since
WIMSE is in the Security area.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 19:35:12 +01:00
2d3af57923 Restructure repo: single source file with git tags for versioning
Drop versioned directories and archive/ in favor of git tags (draft-00,
draft-01) for frozen submissions. Rename source to
draft-nennemann-wimse-ect.md (version comes from docname in front matter).
Update build.sh to extract docname automatically. Ignore generated outputs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 19:20:38 +01:00
998a7f2eb8 Add draft-nennemann-wimse-ect-01 with assurance levels and identity-framework agnostic design
Introduces three assurance levels (L1 unsigned JSON, L2 JOSE signing,
L3 JOSE signing with audit ledger) so deployments can choose the
appropriate trade-off between simplicity and regulatory compliance.

Decouples ECTs from WIMSE/SPIFFE hard dependencies by introducing an
abstract identity binding model with concrete profiles for WIMSE,
X.509, and JWK sets. The typ header moves from wimse-exec+jwt to
exec+jwt (with backward compatibility).

Includes blog article (blog-ect-assurance-levels.md) explaining the
assurance levels change and identity-framework agnostic design.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 23:04:12 +01:00
6e5eba641a Final draft-nennemann-wimse-ect-00 with peer review feedback
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ect-00
2026-02-25 23:26:25 +01:00
bbf557e54b Restructure refimpl into go-lang and python subdirectories
Move Go reference implementation to refimpl/go-lang/ and add new
Python reference implementation in refimpl/python/. Update build.sh
with renamed draft and simplified tool paths.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 23:11:55 +01:00
ff795c72e6 Implement peer review feedback for draft-nennemann-wimse-ect-00
Address 11 items from peer review:
- Fix area designation from Security to ART (WIMSE is in ART area)
- Switch inp_hash/out_hash to fixed SHA-256 without algorithm prefix,
  matching DPoP (RFC 9449) and WIMSE WPT tth claim patterns
- Add partial DAG verification guidance for unavailable parents
- Add DAG integrity attacks subsection (false parents, pruning, shadow DAGs)
- Add privilege escalation subsection (ECTs are not authorization)
- Add revocation propagation semantics through the DAG
- Add W3C PROV Data Model to Related Work
- Strengthen Txn-Token differentiation with fan-in/convergence bullet
- Add explicit token binding paragraph to replay prevention
- Switch verification step 3 to algorithm allowlist model
- Add par/ext claim naming justification notes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 21:59:16 +01:00
1385ec8af1 Slim down draft to core ECT mechanism for -00 submission
Remove all companion draft (ect-pol) references, regulatory
compliance mappings, pre-defined extension keys, witness concept,
pseudocode blocks, implementation guidance appendix, and redundant
examples. Keep only the core token format, DAG validation,
verification procedure, and one cross-organization use case.
Draft reduced from ~40 pages to 27 pages.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 20:30:07 +01:00
47f5f97c90 Rename draft to draft-nennemann-wimse-ect-00
Shorter, cleaner name matching the companion spec naming convention.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 16:57:24 +01:00
907e823a4d Move use cases section to appendix
Use cases (medtech SDLC, financial trading, logistics) are
motivating examples, not protocol definition. Moving them to
the appendix keeps the normative body focused on format,
transport, validation, and security.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 16:53:18 +01:00
e62b62ff99 Soften regulatory references in introduction, keep mapping in appendix
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 16:49:06 +01:00
fc4bbdfeca Rename companion spec reference to draft-nennemann-wimse-ect-pol
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 15:47:44 +01:00
ddc1e3c6c0 Split policy/compensation into companion spec, slim down base ECT
Move all policy evaluation (pol, pol_decision, pol_enforcer) and
compensation claims to I-D.nennemann-wimse-ect-policy-compensation.
Base spec now focuses on execution ordering, DAG structure, and
audit trail. All examples, diagrams, and prose updated accordingly.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 15:38:38 +01:00
a0a3369113 Simplify spec: remove sub, move compensation to ext, add RFC 8126
Restore from pre-linter base (898b0f8) and re-apply targeted
changes to avoid unintended structural rewrites:

- Remove sub claim (always equals iss, adds no information)
- Move compensation_required and compensation_reason to ext keys
- Trim witness attestation section to concise guidance
- Fix ledger-mandatory language in verification step 15 and
  minimal implementation step 5
- Add RFC 8126 to normative references

Policy evaluation claims (pol, pol_decision, pol_enforcer) remain
as registered JWT claims in this spec.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 14:26:13 +01:00
0a38226b32 Add RFC 8126 to normative references
RFC 8126 (IANA Considerations guidelines) was used inline
but missing from the normative references list.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 13:13:00 +01:00
bf0f94ab30 Simplify spec: remove sub, move compensation and policy to ext
- Remove sub claim (always equals iss, added no information)
- Move compensation_required and compensation_reason to ext keys
- Move pol, pol_decision, pol_enforcer to ext keys
- IANA JWT Claims table reduced from 11 to 6 registered claims
- Trim witness attestation section to concise guidance
- Fix remaining ledger-mandatory language in verification
  step 15 and minimal implementation guidance

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 12:38:14 +01:00
898b0f8747 Remove non-protocol claims and make ledger optional
Move 6 metadata claims (pol_timestamp, inp_classification,
exec_time_ms, regulated_domain, model_version, witnessed_by)
from registered JWT claims to recommended ext extension keys.
Use short key names for spec-defined extensions.

Make audit ledger explicitly optional: rename pseudocode
parameter from ledger to ect_store, mark architecture diagram
ledger layer as optional, add conditional append logic, and
soften Audit Ledger Interface language.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 23:35:03 +01:00
d8d1524dac Make SPIFFE ID format recommended, not required for iss claim
Allow any URI scheme for the iss claim (SPIFFE, HTTPS, URN:UUID)
to support non-WIMSE deployments that want DAG tracing without
SPIFFE infrastructure. SPIFFE format remains SHOULD for WIMSE
deployments.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 23:27:34 +01:00
a6d2a955ee Fix extension key prefix: io.wimse -> org.ietf.wimse
Use correct IETF reverse domain notation for spec-defined
extension keys within the ext object.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 23:21:24 +01:00
ed8a3f17c2 Reduce scope and tighten framing for submission readiness
- Remove Operational Modes section (point-to-point, deferred,
  full ledger) to reduce surface area for a -00 submission
- Trim Ledger Interface to essential properties only, remove
  ledger entry JSON example
- Condense regulatory motivation in Introduction to 2 sentences
  with forward reference to compliance mapping table
- Reframe "cryptographic proof" to "signed, structured records"
  in abstract and introduction to accurately reflect self-assertion
- Make WPT co-presence RECOMMENDED rather than assumed, hedging
  against s2s-protocol evolution; ECT is independently verifiable
  via WIT public key
- Fix broken reference: draft-oauth-transaction-tokens-for-agents
  (not an ietf- WG draft)
- Add jti to all JSON examples (required claim was missing from 9
  of 10 examples)
- Clean up dangling cross-references to removed sections

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 23:00:36 +01:00
102a120d65 Merge tid into jti and make policy claims optional
- Eliminate the "tid" claim; "jti" now serves as both token ID (for
  replay detection) and task ID (for DAG parent references in "par")
- Make "pol" and "pol_decision" OPTIONAL (must be paired when present)
- Regulated deployments SHOULD still include policy claims
- Reduces required ECT-specific claims to just "exec_act" and "par"
- Remove "tid" from IANA JWT Claims registration
- Update all examples, pseudocode, and DAG validation rules

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 22:39:46 +01:00
f9357fdf88 Add WIMSE ECT reference implementation (Go)
- ect library: create, verify, DAG validation, ledger interface
- In-memory ledger and ECTStore for full ledger mode
- Test vectors and unit tests; two-agent demo (cmd/demo)
- README: document refimpl scope and usage

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-24 22:05:30 +01:00
a263d8c201 Clean up section titles and fix transaction tokens draft reference
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 21:29:29 +01:00
821a7f4570 Add ledger-optional operational modes (point-to-point, deferred, full)
ECTs can now be deployed without a centralized ledger. Three modes
are defined: point-to-point (agents pass parent ECTs inline via HTTP
headers), deferred ledger (collect ECTs in-flight, submit later), and
full ledger (immediate append, RECOMMENDED for regulated environments).

DAG validation is generalized to work against an "ECT store" which
can be either a ledger or the set of inline parent ECTs received in
the request.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 20:59:49 +01:00
e60035c75b Clarify that policy evaluation mechanics are out of scope
Add paragraph in Policy Claims section explicitly stating that
policy definition, distribution, and evaluation are out of scope.
The pol claim is an opaque identifier; any policy engine may be
used provided outcomes are faithfully recorded.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 19:21:54 +01:00
de9c7719a4 Add build script and regenerate compiled output
Add build.sh that auto-discovers kramdown-rfc2629 and xml2rfc
regardless of PATH configuration, generates XML, TXT, and HTML
in one step.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 18:59:39 +01:00
db9d8e52c8 Regenerate HTML rendering with local xml2rfc
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 18:54:21 +01:00
8615105ce0 Remove duplicate RFC 2119/8174 refs and add compiled output
Remove RFC 2119 and RFC 8174 from normative YAML block since the
BCP 14 boilerplate directive adds them automatically, causing
duplicate reference warnings. Rebuild draft with zero warnings.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 18:51:45 +01:00
397419d711 Fix dangling RFC 3339 reference and non-reserved example domain
Remove RFC 3339 from normative references (not cited in text;
timestamps use NumericDate per RFC 7519). Change bank.com to
bank.example in compensation use case per RFC 2606.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 06:57:20 +01:00
d6d44285eb Add SCITT integration section linking wid to Transparency Services
The ECT workflow identifier (wid) can serve as a correlation point
in SCITT Signed Statements, bridging per-step execution accountability
with end-to-end supply chain transparency.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 06:46:38 +01:00
6676196ea9 Add compiled draft HTML output
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 06:36:30 +01:00
3595b0d2e2 Add compiled draft output (XML and TXT) and .gitignore
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 06:35:57 +01:00
005509b20c Replace medical device workflow with medtech SDLC use case
Replace the clinical treatment recommendation workflow with a
software development lifecycle (SDLC) workflow covering spec
review, code generation, autonomous testing, build validation,
and HITL release approval. Add FDA audit subsection showing DAG
reconstruction for regulatory evidence review. Update Example 2
in appendix with matching detailed JSON examples for all 5 SDLC
phases.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 06:31:10 +01:00
e581290403 Add README with project overview and build instructions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 06:01:51 +01:00
a2e4d32ffd Add IETF Internet-Draft: Execution Context Tokens for WIMSE
Initial submission of draft-nennemann-wimse-execution-context-00,
defining Execution Context Tokens (ECTs) as a WIMSE extension for
distributed agentic workflows in regulated environments.

ECTs provide cryptographic proof of task execution order, policy
enforcement decisions, and compliance state using JWT/JWS format
with DAG-structured task dependencies.

Key features:
- 17 new JWT claims for execution context tracing
- Execution-Context HTTP header for token transport
- DAG validation with cycle detection and temporal ordering
- Audit ledger interface specification
- Integration with WIMSE WIT/WPT signing model
- Use cases: medtech, finance, logistics, compensation/rollback

Includes master-prompt.md with design rationale and iteration plan.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 05:30:37 +01:00