Releases: shangaslammi/outlint
Releases · shangaslammi/outlint
Release list
0.1.0 - 2026-08-30
Immutable
release. Only release title and notes can be modified.
Release Notes
Added
- Specification.
spec/outlint-spec.mddefines
Outlint Schema Specification v1: the document model, schema format, matching
semantics, rule identifiers and reference paths, constraints, diagnostics,
options, a normative validation algorithm, and the command-line contract. - Schema language. A top-level
outline:list ofh1rules — carrying
cardinality,strict, denial, and childsectionslike any nested rule —
or its permanent sugar: atitlematcher with asectionslist for the
common single-h1document,title: nullfor a document with noh1at
all, and baresectionswithouttitle, which impliestitle: "*"—
exactly oneh1of any text. The two forms are mutually exclusive
(schema errorconflicting-outline, anchored at the later-declared key),
and an emptyoutline: []is refused towardtitle: null, which says
what it means. Exact, glob, anchored-regex (RE2 dialect),
and*matchers with first-match-wins resolution;required/
repeat: "min..max"cardinality;strictscopes andallow: false
denials; explicit and derived ruleids with dotted reference paths. - Constraints.
one_of,any_of,at_most_one,all_or_none,
requires,conflicts, andordered, usable at the schema root or inside
any rule scope. Constraint refs may address frontmatter as well as rules:
fm.keyis presence of a non-null value,fm.key=valueis typed scalar
equality under the YAML core schema, and dotted paths step through nested
mappings. - Ordered scopes. A scope's rule list is its document order by default:
every header an earlier accepting rule matched must precede every header
a later one matched, reported asorderedwith the pair that broke.
options.ordered_sectionssets the default for every scope and a rule's
ordered: <bool>overrides it for its child scope. An explicitordered
constraint over an already-ordered scope is refused as
ordered-scope-mismatch, since it is either redundant or contradictory;
the constraint remains for partial orders and for scopes declared
ordered: false. - Options.
match_case,strip_inline_markup, and
allow_skipped_levels, normalized with defaults applied by the loader. - Document shape. The document root is a virtual level-0 header enclosing
the whole document:outlinerules describe itsh1children exactly as
nested rules describe any header's children, and every scope — the root
included — is bound per parent header. Under the sugar,titleis the rule
for the document's oneh1andsectionsdescribes theh2s beneath it —
the document's ownh2s undertitle: null. A document missing itsh1
where a title matcher is spelled or implied ismissing-title; a surplus
h1there istoo-many-sections. A top-level header deeper than the root
admits skips a level against the virtual root itself, reported as
skipped-levelonce per skipping subtree root unlessallow_skipped_levels
admits it into the enclosing scope. - Frontmatter. Presence checking (
required,allow) plus value
validation delegated to a self-contained inline JSON Schema or a linked JSON
Schema whose path is relative to the Outlint schema file, including linked
$refresource graphs. Inline references must be fragment-only. A block that
does not parse is reported with the YAML parser's own wording and position,
and a byte-order mark leading the block is dropped rather than becoming part
of the first key. Alias expansion is bounded by a multiple of the block's own size
and collection nesting by a fixed depth limit, which the value an alias
expands to counts against exactly as the written text does. A linked graph is
bounded in turn by how many$refand$dynamicRefmembers it declares in
all, counted across its documents rather than within each, because a chain of
references costs a stack frame per link however shallowly its documents nest. - YAML tag handling. In a schema file as in a frontmatter block, a
core-schema tag is honoured when it names its node's own kind and refused
when it does not —sections: !!mapover a block sequence is an error — and
a tag outside the yaml.org namespace is refused anywhere, including on the
document root. A schema file, like a frontmatter block, may begin with a
byte-order mark. - Core library (
outlint-core): a pure, IO-free schema loader, Markdown
outline parser, and validator. Schema loading collects every error rather
than stopping at the first, and never returns a partial schema. - CLI (
outlint):outlint checkandoutlint schema check, with
--schema,--format human|json,--color auto|always|never,--help,
and--version;.outlint.ymlschema discovery walking up from each input;
stdin input via-; and exit codes0(clean),1(diagnostics),2
(invocation or operational failure). Human output is reader-oriented, with
labeled source and schema locations and expected-versus-observed ordering
evidence, and deliberately has no stable textual grammar; the versioned JSON
object is the interface for scripts and integrations. - Binary distribution. GitHub Releases provide pre-built binaries for
macOS (x64 and arm64), Linux glibc (x64 and arm64), Linux musl (x64), and
Windows (x64), plus shell and PowerShell installers. The npm package has no
install-time lifecycle script: its first invocation downloads, verifies,
and caches the matching GitHub Release binary. The core library and CLI are
also published to crates.io. - Suppressions.
<!-- outlint-disable <id>,... -->before a heading and
<!-- outlint-disable-file <id>,... -->anywhere in a file. - Conformance corpus.
testdata/, an
implementation-independent fixture set driven in CI by the Rust runner and
reusable by other implementations. - Dual licensing under MIT or
Apache-2.0, and a declared MSRV of Rust 1.86 tested in CI.
Install outlint 0.1.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/shangaslammi/outlint/releases/download/v0.1.0/outlint-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/shangaslammi/outlint/releases/download/v0.1.0/outlint-installer.ps1 | iex"Download outlint 0.1.0
| File | Platform | Checksum |
|---|---|---|
| outlint-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| outlint-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| outlint-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| outlint-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| outlint-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| outlint-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |