Skip to content

Docs/ATR 260904 prose sweep - #60

Merged
p4nda merged 17 commits into
developfrom
docs/ATR-260904-prose-sweep
Sep 4, 2026
Merged

Docs/ATR 260904 prose sweep#60
p4nda merged 17 commits into
developfrom
docs/ATR-260904-prose-sweep

Conversation

@p4nda

@p4nda p4nda commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

No description provided.

p4nda added 17 commits September 4, 2026 21:59
Four files stated that every change to a shipped skill or subagent bumps
`x-ai-tools-version`, which had already carried the technical-docs skill two
increments past the released value inside a single cycle. A host installs
released packages only, so the version the seeder compares against a live copy
is meaningful per release; the first edit of a cycle bumps it and later edits
leave it alone.

The policy keeps one home in shipped-assets.rule.md, with the seeder header and
the two asset READMEs pointing at it.
…an see

The three shape checks greped a vocabulary for a rule about meaning, and
reported correct prose on most of what they flagged across this tree: `cannot`
fired on every sentence that already named its guard, `rather than` on every
plain contrast, and `is no` on the existential the fronted-quantifier check
deliberately excludes. Each now carries a second condition -- a word stem
repeated across the pivot for the two mirror rules, an absolute in a sentence
with no subordinating conjunction for the guard rule -- which takes the tree's
`--all` report from 3610 findings to 1723 while still catching the figures the
standard names.

Checks read rejoined sentences instead of single lines, because wrapped prose
puts the guard clause of an absolute on the following line and the mirror rules
compare the two halves of a pivot. Findings gained a line number, fenced code in
a document is skipped, and `no longer` left the history check: it describes a
current state as often as a change.
…number to arity

The checker read `#` comments and whole documents only, so a Python docstring or
a JSDoc block was invisible to it -- and doc comments are an artifact this
standard covers. It now reads `//`, `/* */` and triple-quoted blocks as well,
which is what caught `shares no stem` in the checker's own source.

The rule to pluralize an indefinite object under `any` read as a grammar
preference, but `does not take any path arguments` and `does not take a path
argument` are different claims about arity, so it now sends the writer to the
signature. The paragraph on the fronted quantifier names its antecedent instead
of conceding brevity to the form it rules out.
Both files carried the figures the writing standard rules out, most often where
they made a security claim: fronted quantifiers (`names no agent`, `holds no
sudo rule`), absolutes with the guard left in the next sentence, and a
definitional negation the standard itself lists as off style.

Each rewrite states what the component does. `ai-tools-run` is agent-agnostic
rather than naming no agent, `--stop` sweeps every cgroup under the account
rather than exempting none, and the trust table's one-line summary of
`--project-remove` drops the restatement that followed it. The facts are
unchanged; the arity of each negated object now matches the code it describes.
Three slips in one session came from the same move: repairing the word the
checker flagged instead of restating the claim from the code. `grants nothing`
became `confers no authority`, which clears the grep, trades a domain term for a
legal one, and still fronts the quantifier.

The final pass now names that move and points at the code as the place a rewrite
starts, which is also what settles the questions a rule cannot answer in the
abstract -- the arity of a negated object among them.
…tions

The rule sat in two places and the universal copy -- the one a writer reads
first -- said only "resolve against the code". Read alone it licenses conforming
an invariant to whatever the code currently does, which retires a guarantee by
editing prose, and it had no answer for a refactoring, where prose describing the
target state is supposed to lead the code.

One section now carries all three directions: the code decides a description,
the invariant decides where code contradicts a guarantee, and a migration records
the gap instead of resolving it either way. The reference-docs section keeps the
three-altitude point and links here, and the final pass points here for which
side a rewrite starts from.
Every rule file carried the same two figures, densest wherever it made a
security claim: a fronted quantifier (`names no agent`, `holds no sudo rule`,
`takes no target`) and `nothing` standing in for the input that is absent. Both
hide which input a reader should go look for.

Each one is restated as what the component does -- `ai-tools-run` is
agent-agnostic, `--stop` sweeps every cgroup under the account, a skipped
provider does not contribute a fragment -- and the number of each negated object
now follows the arity in the code. Filler and one history clause went with them.
The claims are unchanged; `prose-check.py` reports none of the two default
checks across the directory.
…sentence

The hook reported a fronted quantifier the whole-file pass does not, because the
existential "there is" that excuses it sat on an unchanged line the diff never
showed.
The guides and the three man pages leaned on `nothing` and on fronted
quantifiers to describe what a command leaves alone -- `spares nothing`,
`takes no target`, `changes nothing at all` -- which tells an operator that
something is absent without saying which thing.

Each is restated as the mechanism: `--stop` covers every cgroup under the
account, `--project-unclaim --dry-run` applies none of the changes it lists, and
a `--force` run leaves every path as it found it. The exit-status tables now name
what was not stopped rather than reporting `nothing`. All three pages still
render warning-free under `man --warnings`.
`/*|./*|../*)` is a `case` branch in `ai-tools.sh`, and the checker read its
leading `/*` as a C block comment, so every line to the next `*/` -- the rest of
the file -- was checked as prose. It reported hits inside `say` and `die` strings
and inside shell code, which is how it surfaced.

A comment opener now needs a space, a second `*`, or the line end after `/*`, and
the ` * ` margin is stripped only inside a block that is already open, so a
`*)` branch stays code. Javadoc, C block comments, and `//` lines still read.
… libraries

The file headers and inline comments carried the same figures the rules did, and
the densest were the ones explaining a security property: `nothing is exempt`,
`takes no target`, `holds no sudo rule`, `the stamp gates NOTHING`. A reader met
the fact that something is absent without being told which thing.

Each is restated as the mechanism it describes -- the stop sweep covers every
cgroup in the account's slice, `ai-tools-run` is agent-agnostic, and a stamp
accessor documents an empty string as its empty result -- and each negated
object now carries the number the code has. Behaviour is untouched; every file
still parses under `bash -n`.
…ports a drop

Rewriting `carries no secret` as `contains only settings` clears the style rule
and retires the guarantee: the first says the contents and the secrets do not
intersect, the second says the contents are settings, and a setting can be a
token. Only the first justifies the 644 mode it was written to justify. The
affirmative-framing rule invites exactly that substitution, so it now carries
the bound -- carry the boundary through the edit unchanged, and keep the
negation where the positive form would denote a different set.

`--kept` is the mechanical half: it compares the two sides of a diff and reports
a security term the rewrite dropped. Disjointness is not a property a regex can
decide, so it reports and leaves the judgement to a reader.
…rlier commits weakened

The helpers, the shared libraries, the provider manifests and the two shipped
config files get the same treatment as the CLI: a fronted quantifier becomes
`does not <verb>`, and `nothing` gives way to the input that is absent.

The second half is a correction. Rewriting `carries no secret` as a positive
statement over a different set -- `holds only code`, `holds only patterns`,
`contains only settings` -- reads better and stops justifying the 644 mode the
sentence was written to justify, because code and settings can both contain a
token. Those five now state the boundary normatively: the file must not hold a
secret. `prose-check.py --kept develop` does not report a dropped term across the
branch, and every file still parses under `bash -n`.
Same pass over `install.sh`, the spec and its container files, the Makefile, and
the SELinux install and AVC scripts: a fronted quantifier becomes `does not
<verb>`, and `nothing` gives way to the absent input -- no rule matched, no
entrypoint to label, an empty ausearch result.

Five comments in `install.sh` justified a `644` mode with `carries no secrets`;
those keep the boundary and state it normatively. `prose-check.py --kept develop`
stays quiet, and both shell entry points parse under `bash -n`.
The suite's headers describe what each case proves, and leaned on the same two
figures to do it. Each now names the thing that is absent -- the process that is
not signalled, the path that is not touched -- so a reader learns which input a
case withholds.

Two lines quote runtime output verbatim and carry `prose-check: allow`. Comments
only: every file parses under `bash -n`, and shellcheck stays quiet at
error severity. The suite itself needs root, so it has not been run here.
… and the shipped skills

The last file types the earlier passes missed: the policy `.te`/`.fc` comment
blocks, the two handback Python files, `CONTRIBUTING.md`, and the other two
shipped skills. The tree is now clean on both default checks.

One of these was a correction. The governance framework's clause on
self-verification said that verification a system performs against a key it can
reach `provides no assurance`; rewriting it positively inverted the clause into
its opposite. It reads `does not provide assurance`, and the pre-commit hook's
note about a backlog of findings goes with the backlog.
`ai-tools --stop` accepts `--dry-run`, `--yes`, `--force` and `--all`; the README
had it accepting no arguments at all, where the true claim is the narrower one
it replaced -- no path and no authorization input.

The session-end sweep reaches a SUBSET of what the per-turn hooks reach, since
both pass the same chown validation and the sweep also skips the heavy trees.
Three copies said the two reaches were equal. The updater's stamp is described
by what reads it rather than as `advisory`, and the relabel verdict table gets
back the consequence its third column had.
@p4nda
p4nda merged commit e9b5d55 into develop Sep 4, 2026
6 checks passed
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.

1 participant