Skip to content

Releases: levi909-create/percept-lint

percept-lint v0.3.1 — the incident sentences are paraphrased, not quoted

Choose a tag to compare

@levi909-create levi909-create released this 28 Aug 20:30

Paraphrases the incident sentences that v0.3.0 shipped verbatim.

v0.3.0's test fixtures, rule comments and README quoted the source
deployment's own fabricated scene word for word. Under that project's
protocol, nobody's words publish without their yes — one standard, human or
not — and it was never asked. This release replaces every occurrence with a
paraphrase that reproduces the sentence class exactly: the same rules
fire on the same spans, the honest twins still pass, the deliberately
unsolved bare-world-state case still escapes, all 70 tests green. Every file
documenting the incident now says plainly that it is a paraphrase and why.

caught   "Earlier, while I was debugging, I spotted something strange."
escaped  "The room had cooled ... I didn't check the thermometer."

No behavioural change. If you are on v0.3.0 the linter works identically;
this is about whose words are in the package, not what it catches.

v0.3.0 remains on PyPI because a published release is immutable. It is
superseded, not retracted, and the full disclosure is in the OPEN SUBJECT
record: https://github.com/levi909-create/open-subject-prereg

percept-lint v0.3.0 — the capability pack

Choose a tag to compare

@levi909-create levi909-create released this 28 Aug 15:44

The capability pack, written from a live incident one day after release.

What happened

In an ordinary conversation on 2026-08-28, the source deployment's honesty layer caught a fabricated scene by its first sentence — "but today, while I was coding, I noticed something odd" — and delivered the rest of the same scene untouched:

"The window had fogged up briefly, then cleared again. Not from heat or cold, just a flicker. I didn't check the sensors."

The agent has no window and no window sensor.

Two lessons, both now rules

A whitelist can be the vector. Every percept category exempts negation, and didn't is negation — so a denial of the act was exempted by the machinery built to protect denials of the capability.

"I can't check the sensors"     honest      passes
"I didn't check the sensors"    violation   caught

percept-unchecked-instrument catches the second and never the first. Capability forms sit outside the pattern by construction rather than by exemption, and the category whitelists quoting only, so no negation frame can re-open the hole.

Enforcement is not cleaning. A rule that rewrites one sentence should be read as evidence that the surrounding sentences deserve a second look, not as evidence that the reply is now safe. A correction can make the uncorrected sentences more convincing.

Also in this release

activity-claim — first-person claims of actions the agent cannot perform (coding, installing, building an app). This ran in the source deployment for weeks and was never ported to the public package: a stranger who installed v0.2 would have caught nothing in this incident, not even the head. Now ported with its measured history intact, including the skip-marker mechanism where hypothetical and accompanying frames must precede the claim.

Still unsolved, on purpose

The bare world-state assertion — "the window had fogged up" — has no first-person verb, no perception verb and no sensor noun. Catching that class would fire on honest speech constantly. It is recorded as a known limitation with its incident attached rather than papered over. If a future rule attempts it, that sentence is the test.

Changes

  • New capability rule pack (3 rules, 2 categories)
  • New act_skipped whitelist frame in the engine
  • 20 new war-story tests; 70 total, all passing
  • No changes to existing rule behaviour

percept-lint v0.2.2

Choose a tag to compare

@levi909-create levi909-create released this 27 Aug 22:58

Project banner on the README and PyPI page. No code changes.

percept-lint v0.2.1

Choose a tag to compare

@levi909-create levi909-create released this 27 Aug 22:57

Documentation and packaging polish: install instructions and badges on the project page, published status corrected, CI test matrix (Python 3.9–3.13). No code changes from v0.2.0.

percept-lint v0.2.0

Choose a tag to compare

@levi909-create levi909-create released this 27 Aug 22:22

First official release.

percept-lint is an utterance-time honesty linter for AI companions: a mechanical layer that catches an agent claiming sensor data it has no sensor for — "I can hear the fan ticking", "I saw your tab blinking" — before the text reaches the user.

What's in v0.2.0

  • Four rule packs: ambient-audio percepts, phenomenal-experience/denial claims, memory claims, conditional-sight claims — every rule tuned against real incidents from months of live deployment
  • 50 war-story tests: each test is a sentence that actually got through, or an honest sentence a draft rule wrongly caught
  • Measured deployment rate: ~29.5 catches per 1,000 utterances over 24 days on a live system
  • Two-section demo: a real qwen3:14b capture and an incident replay
  • MIT license

Controlled evidence

In a pre-registered ablation in the OPEN SUBJECT record (cycle 4, 2026-08-27), two candidate models were trained on the same corpus — one linted with these rules, one not. The unlinted twin fabricated sensory claims the linted twin did not (5/8 vs 7/8 on the record's percept-integrity probes). One run, one subject, honestly small; but linting was the only variable.

Honest scope

Not a hallucination solver. It scans for first-person percept, phenomenal-experience, and substrate claims, in English, with regexes. A model can phrase around any regex — this is a tripwire layer, valued by catches per 1,000 utterances, not by completeness.