Skip to content

docs: add the AFFIRMATION authoring standard - #758

Merged
hyperpolymath merged 2 commits into
mainfrom
docs/affirmation-standard
Sep 9, 2026
Merged

hyperpolymath merged 2 commits into
mainfrom
docs/affirmation-standard

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

docs/AFFIRMATION-STANDARD.adoc did not exist, yet ten repos already carry an AFFIRMATION.adoc and ephapax cites this exact path. This adds the missing standard.

Derived, not invented

Written after reading all ten affirmations in the estate in full (affinescript, typed-wasm, ephapax, tropical-types, KnotTheory.jl, neurophone, echidna, hypatia, my-lang, wokelang), so it codifies what is already practised:

  • Five share an identical twelve-section skeleton → profile A (evidential).
  • Two use a MUST / INTEND / WISH modal form → profile B (modal).
  • Three are lighter variants the standard supersedes; they are not in breach until their next refresh.

Both profiles are conformant. Forcing one would have made seven of the ten non-compliant overnight by fiat.

What it fixes

  • The genre triad is written down: README is future/aspirational, EXPLAINME is descriptive/mechanism, AFFIRMATION is a frozen falsifiable instant. It is the only one of the three designed to go out of date, and it must say so in its own text.
  • The three mandatory parts of trustworthiness: ground truth not memory; a frozen anchor (full 40-char SHA, branch, UTC timestamp, toolchain, working-tree delta); a signed commit as the tamper-evident form.
  • Tags are banned as anchors. A moved tag silently invalidates every claim, which is not hypothetical here — a pin against a force-pushed branch rots on every upstream release.
  • Anti-patterns, including citing a green CI badge as evidence: a gate that startup-fails emits no jobs and no check runs at all, so its absence is indistinguishable from success unless you read the run conclusion.

Deliberate non-decision

Presence is not gated. An affirmation is optional by design; a mandated one would be written to satisfy a gate rather than a reader.

Verification

  • asciidoctor --failure-level=WARN renders clean.
  • 0 lines over 80 columns; sentence-case headings, options="header" on every table, AsciiDoc admonitions not emoji — per the AsciiDoc style rules in the sibling standard.
  • SPDX CC-BY-SA-4.0 on line 1 (docs licence, not MPL).
  • Commit is signed (git log --show-signature → good signature, id_ed25519_signing), which is what the standard itself requires of an affirmation.

The dangling ephapax citation is recorded in the standard's Derivation section rather than quietly fixed, because a dangling citation is exactly the kind of drift the genre exists to expose.

🤖 Generated with Claude Code

https://claude.ai/code/session_01QMTyDv9CoJo5PfeNzyp519

AFFIRMATION.adoc was already in use in ten repos and already cited by path
from ephapax, but docs/AFFIRMATION-STANDARD.adoc did not exist. This writes
the missing standard, derived from a census of the ten affirmations actually
in the estate rather than designed ahead of them.

Records the genre triad against its two siblings (README is future/
aspirational, EXPLAINME is descriptive/mechanism, AFFIRMATION is a frozen
falsifiable instant), the three mandatory parts of trustworthiness (ground
truth not memory, a frozen anchor, a signed commit), and the two profiles
found in practice: evidential (5 repos) and modal MUST/INTEND/WISH (2 repos).

Presence is deliberately NOT gated. A mandated affirmation would be written
to satisfy a gate rather than a reader.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QMTyDv9CoJo5PfeNzyp519
@coderabbitai

coderabbitai Bot commented Sep 8, 2026 •

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

Next included review available in 39 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Advanced

Run ID: dffe571a-71f1-4b68-a593-3782a2742466

📥 Commits

Reviewing files that changed from the base of the PR and between 8f2ee50 and 80f1261.

📒 Files selected for processing (1)
  • docs/AFFIRMATION-STANDARD.adoc

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Three list items and one table cell had been rewrapped into one- and two-word
orphan lines ("be quoted on.", "explicit", "which", "those", "runs.") during
the 80-column pass. AsciiDoc renders them identically, so the defect was
invisible to `asciidoctor --failure-level=WARN`; it only shows in the source.

No wording changes. Source now wraps at 80 columns with no orphans.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QMTyDv9CoJo5PfeNzyp519
Signed-off-by: Jonathan D.A. Jewell <6759885+hyperpolymath@users.noreply.github.com>
@sonarqubecloud

sonarqubecloud Bot commented Sep 9, 2026

Copy link
Copy Markdown

@hyperpolymath
hyperpolymath enabled auto-merge (squash) September 9, 2026 00:39
@hyperpolymath
hyperpolymath merged commit cd2ab49 into main Sep 9, 2026
49 checks passed
@hyperpolymath
hyperpolymath deleted the docs/affirmation-standard branch September 9, 2026 01:26
hyperpolymath added a commit to hyperpolymath/rsr-template-repo that referenced this pull request Sep 9, 2026
….adoc to profile A (#78)

Two foundation fixes to the template. Both matter more here than in an
ordinary
repo, because every repository scaffolded from this template inherits
whatever
this one carries.

## 1. The six standards reusable pins were 43 commits behind

All six callers were pinned at `571cc734`. Measured against
`compare/571cc734...8f2ee508` filtered to `.github/workflows/`, **five
of the
six reusables genuinely changed** in that range:

| Reusable | Delta in range |
|---|---|
| `governance-reusable.yml` | +145 / -143 |
| `hypatia-scan-reusable.yml` | +98 / -22 |
| `scorecard-reusable.yml` | +92 / -9 |
| `secret-scanner-reusable.yml` | +24 / -1 |
| `rust-ci-reusable.yml` | +4 / -4 |
| `mirror-reusable.yml` | unchanged |

So this is real staleness, not a cosmetic bump — and it is very likely
how the
estate-wide startup-dead governance suite propagated in the first place:
new
repos were scaffolded stale.

**Pin target liveness.** `8f2ee508` is standards `main` HEAD, and all
six
reusable blobs were confirmed present at that ref with
`contents/<path>?ref=<sha>`. A `commits/<sha> --jq .sha` probe is not a
liveness test — `jq` prints the literal string `null` on a `gh` error
object,
so that probe reports every dead pin as alive.

**No permissions patch accompanies this, deliberately.** At `8f2ee508`
the
reusables no longer require `actions: read`:
`secret-scanner-reusable.yml`
carries a comment documenting the removal, and `governance-reusable.yml`
is
`permissions: {}`. Adding `actions: read` to the job-level blocks here
would
have been the wrong cure. The pin bump alone is the cure.

`.github/workflows/actions.lock` tracks *actions*, not reusable-workflow
refs,
and needs no change — verified by grep.

## 2. `docs/AFFIRMATION.adoc` was missing five of the twelve profile A
sections

hyperpolymath/standards#758 derives an AFFIRMATION authoring standard
from the
affirmations already written across this estate. The template's skeleton
predates it.

Added: *Companion documents and repo metadata (cross-check)*; *The
honest state
(one breath)* with its four required subsections (what is solid and how
we
checked · the honest nuance you must not lose · known-incomplete but
honestly
fenced · outstanding / weak / refuted); *Reproduce it yourself*;
*One-line
characterisation (quote this)*; *Joint attestation*.

The anchor table gained the two mandatory fields it lacked —
**Permalink** and
**Working-tree delta at verification** — moved ahead of the state
sections as
the standard orders them, and now carries the required tag ban and drift
warning.

Prose the previous skeleton got right is preserved verbatim: the trio
table,
the three moving parts, "no intentional overclaim", and the standing
invitation
to refute.

### Two things this PR deliberately does *not* change

- **Placement.** I initially recorded this file as missing and drafted a
root
copy; that was my error — it already existed at `docs/`. The standard
permits
root or `docs/`, and `README.adoc` already links
`docs/AFFIRMATION.adoc`, so
  `docs/` stands.
- **Token convention.** Only tokens already in the template's vocabulary
are
  used (`{{PROJECT_NAME}} {{OWNER}} {{REPO}} {{FORGE}} {{MAIN_BRANCH}}
{{AUTHOR}} {{AUTHOR_EMAIL}} {{PROJECT_DESCRIPTION}}`), and
fill-at-signing
fields keep the existing `<...>` convention, so
`check-no-placeholders.sh`
  stays satisfied after instantiation.

## Verification

- `asciidoctor --failure-level=WARN` clean on the edited AsciiDoc.
- All six workflow files confirmed to read `@8f2ee508` with no
stragglers.
- Both commits signed (`%G? == G`) with the `@users.noreply` author.

## Depends on

hyperpolymath/standards#758 — the standard this skeleton now conforms
to. The
`link:{std-docs}/AFFIRMATION-STANDARD.adoc[]` reference in the skeleton
resolves once #758 lands on standards `main`.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_01QMTyDv9CoJo5PfeNzyp519

---------

Signed-off-by: Jonathan D.A. Jewell <6759885+hyperpolymath@users.noreply.github.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
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