Skip to content

Retire @async reserved syntax; add spec-census facts file - #6

Open
Disentinel wants to merge 1 commit into
mainfrom
claude/sleepy-faraday-2bjs5w
Open

Disentinel wants to merge 1 commit into
mainfrom
claude/sleepy-faraday-2bjs5w

Conversation

@Disentinel

Copy link
Copy Markdown
Owner

Summary

This change removes @async from reserved syntax and updates the specification coverage model to track duty acceptance and coverage inheritance. The parser no longer reserves @async as a keyword, allowing it to be treated as an unknown temporal marker and refused like any other. A new spec-census.rofl facts file is introduced to track specification coverage checks.

Key Changes

  • Parser: Removed the reserved syntax check for @async in src/parser.ts. The marker is now rejected as an unknown temporal marker rather than as reserved syntax.

  • Specification Coverage Model (rules/spec-coverage.rofl):

    • Added inherits_cover and covered relations to track coverage inheritance through duty restatement
    • Added accepted_shortcut and idle_shortcut relations to handle accepted gaps and idle coverage
    • Restructured coverage logic to distinguish between uncovered duties with accepted gaps vs. those without
    • Updated line numbers and clause counts reflect the expanded model (44 lines, 25 clauses vs. 36 lines, 21 clauses)
  • Checks Registry (facts/checks.rofl):

    • Renamed check world from async_reserved to async_refused to reflect the new semantics
    • Updated check file reference from examples/checks/async-reserved.rofl to examples/checks/async-refused.rofl
    • Added new checks for rules_spec and async_refused worlds
  • Examples:

    • Removed examples/checks/async-reserved.rofl
    • Added examples/checks/async-refused.rofl with updated documentation explaining that @async is no longer reserved
  • Documentation:

    • Updated LIMITS.md to clarify that @async is not reserved for future use
    • Updated README.md temporal marker documentation
  • Facts Files:

    • Added new facts/spec-census.rofl (285 clauses) to track specification coverage census
    • Updated facts/spec.rofl with expanded coverage tracking (212 clauses vs. 178)
    • Updated facts/findings.rofl with new findings related to coverage model changes
    • Updated facts/goldens.rofl with new golden state hashes reflecting all changes

Implementation Details

The coverage model now tracks:

  • Which duties inherit coverage from restated duties
  • Which duties have accepted gaps (with reasons)
  • Which duties are covered either directly or through inheritance
  • Distinction between open gaps (uncovered, unaccepted) and accepted gaps

The async_refused world validates that the parser correctly rejects @async as an unknown temporal marker, maintaining the prohibition against using it while removing the special reserved syntax status.

https://claude.ai/code/session_01WcB3U4mr6HkxfJgbwMNgUY

`@async` had its own branch in `temporal()` answering `'@async' is reserved
syntax, not in v0`. That message says one thing beyond the refusal: the word
is being held. The effects executor is not going to be built, so it was held
for nothing.

The branch is gone: `@async` is refused by the single arm that refuses every
unknown marker, and the temporal set is exactly the three the section 1.1
grammar always listed -- the reservation was never in the production, only in
the prose.

START.md is not edited, per the tree's own idiom: section 8 was retired item
by item by LIMITS.md through `amends[map]`, not by deletion. `l_no_async` now
amends both sentences that were about the WAITING rather than the absence --
`s_async_reserved_rejected` (3.3) and `s7_no_pretend_async` (7) -- and says
the stronger thing: not reserved, not a marker, refused like any other
unknown one.

The world survived the feature and was re-pointed rather than deleted. A
superseded duty keeps its guard link while dropping out of `live_duty`, so
`c_w_async_reserved` would have gone on resolving while standing behind a
sentence nobody owed; it guards `l_no_async` now, which took the LIMITS.md
bullet from uncovered to covered. Renamed to async-refused.rofl because
`reserved` had stopped being true of it.

superseded 8 -> 10, live 124 -> 122, uncovered 102 -> 101, `guarded_by`
unchanged at 17, prohibitions with no mechanical check still 0. 94/94 worlds,
ts only -- the release binary is not built in this container.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WcB3U4mr6HkxfJgbwMNgUY
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.

2 participants