Skip to content

Commit 1ff2314

Browse files
docs: affirm state at 465cec6 (AFFIRMATION, profile A) (#69)
<!-- SPDX-License-Identifier: CC-BY-SA-4.0 Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk> --> ## Summary Adds `docs/AFFIRMATION.adoc`, a profile A (evidential) affirmation under standards `docs/AFFIRMATION-STANDARD.adoc`. It is anchored to `main` at `465cec698878c4eaf427c073e3c5e4b21c0f5f68`. Every claim in it comes from live runs at that commit on 2026-10-07T10:27:03Z. ## Changes - New `docs/AFFIRMATION.adoc`: - Solid: `bin/jaffa check` and `compile` work on `examples/hello.affine` and produce valid wasm. A planted unresolved name is rejected. Workflow validation passes. - Outstanding, all found by this run: - the README's `jaffa eval examples/hello.affine` fails with "Unhandled effect: println"; - `just` refuses to run because both `Justfile` and `justfile` exist; - the aspect FAIL is a false positive on text that *forbids* `sorry`/`Admitted`; - `tests/e2e.sh` checks nothing (PASS=0); - the template recipes echo "passed" without running anything; - 1 non-required red check, tracked in #66. - The toolchain is recorded honestly as a local affinescript 0.1.1 build from a dirty branch. ## 📌 New pins Head SHA: **b08c8fae9ce3c8767295bfab831e603dda50e0e2**. This PR adds no pins: no action `uses:` SHAs, no `actions.lock` entries, no lockfile or container changes. ## RSR Quality Checklist ### Required - [ ] Tests pass (`just test`): `just` cannot run here (two justfiles), and the `test` recipe is a stub, as the affirmation says. The real checks that were run are listed under Testing. - [ ] Code is formatted: n/a, no code changed. - [ ] Linter is clean: n/a, no code changed. There is no real lint recipe. - [x] No banned language patterns. Only an AsciiDoc file is added. - [ ] No `unsafe` without `// SAFETY:`: n/a, no code. - [x] No banned functions. The prose *names* `sorry`/`Admitted` only to describe the scanner false positive. - [x] SPDX header present: `CC-BY-SA-4.0`. `LICENSES/CC-BY-SA-4.0.txt` exists. - [x] No secrets, credentials or `.env` files. ### As Applicable - [ ] STATE/ECOSYSTEM/META: not changed. This records state; it does not change it. - [x] Documentation updated: the affirmation itself. - [ ] TOPOLOGY, CHANGELOG, dependencies, ABI/FFI: n/a, none changed. ## Testing - `bin/jaffa check|compile|eval examples/hello.affine` and a planted-error control, run on the anchor commit (results in the file). - `bash tests/aspect_tests.sh` gives PASS=2 FAIL=1. `bash tests/workflows/validate_workflows_test.sh` rc=0. - The standards gate `.github/actions/affirmation-check/check.sh` reports "Affirmation commit signature verified with a trusted key", then "AFFIRMATION document validation passed". - The commit is `G` (signed), and its parent equals the anchor (`465cec6`). ## Screenshots n/a. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01GpUzjdhWFi26k6s7AWxYcf Signed-off-by: Jonathan D.A. Jewell <6759885+hyperpolymath@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
1 parent 465cec6 commit 1ff2314

1 file changed

Lines changed: 233 additions & 0 deletions

File tree

‎docs/AFFIRMATION.adoc‎

Lines changed: 233 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,233 @@
1+
// SPDX-License-Identifier: CC-BY-SA-4.0
2+
// SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
3+
= AFFIRMATION: JaffaScript, as of 2026-10-07
4+
Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
5+
:toc: macro
6+
:toclevels: 2
7+
:icons: font
8+
:std-docs: https://github.com/hyperpolymath/standards/blob/main/docs
9+
10+
_This file states what was true and checkable at one commit, and how it was checked._
11+
12+
[NOTE]
13+
====
14+
An affirmation is a dated declaration of what we believe is true. This one is
15+
profile A (evidential) of the
16+
link:{std-docs}/AFFIRMATION-STANDARD.adoc[AFFIRMATION standard]. It belongs
17+
with `README.adoc` and `EXPLAINME.adoc`:
18+
19+
[cols="1,3,2",options="header"]
20+
|===
21+
| File | Answers | Tense
22+
| `README.adoc` | Where is this going, and why? | future
23+
| `EXPLAINME.adoc` | How is it built, and what is the evidence? | descriptive
24+
| `docs/AFFIRMATION.adoc` (this file) | What was true and checkable at one commit? | a frozen instant
25+
|===
26+
27+
This file is optional. Delete it rather than keep it unverified, because a
28+
stale affirmation is worse than none.
29+
====
30+
31+
toc::[]
32+
33+
== What this is, and how it works
34+
35+
*What it is.* A dated, signed record of what can be claimed about
36+
*JaffaScript* at one exact commit. It makes no promises about the future; the
37+
README covers that.
38+
39+
*What the project is.* JavaScript/TypeScript-syntax AffineScript. JaffaScript
40+
is AffineScript with its `jaffa` face pre-selected. This repository carries no
41+
compiler. Its executable surface is `bin/jaffa`, a shim that finds the
42+
`affinescript` compiler and injects `--face jaffa`, plus examples and docs.
43+
44+
*How it stays trustworthy.* Every claim below comes from running the shim and
45+
the repository's test scripts in the session that wrote this file. The anchor
46+
names the exact commit. A signed git commit lands the file.
47+
48+
== The epistemic contract
49+
50+
This file records our best belief at the timestamp below. It does not guarantee
51+
correctness. It does guarantee no intentional overclaim: a recipe that only
52+
prints "passed" is reported as such, not as evidence.
53+
54+
You may conclude that:
55+
56+
* every claim below was produced by running the tool at the anchor commit, not
57+
copied from memory or from a status document.
58+
59+
You may *not* conclude that:
60+
61+
* anything is true at a later commit;
62+
* anything this file does not list passes. Silence is not a claim.
63+
64+
Anyone may challenge any claim here with a counter-example or a failing run.
65+
66+
[#verifiable-anchor]
67+
== Verifiable anchor
68+
69+
[cols="1,2", options="header"]
70+
|===
71+
| Field | Contents
72+
73+
| Repo
74+
| `hyperpolymath/jaffascript`
75+
76+
| Branch
77+
| `main`
78+
79+
| Commit (HEAD)
80+
| `465cec698878c4eaf427c073e3c5e4b21c0f5f68`
81+
82+
| Permalink
83+
| https://github.com/hyperpolymath/jaffascript/tree/465cec698878c4eaf427c073e3c5e4b21c0f5f68
84+
85+
| Verified (UTC)
86+
| `2026-10-07T10:27:03Z`
87+
88+
| Working-tree delta at verification
89+
| `clean`. A detached worktree at `origin/main`; `git status --short` was empty.
90+
91+
| Toolchain
92+
| `affinescript` 0.1.1. This is a *local build*, not a release: built from
93+
`hyperpolymath/affinescript` commit
94+
`fefac21f935551581e60915c204a49ecec1c142e` on the branch
95+
`fix/token-permissions-id-20260911`, with 35 uncommitted files in that
96+
checkout. GNU bash 5.2.37, on Debian 13 (WSL2, Linux 6.18.33.2).
97+
|===
98+
99+
[WARNING]
100+
====
101+
If you are reading this at a later commit, these claims may no longer hold.
102+
Re-run the steps in <<reproduce>> and write a new affirmation. Do not rely on a
103+
stale one.
104+
====
105+
106+
== Companion documents and repo metadata
107+
108+
[cols="1,3", options="header"]
109+
|===
110+
| Item | State at the anchor
111+
112+
| `README.adoc`
113+
| Present. Its opening paragraph matches the GitHub description.
114+
115+
| `EXPLAINME.adoc`
116+
| Present.
117+
118+
| GitHub description
119+
| "JavaScript/TypeScript-syntax AffineScript…", checked against the README
120+
on 2026-10-07.
121+
122+
| GitHub topics
123+
| 18 topics, present.
124+
|===
125+
126+
== The honest state
127+
128+
=== What is solid, and how we checked
129+
130+
[cols="2,1,3", options="header"]
131+
|===
132+
| Claim | Result | Command
133+
134+
| The shim type-checks the shipped example through the jaffa face
135+
| "Type checking passed", rc=0
136+
| `bin/jaffa check examples/hello.affine`
137+
138+
| The shim compiles the example to WebAssembly
139+
| rc=0, 315 bytes, starts with the `\0asm` magic
140+
| `bin/jaffa compile examples/hello.affine -o hello.wasm`
141+
142+
| The checker rejects a planted unresolved name (negative control)
143+
| "Resolution error: Cannot find name 'undefinedThing'", non-zero exit
144+
| `bin/jaffa check bad.affine`
145+
146+
| Workflow validation
147+
| "Workflow validation PASSED (with 20 recommendations)", rc=0
148+
| `bash tests/workflows/validate_workflows_test.sh`
149+
|===
150+
151+
=== The nuance you must not lose
152+
153+
* All the real work happens in AffineScript. These results show that the shim
154+
reaches a working compiler and that the jaffa face accepts the example. They
155+
say nothing about the compiler's own test suite.
156+
* The toolchain is an unreleased local build from a dirty branch (see
157+
<<verifiable-anchor>>). A release build may behave differently.
158+
159+
=== Known gaps, stated in the repo
160+
161+
* The capitalised `Justfile` still carries template recipes. `test`,
162+
`test-smoke`, `e2e`, `aspect`, `bench` and `lint` print "passed" or contain
163+
only `TODO` comments, and run nothing. *They are not evidence*, and this file
164+
cites none of them.
165+
166+
[#outstanding]
167+
=== Outstanding, weak or refuted
168+
169+
* *The README's `eval` example fails.* `bin/jaffa eval examples/hello.affine`
170+
(also README lines 68 and 72) ends with "Runtime error: Unhandled effect:
171+
println" and a non-zero exit. The example declares an `IO` effect that the
172+
interpreter does not handle. `check` and `compile` succeed on the same file.
173+
* *`just` cannot run here.* The root has both `Justfile` and `justfile`, and
174+
`just` refuses with "multiple candidate justfiles found". Neither the
175+
template recipes nor the small `justfile` (`check`, `run`, `build`, `hello`)
176+
can be called through `just` until one file is removed.
177+
* *Aspect test: one false positive.* `bash tests/aspect_tests.sh` gives PASS=2,
178+
FAIL=1. The FAIL, "Dangerous proof patterns found", matches lines that
179+
*forbid* those patterns: `verification/proofs/README.adoc` lists `sorry`,
180+
`Admitted` and `unsafeCoerce` as banned, and `TypeSafety.v` says "NO
181+
Admitted allowed". The scanner cannot tell a ban from a use.
182+
* *`tests/e2e.sh` checks nothing.* It exits 0 with PASS=0 FAIL=0 SKIP=0. It is
183+
still the uncustomised template.
184+
* *Red CI at the anchor.* Of 8 check runs on this commit, 6 succeeded, 1 was
185+
skipped and 1 failed: `governance / Check Workflow Staleness`. It is not a
186+
required check; issue #66 tracks it.
187+
188+
[#reproduce]
189+
== Reproduce it yourself
190+
191+
[source,bash]
192+
----
193+
git clone https://github.com/hyperpolymath/jaffascript
194+
cd jaffascript
195+
git checkout 465cec698878c4eaf427c073e3c5e4b21c0f5f68
196+
# needs an affinescript build on PATH, or AFFINESCRIPT=/path/to/affinescript
197+
bin/jaffa check examples/hello.affine # expect: Type checking passed
198+
bin/jaffa compile examples/hello.affine -o hello.wasm # expect: rc=0
199+
bin/jaffa eval examples/hello.affine # expect: Unhandled effect: println
200+
bash tests/workflows/validate_workflows_test.sh
201+
bash tests/aspect_tests.sh # expect: PASS=2 FAIL=1
202+
----
203+
204+
== One-line characterisation
205+
206+
At `465cec6`, the JaffaScript shim drives a local AffineScript 0.1.1 build to
207+
type-check and compile its example to WebAssembly, and rejects a planted
208+
error. The README's `eval` example fails, `just` cannot run because two
209+
justfiles exist, and the template test recipes are not evidence.
210+
211+
== Joint attestation
212+
213+
We assert that, to the best of our joint belief at the timestamp above, every
214+
claim in this file is true and was checked as described. The open gaps are
215+
stated, not hidden.
216+
217+
* *Engineering party (AI):* Claude Opus 5.5 (`claude-opus-5-5`) ran the checks
218+
recorded here at `2026-10-07T10:27:03Z`. It stands behind the wording above as
219+
a faithful report of those runs.
220+
* *Owner / maintainer:* Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk> signs
221+
by committing this file with `-S`. The git commit signature over this
222+
content, at the commit SHA recorded above, is the cryptographic form of this
223+
affirmation.
224+
225+
[source,bash]
226+
----
227+
git commit -S -s docs/AFFIRMATION.adoc -m "docs: affirm state at 465cec698878c4eaf427c073e3c5e4b21c0f5f68"
228+
git log --show-signature -1
229+
----
230+
231+
The file is landed by a signed git commit. Check with `git log --show-signature`
232+
that the anchor SHA above matches the parent of the commit that introduced this
233+
affirmation. If they do not match, read this file as a draft.

0 commit comments

Comments
 (0)