Publish a capability manifest (2026-08-08.3) - #20
Merged
Conversation
Count It was the only one of the three apps carrying a Teaching
Sequence that published nothing about itself. The shop site's
link-contract check could verify Mallet Map and Scale Trail and had to
report Count It as an unverifiable gap — on the app whose link
vocabulary is the most fragile in the family: sixteen hand-written cell
ids that a teacher's posted assignment depends on.
/praxis-capabilities.json now declares the URL parameters an assignment
link may carry, the cell ids links are written against, the levels, the
counting systems, the evidence type, and the things this app
deliberately cannot do.
Two rules it exists to keep, both learned from failures elsewhere this
week:
* `configurableSettings` names URL PARAMETERS, not internal fields.
Scale Trail published `questionTypes` — a settings field — where
the parameter it reads is `types`, so anything building a link from
that manifest sent something the app ignored and silently received
defaults. The test here derives the list from the parser instead of
trusting two lists to stay in step.
* The served JSON is a serialized copy of src/capabilities.ts and a
test compares them. A manifest that drifts from the app it
describes is worse than none: it is confidently wrong, and
consumers act on it.
What it does NOT claim is the more careful half. No skill vocabulary is
published, because none has been agreed — the Sequence 2 draft reserves
that as an owner decision and names a candidate only. An invented id
would be consumed as though someone had signed off on it. The result
envelope is declared app-local rather than dressed up as the universal
contract, and integration stays Level 1 for the same reason.
BUILD_ID now reads from the manifest, so the footer stamp, the
published version and the README release line cannot disagree — drift
the release gate had to catch, removed rather than re-checked.
Tests 39 -> 45. Verified served at /praxis-capabilities.json with the
footer stamping 2026-08-08.3.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011raCSRMD2S7VEhWeF56oxz
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
count-it | 60bbbb5 | Aug 08 2026, 01:56 AM |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Count It was the only one of the three apps carrying a Teaching Sequence that published nothing about itself. The shop site's new link-contract check could verify Mallet Map and Scale Trail, and had to report Count It as an unverifiable GAP — on the app whose link vocabulary is the most fragile in the family: sixteen hand-written cell ids that a teacher's posted assignment depends on.
/praxis-capabilities.jsonnow declares the URL parameters an assignment link may carry, the cell ids links are written against, the levels, counting systems, evidence type, and what this app deliberately cannot do.Two rules it exists to keep
Both learned from failures this week:
configurableSettingsnames URL parameters, not internal fields. Scale Trail publishedquestionTypes— a settings field — where the parameter it reads istypes, so anything building a link from that manifest sent something the app ignored and silently got defaults (scale-trail#38). The test here derives the list from the parser rather than trusting two lists to stay in step.src/capabilities.ts, and a test compares them. A manifest that drifts from the app it describes is worse than none — it's confidently wrong, and consumers act on it.What it deliberately does not claim
The more careful half:
notation.rhythm-countingas a candidate only. An invented id would be consumed as though someone had signed off on it, so the manifest publishes an empty list and a status string saying why. A test pins that.app-local-1) rather than dressed up as the universal contract, and integration stays Level 1 for the same reason. Doc 23 lists the envelope reconciliation as separate work.Also
BUILD_IDnow reads from the manifest, so the footer stamp, the published version and the README release line cannot disagree — drift the release gate had to catch, removed rather than re-checked.Tests 39 → 45, lint and build green, gate satisfied. Verified served at
/praxis-capabilities.jsonwith the footer stamping 2026-08-08.3.Once this deploys I'll flip the site's contract from
GAPto a live check, and all three apps will be verifiable.🤖 Generated with Claude Code
https://claude.ai/code/session_011raCSRMD2S7VEhWeF56oxz
Generated by Claude Code