Skip to content

Commit 6fde80a

Browse files
committed
Update all signature examples to signature-with-assertions pattern
Signed-off-by: Christopher Allen <ChristopherA@LifeWithAlacrity.com>
1 parent b29d2e6 commit 6fde80a

1 file changed

Lines changed: 89 additions & 91 deletions

File tree

papers/bcr-2026-010-peer-endorsement.md

Lines changed: 89 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -188,21 +188,22 @@ Use BCR predicates when you need:
188188

189189
```
190190
{
191-
{
192-
Digest(peer-endorsement) [
193-
'isA': 'PeerEndorsement'
194-
'endorsementTarget': XID(subject)
195-
'endorserStatement': "Reviewed 8 PRs over 6 months; consistently high-quality security-focused code"
196-
'endorserRelationship': "Project maintainer who merged their contributions"
197-
'endorsementBasis': "Direct observation of code quality and collaboration"
198-
'disclosedLimitations': "Only reviewed backend security; cannot speak to frontend skills"
199-
'validFrom': 2026-02-02
200-
]
201-
} 'signed': Signature
202-
[
203-
'signer': XID(endorser)
191+
Digest(peer-endorsement) [
192+
'isA': 'PeerEndorsement'
193+
'endorsementTarget': XID(subject)
194+
'endorserStatement': "Reviewed 8 PRs over 6 months; consistently high-quality security-focused code"
195+
'endorserRelationship': "Project maintainer who merged their contributions"
196+
'endorsementBasis': "Direct observation of code quality and collaboration"
197+
'disclosedLimitations': "Only reviewed backend security; cannot speak to frontend skills"
198+
'validFrom': 2026-02-02
204199
]
205-
} 'signed': Signature
200+
} [
201+
'signed': {
202+
Signature [
203+
'signer': XID(endorser)
204+
]
205+
} ['signed': Signature]
206+
]
206207
```
207208

208209
## Referenced Predicates
@@ -327,32 +328,30 @@ All proposed codepoints are in the **Community Assigned (specification required)
327328

328329
```
329330
{
330-
{
331-
XID(alice) [
332-
'acceptedEndorsement': {
333-
{
334-
Digest(endorsement-from-bob) [
335-
'endorsementTarget': XID(alice)
336-
'endorserStatement': "..."
337-
]
338-
} 'signed': Signature
339-
[
340-
'signer': XID(bob)
341-
]
342-
} 'signed': Signature
331+
XID(alice) [
332+
'acceptedEndorsement': {
333+
Digest(endorsement-from-bob) [
334+
'endorsementTarget': XID(alice)
335+
'endorserStatement': "..."
336+
]
337+
} [
338+
'signed': {
339+
Signature ['signer': XID(bob)]
340+
} ['signed': Signature]
343341
]
344-
} 'signed': Signature
345-
[
346-
'signer': XID(alice)
347342
]
348-
} 'signed': Signature
343+
} [
344+
'signed': {
345+
Signature ['signer': XID(alice)]
346+
} ['signed': Signature]
347+
]
349348
```
350349

351350
**Notes**:
352351
- The acceptance model ensures subjects maintain control over their identity
353352
- Subject's signature on the containing document implies acceptance
354353
- Subjects may decline endorsements they find inaccurate or unwanted
355-
- Both endorser (Bob) and subject (Alice) use double-signing pattern (BCR-2026-004)
354+
- Both endorser (Bob) and subject (Alice) use signature-with-assertions pattern (BCR-2026-004)
356355

357356
---
358357

@@ -454,23 +453,24 @@ A well-formed peer endorsement includes observation, relationship, basis, and tr
454453

455454
```
456455
{
457-
{
458-
Digest(complete-endorsement) [
459-
'isA': 'PeerEndorsement'
460-
'endorsementTarget': XID(alice)
461-
'endorserStatement': "I reviewed 8 of their security-focused PRs. All demonstrated understanding of constant-time operations, proper key handling, and defense in depth."
462-
'endorserRelationship': "Project maintainer for crypto library; merged their contributions over 6 months"
463-
'endorsementBasis': "15 years security engineering; maintain similar libraries at 2 other organizations"
464-
'endorsementContext': "Cryptographic implementation and secure coding practices"
465-
'disclosedLimitations': "Only reviewed their crypto code; cannot speak to UI/UX or project management skills"
466-
'disclosedBias': "We have become professional friends through this collaboration"
467-
'validFrom': 2026-02-02
468-
]
469-
} 'signed': Signature
470-
[
471-
'signer': XID(endorser)
456+
Digest(complete-endorsement) [
457+
'isA': 'PeerEndorsement'
458+
'endorsementTarget': XID(alice)
459+
'endorserStatement': "I reviewed 8 of their security-focused PRs. All demonstrated understanding of constant-time operations, proper key handling, and defense in depth."
460+
'endorserRelationship': "Project maintainer for crypto library; merged their contributions over 6 months"
461+
'endorsementBasis': "15 years security engineering; maintain similar libraries at 2 other organizations"
462+
'endorsementContext': "Cryptographic implementation and secure coding practices"
463+
'disclosedLimitations': "Only reviewed their crypto code; cannot speak to UI/UX or project management skills"
464+
'disclosedBias': "We have become professional friends through this collaboration"
465+
'validFrom': 2026-02-02
472466
]
473-
} 'signed': Signature
467+
} [
468+
'signed': {
469+
Signature [
470+
'signer': XID(endorser)
471+
]
472+
} ['signed': Signature]
473+
]
474474
```
475475

476476
### Acceptance Model
@@ -479,61 +479,59 @@ The subject accepts endorsements by including them in their signed XIDDoc:
479479

480480
```
481481
{
482-
{
483-
XID(alice) [
484-
'acceptedEndorsement': {
485-
{
486-
Digest(endorsement-from-bob) [
487-
'isA': 'CodeReviewEndorsement'
488-
'endorsementTarget': XID(alice)
489-
'endorserStatement': "..."
490-
]
491-
} 'signed': Signature
492-
[
493-
'signer': XID(bob)
494-
]
495-
} 'signed': Signature
496-
'acceptedEndorsement': {
497-
{
498-
Digest(endorsement-from-carol) [
499-
'isA': 'CollaborationEndorsement'
500-
'endorsementTarget': XID(alice)
501-
'endorserStatement': "..."
502-
]
503-
} 'signed': Signature
504-
[
505-
'signer': XID(carol)
506-
]
507-
} 'signed': Signature
482+
XID(alice) [
483+
'acceptedEndorsement': {
484+
Digest(endorsement-from-bob) [
485+
'isA': 'CodeReviewEndorsement'
486+
'endorsementTarget': XID(alice)
487+
'endorserStatement': "..."
488+
]
489+
} [
490+
'signed': {
491+
Signature ['signer': XID(bob)]
492+
} ['signed': Signature]
493+
]
494+
'acceptedEndorsement': {
495+
Digest(endorsement-from-carol) [
496+
'isA': 'CollaborationEndorsement'
497+
'endorsementTarget': XID(alice)
498+
'endorserStatement': "..."
499+
]
500+
} [
501+
'signed': {
502+
Signature ['signer': XID(carol)]
503+
} ['signed': Signature]
508504
]
509-
} 'signed': Signature
510-
[
511-
'signer': XID(alice)
512505
]
513-
} 'signed': Signature
506+
} [
507+
'signed': {
508+
Signature ['signer': XID(alice)]
509+
} ['signed': Signature]
510+
]
514511
```
515512

516-
The subject's signature on the outer document implies acceptance of all included endorsements. All signatures use the double-signing pattern (BCR-2026-004) to bind signer identity.
513+
The subject's signature on the outer document implies acceptance of all included endorsements. All signatures use the signature-with-assertions pattern (BCR-2026-004) to bind signer identity.
517514

518515
### Combined with Signing Event Attestations
519516

520517
For endorsements that involve delegation or institutional context, combine with BCR-2026-004:
521518

522519
```
523520
{
524-
{
525-
Digest(institutional-endorsement) [
526-
'isA': 'PeerEndorsement'
527-
'endorsementTarget': XID(subject)
528-
'endorserStatement': "Committee approved contributor status"
529-
]
530-
} 'signed': Signature
531-
[
532-
'signer': XID(committee-chair)
533-
'signedOnBehalfOf': XID(organization)
534-
'xades:ClaimedRole': "Security Review Committee Chair"
521+
Digest(institutional-endorsement) [
522+
'isA': 'PeerEndorsement'
523+
'endorsementTarget': XID(subject)
524+
'endorserStatement': "Committee approved contributor status"
535525
]
536-
} 'signed': Signature
526+
} [
527+
'signed': {
528+
Signature [
529+
'signer': XID(committee-chair)
530+
'signedOnBehalfOf': XID(organization)
531+
'xades:ClaimedRole': "Security Review Committee Chair"
532+
]
533+
} ['signed': Signature]
534+
]
537535
```
538536

539537
## Relationship to Other BCRs

0 commit comments

Comments
 (0)