Scope note up front: this repo has 100 HTML files (50+ pages, about 20
interactive demos) and a 730-line CLAIMS.yml. This pass checked every
recheck_after date, ran a corrected forbidden-copy scan across all 100
files, confirmed the kaspa.org marketing-source ban is respected,
spot-verified the highest-risk numeric/status claims (Toccata DAA score,
finality/pruning depths, DAGKnight status), and ran a live primary-source
verbatim check on the KCC-0020 quote dispute, the exact class of thing
that broke silently on this site before. It did not re-check every number,
date, and quote on every page individually; see "Not checked" at the
bottom.
None found.
None found among the claims checked.
None found. No recheck_after date in CLAIMS.yml has passed. Today is
2026-08-23; the file's own recheck_after is 2026-08-30, and every
per-claim recheck_after is today or later.
CLAIMS.yml line 574, kcc_conventions.forbidden_copy, is silently broken
by unquoted YAML. The line reads:
- issue #11 is still openYAML treats a # preceded by whitespace as a comment marker even inside an
unquoted plain scalar. yaml.safe_load on this file parses that list entry
as the single word issue, with #11 is still open silently dropped as a
comment. Confirmed directly:
python3 -c "import yaml; print(yaml.safe_load(open('CLAIMS.yml'))['claims']['kcc_conventions']['forbidden_copy'])"
shows 'issue' in the list, not 'issue #11 is still open'.
If scripts/check-status-freshness.py does a substring match against this
list (per its own description in AGENTS.md: "fails ... when any
forbidden_copy phrase appears in a page's visible text"), the literal word
"issue" is currently a banned phrase. Rechecked after glossary.html,
kaspa-claims-checker.html, and kaspa-developments.html were retired to
redirect stubs: a scan of the corrected phrase against all 101 HTML files
now finds the bare word "issue" on 13 pages: status.html,
build-on-kaspa.html, about.html, chain-comparer.html, start-here.html,
toccata-explained.html, why-kaspa-matters.html, crypto-from-scratch.html,
kips.html, sources.html, design/patterns.html, demos/emission-schedule.html,
and demos/supply-split.html. kaspa-claims-checker.html and
kaspa-developments.html no longer trip it themselves; their content moved
into status.html's #claim-fact-check section, which does trip it. Several
of these are the pages that correctly discuss KCC issues #11 and #14. This
needs quoting (- "issue #11 is still open") so the real forbidden phrase
is the intended sentence, not the bare word. Left unfixed per instructions;
flagging only.
With the phrase corrected in memory to its evident intent, a full scan of
every forbidden_copy entry across all 101 HTML files returned zero
hits. Nothing on the site currently uses a banned phrasing.
github.com/kaspanet/kccs/issues/14 was loaded directly in a browser, not
curl, and read end to end, including all comments, to check the quotes on
demos/supply-split.html, kips.html, design/patterns.html, and
build-on-kaspa.html against the actual thread. Result: holds.
- Status: Open on GitHub, matching every site page's claim.
- Comment count: 4 (Manyfestation, michaelsutton, Manyfestation again, ShawnPearce), matching CLAIMS.yml's "now with 4 comments."
demos/supply-split.htmlline 216 quotes Manyfestation verbatim: "...the combination of extended state, alongside token-specific entry points, allows for various use cases which are not only write-once, nor only for a singleton token..." An exact match to the GitHub comment, correctly attributed to Manyfestation, not Sutton, who quoted the same text back inside his own reply before adding his own point; that reply structure could easily get misattributed by anyone skimming the rendered page.- Line 220's Sutton quote, "indeed renders the token as temporarily non fungible," is an exact match, word for word, including the informal "bcs" and lowercase "i".
- Line 224's Sutton "wrong pattern" quote uses a mid-quote ellipsis in place of "Ie info that is meant to testify on past events and not influence future fungibility." That is a legitimate elision, not a silent smoothing; the words on either side of the ellipsis are exact.
- Manyfestation's reply, "I agree that kind of pattern should either be defined in the standard or implemented in a non state storage," is an exact match. The site drops the trailing parenthetical "(maybe the payload, as you once suggested)," which does not change the meaning of the sentence quoted.
kips.htmlline 212's account of ShawnPearce's August 23 comment (payload committed unconditionally by the v1 sighash, borrowed receive lets a non-owner control the payload) matches the actual comment's substance closely. ShawnPearce's real comment runs longer and covers additional ground, a live wallet payload-signing bug and a KIP-12 MUST clause, that the site correctly leaves out as excess detail rather than misrepresenting.- Separately confirmed
github.com/kaspanet/kccs/issues/11is Closed, matching CLAIMS.yml and the site's account. status.html's#claim-fact-checksection (the page that absorbed kaspa-claims-checker.html's tables) carries a paraphrase of this dispute rather than a direct quote, and the paraphrase holds: "issue #14... its transfer-consolidation rule and its extended-state update entrypoint contradict each other... Co-authors defend one pattern behind this as intended, a frozen or blacklist flag, but conceded a second pattern... is a wrong one needing a spec fix. The reporter's concern stands unwithdrawn, and the issue remains open." Its one direct quote, KaspaCom's "partially aligned, not fully conforming," is an exact substring of issue #11's body text on GitHub.
Every .html file was grepped for href="https://kaspa.org... and
href="https://www.kaspa.org.... The only hits are in sources.html line
497, inside an HTML comment tagged kaspa-org-callout that explains these
pages are excluded, not recommended as sources, and captioned "Named here
only to explain why they are not accepted as sources." No page cites
kaspa.org marketing pages as a source for a claim.
Compliant.
- Toccata activation DAA score 474,165,565 appears identically in about.html, status.html (3 times), index.html, build-on-kaspa.html, kaspa-origin-story.html, skeptical-case.html, toccata-status.html (3 times), what-is-kaspa.html (twice), toccata-explained.html, why-kaspa-matters.html (twice), kaspa-mining.html (twice), sources.html, demos/dag-time.html (3 times), and demos/utxo-vs-accounts.html. No conflicting figure found.
- Finality depth 432,000 blocks: demos/confirmation-risk.html and demos/node-cost.html agree, matching the anchor fact.
- Pruning depth 1,080,000 blocks: demos/node-cost.html (4 occurrences), matching the anchor fact.
- KIP-2 (DAGKnight) status: kips.html lists it Proposed in the table and again in prose ("has been Proposed for years and stays Proposed: internal devnet only, no testnet, no date"), and toccata-status.html correctly labels TN10/TN12 testing as "Testnet," not live. No page claims DAGKnight is running on mainnet.
- Fabricated example labeling:
demos/covenant-breaker.html's "This vault holds 10,000 KAS" example is immediately preceded by<p class="fictional-note">A worked example. Nothing here is on a real blockchain.</p>, correctly labeled. No "KAI" token example currently exists anywhere on the site; that prior defect example was not reproduced, either already fixed or never present in this snapshot.
All three are now <meta http-equiv="refresh"> redirect stubs (tagged
noindex, canonical pointing at the merge target). glossary.html points to
what-is-kaspa.html; kaspa-claims-checker.html and kaspa-developments.html
both point to status.html. kaspa-claims-checker.html's stub text says its
four claim tables "merged into" status.html at #claim-fact-check, which
matches what is actually on status.html now (see the KCC-0020 paraphrase
check above). No dangling internal links to the old paths were checked for
in this pass; that would need a separate sweep of every page's nav and
in-body links.
skeptical-case.html's security-budget paragraph reads: "At $0.02934513
per KAS (CoinGecko, fetched live), that's about $58,631 a day paid to
miners." The file contains zero fetch( calls; grepped directly. This
number is a hardcoded, static figure, not something the page reads from
CoinGecko when a visitor loads it. The only date evidence anywhere in the
file is an invisible <meta name="dateModified" content="2026-08-22"> in
the <head>; the visible prose carries no date at all next to the figure.
This appears to be inherited phrasing rather than an invented one: CLAIMS.yml's
own fees_vs_subsidy_2026_08_22 entry uses nearly identical wording, "At
$0.02934513/KAS (CoinGecko simple price, fetched live)," to describe how
the number was originally sourced by whoever ran the analysis on August 22,
meaning fetched live at research time, not simulated or guessed. Read that
way the claim is accurate. But nothing on the rendered page tells a visitor
which reading applies, and the page sits right next to an embedded iframe
(/demos/attack-cost) that does perform genuine live fetches with its own
labeled fallback text, which raises the odds a reader assumes the same is
true of the number in the surrounding prose. This is exactly the failure
shape flagged as high-risk: a "live" claim next to a number that does not
move. Recommend either dropping "fetched live" for something like "CoinGecko,
read August 22, 2026" or adding a visible date so the static nature of the
figure is not implied to be dynamic.
demos/live-network.html, toccata-explained.html, kips.html,
argent-explained.html, and demos/emission-schedule.html all call
fetch() against api.kaspa.org and GitHub raw/API endpoints
client-side. The task requires confirming these actually perform the fetch
in a browser on the page's own origin, not via curl, since curl has no CORS
policy and that is exactly how a prior false "live" claim shipped here.
This could not be done cleanly this session. The Chrome browser instance is
shared with other concurrently running agents also editing this repo, and
every tab driven for this check, including a dedicated one on port 4215,
the port assigned for this task, got repeatedly re-navigated out from under
this session by another agent's automation, sometimes within one to two
seconds, including mid-wait and once mid-script during a
javascript_tool injection ("Inspected target navigated or closed"). One
clean load of demos/live-network.html did show genuine loading-state text
("Reading the first blocks…"), but a network-request read scoped to that
tab showed zero api.kaspa.org requests even after that load, and the tab
was lost to another agent's navigation before a longer observation window
could be attempted.
What static code review alone can confirm: the fetch calls target real
endpoints directly (https://api.kaspa.org/info/blockdag,
https://api.kaspa.org/blocks/{blockId}), not a proxy or mock, and the
page carries honest-failure language ("If the API can't be reached, this
page says so instead of faking it") rather than a hardcoded success path.
That matches the live-fetch pattern AGENTS.md documents as intentional
sitewide: stamped baseline, live fetch on load, table replaced, baseline
left standing on failure. But no clean network trace proving the fetch
actually completes and populates the page in a live browser was captured
this session, so the "live" label on these five surfaces should be treated
as unconfirmed by this pass, not as disproven.
Given the size of the site, this pass did not individually verify every
number, date, and quote on: the remaining roughly 45 non-demo pages
(kaspa-mining.html body beyond the DAA score, glossary.html,
kaspa-mining-cycle.html, kaspa-tps-explained.html,
kaspa-confirmations-finality.html, coin-atlas.html, adoption-metrics.html,
and the rest of the long tail); the roughly 15 remaining demos beyond
covenant-breaker, supply-split, live-network, node-cost, and
confirmation-risk; or chain-comparer.html's full 20-chain dataset against
each chain's own primary source. Only Kaspa's own figures were
cross-checked here; Bitcoin, Litecoin, Monero, Bitcoin Cash, and the 15
unsourced PoS/BFT chains' emission and hashrate figures in
data/l1-chains.json were not independently re-verified this pass. A full
sweep of those surfaces needs a follow-up pass, ideally with exclusive,
non-shared browser access so live-fetch claims can actually be confirmed
in-browser.