the No-Bullshit file: what we affirm was true and checkable at this moment.
|
Note
|
Profile A (evidential) of the AFFIRMATION authoring standard. README says where this is going; EXPLAINME says how it is built; this file says what was true and checkable at one commit. It is the first affirmation for this repository. |
What it is. A dated, signed snapshot of what can honestly be claimed about sanctify-php at the commit in Verifiable anchor. It is a receipt, not a roadmap.
What the project is. A Haskell tool intended to harden PHP source: add
declare(strict_types=1), infer type hints, track taint, detect SQLi, XSS,
CSRF and command injection, enforce WordPress rules, and report as JSON or
SARIF. That is the README’s intended surface. This file reports how much of it
was checkable at the anchor, which is very little, because the library does
not compile.
How it stays trustworthy. Every claim below was produced by a command run in the session that wrote this file, or is a CI run named by its run ID and marked as CI evidence. The anchor is a full SHA. The file is landed by a signed commit.
We are fallible. This is our best honest belief, not a proof of its own correctness.
This file records the best belief at the timestamp below. The only guarantee is no intentional overclaim.
You may conclude:
-
Each claim was checked as described, at the anchor SHA.
-
Where a status document disagrees with a check, the check wins and the document is named as stale below.
You may not conclude:
-
That anything is true at a later commit.
-
That unlisted things pass. Silence is not a claim.
Standing invitation to refute. Bring a failing run or a counter-example.
| Field | Value |
|---|---|
Project |
sanctify-php |
Repo |
|
Branch |
|
Commit (HEAD) |
|
Permalink |
https://github.com/hyperpolymath/sanctify-php/tree/d7634557f35c330ca97c2ccb1fa997d4506b84f2 |
Verified (UTC) |
|
Working-tree delta at verification |
|
Toolchain |
Local: GNU grep/coreutils on Debian 13; |
Affirmed by |
Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk> (pending, see Joint attestation) |
|
Important
|
Never anchor to a tag. If you are reading this at a later commit, the claims may have drifted. Re-run Reproduce it yourself and write a fresh affirmation; do not trust a stale one. |
These disagree with this file. This file wins on every point below, because each point was checked.
-
PROGRESS-SUMMARY.adocsays "93% Complete", "Production Ready" and "Parser (100%): Complete PHP 8.2+ parser". Refuted: the parser module does not compile (Outstanding / weak / refuted (no spin)). Treat that document as stale. -
README.adocsays, correctly, that it "describes the intended capability surface" and is not proof. Its header carries both an MPL-2.0 and a CC-BY-SA-4.0 SPDX line, and an MPL-2.0 badge. The owner’s ruling (#110) is MPL-2.0 for code and CC-BY-SA-4.0 for prose, so the README, being prose, should carry only the CC-BY-SA-4.0 line. -
0-AI-MANIFEST.a2mland 18 other.a2mlfiles remain in the tree. A2ML is retired estate-wide (deed replaces it). They are stale metadata, not evidence. -
TEST-NEEDS.adoc,PROOF-NEEDS.adocandROADMAP.adocdescribe gaps honestly and agree with this file. -
GitHub repository description (set 2026-10-07) lists the intended capabilities and ends "Research/beta".
The tree holds about 6,100 lines of Haskell in 20 modules, plus a test suite
of 109 it cases. The library does not compile at this SHA: the parser
module calls eight helpers that are defined nowhere, one import names an
unexported function, and one function is declared twice. So no analysis,
transform or test in this repository has been executed end to end. Licence
metadata and most governance gates are consistent and green.
| Claim | Status | Evidence (command, and what it printed) |
|---|---|---|
Code licence is MPL-2.0, consistently |
affirmed |
|
Source size: 20 Haskell modules, about 6,100 lines |
affirmed |
|
The test suite declares 109 |
affirmed (declared only) |
|
Most CI gates are green at the anchor |
affirmed (CI evidence) |
Check runs on the anchor SHA: governance licence, security policy, code
quality, Guix policy, workflow linter, hypatia, secret scanners and CodeQL
( |
-
"CodeQL green" covers the workflow files only (
analyze (actions, none)). No Haskell code is analysed by CodeQL. -
"109 test cases" is a count of declarations. A suite that cannot compile has not tested anything.
-
The README’s feature list is aspiration. None of it is affirmed here.
-
Every analysis and transform is fenced by the compile failure itself: the tool cannot run, so it cannot give a wrong security verdict silently. The
Haskell CIworkflow fails loudly onmain.
Refuted at this SHA: "the parser is complete". The library does not build.
CI run 37603063882 (GHC 9.8.2) stops with 11 errors. Each was re-checked
locally against the source:
| Defect | Local check (and what it printed) |
|---|---|
|
|
|
The module’s export list contains no |
|
|
Also outstanding at this SHA:
-
governance / Actions lockfile verifyis red. Dependabot #112 bumpedhyperpolymath/smtp-notify-actionto v0.5.0 (c1c9fa07…) inpush-email-notify.yml, but.github/workflows/actions.lockstill records v0.3.0 (22e7bdb3…). -
Mirror jobs to Gitea, Disroot, Codeberg and Bitbucket fail (forge-side cause not re-checked in this session).
-
instant-sync,pagesandpush-email-notifyaredisabled_manually(gh workflow list --all) and were not evaluated. -
No proof obligations in
PROOF-NEEDS.adocare discharged. -
Not verified: any claim about runtime behaviour, false-positive rates, or PHP coverage.
git clone https://github.com/hyperpolymath/sanctify-php
cd sanctify-php
git checkout d7634557f35c330ca97c2ccb1fa997d4506b84f2
for s in symbol declareStrictP namespaceP useP toSourcePos ifP whileP exprStmtP; do
printf '%s %s\n' "$s" "$(grep -rnE "^$s( |::)" src | wc -l)" # expect 0 each
done
grep -nE '^transformAddTypeHints' src/Sanctify/Transform/TypeHints.hs # expect 4 lines
cabal build all # expect: 11 errors, "Failed to build sanctify-php-0.2.0"sanctify-php is a substantial but unfinished Haskell codebase for PHP hardening; at
d7634557it does not compile, so none of its security analyses has been run or verified.
We assert that to the best of our joint belief at the timestamp above, every claim in this file is true and was checked as described, with no intentional overclaim and the open gaps stated.
-
Engineering party (AI):
claude-opus-5-5(Claude Code) ran the local checks recorded here at2026-10-07T10:22:34Z, read CI run37603063882, and stands behind the wording as a faithful report of those runs. It did not build the package locally (no cabal). -
Owner / maintainer: Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>. Attestation not yet given. The owner attests with the signed commit (
git commit -S) that lands this file. Until that commit exists, this file is a draft.
|
Warning
|
Do not use |
The commit that lands this file changes only this file. Its parent may not be
the anchor SHA, because main moves under squash merges. The claims describe
the anchor SHA above, and the code at the landing commit is identical to it
unless git diff d7634557f35c330ca97c2ccb1fa997d4506b84f2 <landing> — src test
app shows otherwise.