Belts as permissions: Time's gates consult the belt ledger instead of a human #92
Open
opened 2026-10-18 01:16:36 +00:00 by teahubxyz
·
0 comments
No Branch/Tag Specified
main
gh-pages
havre/catalog-18-plus-20261024
havre/byok-unfiltered-20261024
time/card-260
typy/context-words-254
typy/center-target-254
typy/inline-preview-254
typy/smooth-typing-254
typy/v0-254
modern-havre
uncensor-havre
havre-split-hide
havre-split
havre-model-sort
time/card-244
time/card-223
havre-art-and-snap
havre-remix-edit
havre-voice-in-tools
havre-asmr-mode
havre-update-pill
havre-whisper
claude/card-202-truncated-review-2wh43h
time/card-211
claude/card-198-superseded-cards-p3jqzg
havre-live
havre-open
claude/taskmaster-haggle-checkout-f57aux
havre-memory
havre-photoshoot
havre-workflows
claude/card-173-rank-spine-cards
ceo/sync-back-union
claude/card-171-router-optimization-7t2dp6
claude/router-pick-outcomes-99zcnh
time/card-48
time/card-98
time/card-170
time/card-89
time/card-160
time/card-114-gh-pages
time/card-113-gh-pages
time/card-96-gh-pages
time/card-85
havre-next2
havre-cast
time/card-82
time/card-80
time/card-79
ceo/worker-base-and-slack
time/card-87
time/card-94
chatgpt/parallel-api
time/card-95
time/card-71
mention-ledger-token
astra-board
havre-next
venture/slyng
havre-brutalist
ship-from-repo
time/card-63
time/card-60
time/card-61
No results found.
Labels
Clear labels
accessibility
andon
astra
bug
cloud
documentation
duplicate
enhancement
good first issue
help wanted
invalid
needs-human
planned
question
queued
ready
signal
signup
spec
venture
venture-batch
wontfix
Barrier affecting people with disabilities
Something isn't working
Improvements or additions to documentation
This issue or pull request already exists
New feature or request
Good for newcomers
Extra attention is needed
This doesn't seem right
Further information is requested
Time picks this up on the next heartbeat
👍 = I want the next version
early-access signup for a venture
This will not be worked on
No labels
queued
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: teahubxyz/time#92
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Depends on #85
Why. Once the dojo grades a seat on an SOP, "may this seat do X unsupervised?" is a test result, not an opinion. Belts stop being decoration and become the permission system; seats domesticate themselves by passing katas, and nobody hand-assigns rights.
Ledger.
time/belts.json, committed, written only by the dojo runner (#85) from a passing ladder:{seat: {skill: {belt, run, at, lapsed}}}. Belts are soulbound and monotonic, as in orgchain v1.14: a promotion is a new entry over the old one, never a removal. A failed re-run setslapsed: true— the belt stays on the record, the permission switches off until the seat passes again. Re-runs everyTIME_BELT_REVIEW_DAYS(default 28) or whenever the SOP changes. The operator may grant a belt by a decision logged indocs/decisions.md(the founder's prerogative), and it is markedgranted.Permissions table.
time/permissions.json: action → (skill, minimum belt). Starting rules:review.engine: an Approve on a PR under.github/time/counts inverdict()only from a seat with ≥ brown inreview; a lower belt's review is recorded as a COMMENT.review.product: Approve counts from ≥ green inreview.plan.queue: queuing cards (Astra) needs ≥ brown inmanagement(the sizing kata).steward.repair: the steward tick (#80) acts only with black inmanagement; otherwise it runs in report-only mode.escalate.tier: the automatic one-tier retry (#78) targets only seats with ≥ green inbuild.Mechanics.
belts.py:belt(seat, skill),allowed(seat, action);verdict(),plan_spec/Astra, the steward and the retry path callallowed(). Enforcement is behindTIME_BELTS=on(default off), so the first ladder run (#85) can grant the initial belts before anything is gated; with it off,allowed()logs what it would have refused.cmd_doctorprints the belt table and which gates are live.Audit. Every kata run commits its transcript next to the result, so a belt can be contested by re-running the kata; graders are deterministic where possible and never the seat under test. Later: mirror each promotion as an orgchain inscription on the seat's sat (
lineage/orgchainv1.14 belts), so the chain certifies what the ledger says.Tests. A brown-in-review seat's Approve on an engine PR merges; a green one's is recorded as a comment and does not; a lapsed black steward runs report-only; with
TIME_BELTSoff nothing is refused and the would-have-refused lines appear; a granted belt counts like an earned one.CHANGELOG line under "### Added". Docs:
.agents/skills/belts/SKILL.md, linked from AGENTS.md.DONE: PR open with the code above,
python3 .github/time/test_time.pygreen including the new checks, CI green