Skip to main content

owhile

Profile-driven content gates. Every audience rule lives in a JSON profile; the gate code never changes. The same code gates a pre-reader safeguarding bank and an adult compliance bank without a line differing — only the profile does.

Built for Owhile, where creators publish interactive experiences.

Install

pip install owhile
owhile --version

The shape of it

owhile init                                   # write a starting profile
owhile profile check                          # is it valid, and could it be listed?
owhile template --mechanic reflect --out sheet.csv
owhile build --sheet sheet.csv --out bank.ndjson
owhile check --report report.json

The runbook, written to be handed to a coding agent, is at https://owhile.vercel.app/creators/start.md.

What it actually does

Five gates run over every item, and each reports pass, fail or could_not_run — so a gate that could not run is never mistaken for one that passed:

  • role_totality — every scalar in an item has a declared role. A field nobody declared is a finding, not a shrug.
  • invariants — your structural rules, declared per mechanic and validated at load, so a rule the gate cannot execute is refused before any content is read rather than crashing once per item.
  • permissions — an audience may only use the mechanics it permits.
  • budgets — reading length, counted in grapheme clusters rather than code points. A cap calibrated on English is a much harsher rule in Devanagari.
  • resources — a cited helpline or policy reference must match your registry, and a correct citation is matched at its own full length before any hunt for a wrong one.

The report binds its verdict to a digest of the content and to a digest of the code that produced it, so a verdict cannot outlive either.

Declared, never inferred

The design rule the whole thing turns on. Meaning is declared in your profile and never guessed from prose: which side of a choice is affirming, which text is a myth being struck rather than an assertion, how old your youngest reader is. Earlier code inferred the affirming side by regex-matching an English label and painted the negative side green on sixteen live consent scenarios. A declared field cannot be wrong that way — it can only be absent, and absence blocks.

min_age has no default for the same reason. A profile without one is valid and its content gates clean; it is listing that is blocked. Silence is never read as adult.

Status

0.1.0, and honest about it. The gates, the profile loader, the authoring loop and the report format are built and tested — 193 tests, mutation-tested, and proven across a 29,365-item corpus in two opposite audiences. The owhile command wrapping them is new in this release and has had far less use than the code underneath it. Listing on Owhile is not open yet: the eligibility rule and the digest binding are decided and enforced, and there is no submission path at all.

Known limits are documented rather than hidden, at https://owhile.vercel.app/creators/gates.md.

Licence

Proprietary. All rights reserved.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

owhile-0.1.0.tar.gz (39.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

owhile-0.1.0-py3-none-any.whl (40.9 kB view details)

Uploaded Python 3

File details

Details for the file owhile-0.1.0.tar.gz.

File metadata

  • Download URL: owhile-0.1.0.tar.gz
  • Upload date:
  • Size: 39.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for owhile-0.1.0.tar.gz
Algorithm Hash digest
SHA256 bec6967360157b13e46a4a8966354fa8ecffd587de2f844c98d82342962aff73
MD5 14b58ea2087ffecd63d56a3b23335709
BLAKE2b-256 4eeca7769b52485ddf68f5978b1304257971b034481686e265e89c08ebfeacf2

See more details on using hashes here.

File details

Details for the file owhile-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: owhile-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 40.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for owhile-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2591aeef349ddbf321d02bbb471091e1e0533fa8a104b5f36fe8b8754c3303ed
MD5 cb202496edf8a40758e1e62042914b32
BLAKE2b-256 337c245abe71558d0f99d32d7b943d21b3203199ec3174e481dc9ff581b1f416

See more details on using hashes here.

Release history Release notifications | RSS feed

0.12.0

2 files

0.11.0

2 files

0.10.0

2 files

0.6.1

2 files

0.5.0

2 files

0.3.0

2 files

0.2.1

2 files

0.2.0

2 files

0.1.4

2 files

0.1.2

2 files

0.1.1

2 files

This release

0.1.0 This release

2 files

0.0.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page