Every patch verb outside the series work is real. check reads the working
tree through checkpatch's stdin, which is the only way it can read one,
since --git with no revision dies; format puts --fix-inplace's output back
into the tree after setting the uncommitted change aside, and restores it
if the fix does not apply; commit and create sit on git; create writes a
mail-formatted patch, because git send-email refuses a bare diff with "No
subject line"; submit splits get_maintainer.pl's roles into To and Cc,
prints the command line it is about to run, and only sends when --dry-run
is off; update re-rolls a patch by renaming it and does nothing at the
revision it is already at.
git.rs grows the plumbing those verbs stand on: diff_unstaged,
format_patch, apply, commit, rev_parse. apply feeds the patch in on stdin,
so a fixed patch stays in memory until it is known to apply.
tests/ holds a fixture kernel tree, so the suite needs no kernel tree, no
network, and no configured git send-email. The two tests that do want the
host's own checkpatch and get_maintainer are ignored unless asked for, and
one of them earned its place immediately: checkpatch's --file means "this
argument is source code", so checking a patch with it reported a dirty
patch as clean, 8004 lines and no errors. Patchfile mode is checkpatch's
default and the path now stands alone.
patch check also takes --rev, which is how a committed range gets checked.
Checked with cargo fmt --check, cargo clippy --all-targets -- -D warnings,
cargo test, and cargo doc --no-deps.
ROADMAP.md tracks the work past the scaffold: closing the loop, patch
series with cover letters, doctor, config and init, more quest sources,
more checks, review tracking, and packaging. Its Not planned section
records the refusals, so what spectral will not do is as reviewable as
what it will.
Far specifies two front ends over the same verbs: a TUI session view, and
spectral auto for the mechanical half of the loop. Both need the verbs to
exist first. The TUI's real cost is that the verbs block and a TUI cannot
block its render loop, so it needs the command modules to grow a progress
story they do not have yet.
The Not planned entry that refused a TUI outright is narrowed to a GUI or
web UI, since a TUI is now on the roadmap. Everything the TUI can do
still has to stay reachable as a typed command.
Also links the roadmap from the README's Where to pitch in section.
Rewrite the README and the source comments in a plainer register.
The README had picked up the usual generated-prose tics: seventeen em
dashes, inline bold headers over every work item, signposting lines like
'the two scripts are called out because it matters', and a two-word
'Twenty of them.' dropped in for emphasis. Replaced with commas, real
section headings, and sentences that carry their own subject.
Also fixes the two rustdoc warnings cargo doc was emitting: <NAME> and
<N> in the subcommand doc comments were being parsed as unclosed HTML
tags. cargo doc is clean now.
States the scaffold status up front, documents what each verb shells out
to and why those tools come from your tree rather than being vendored, and
ends with a map of the 20 stubs grouped by how much they unblock.
Add the spectral command tree -- kernel quest/test and patch
check/format/commit/create/submit/update -- with every verb wired through
main to a todo!() body, plus the pieces they will share:
- config: resolve the kernel tree from $SPECTRAL_KERNEL, falling back to
~/.spectral/linux, patches under ~/.spectral/patches, and confirm a tree
really is one before anything uses it
- git: a thin wrapper over the git binary, currently only run
- error: one thiserror enum, converted once in main
- patch/checkpatch and patch/maintainers: seams around the tree's own
scripts/checkpatch.pl and scripts/get_maintainer.pl, so spectral never
carries a stale copy of the kernel's rules
20 functions are todo!(); the #[allow(dead_code)] sites mark the items
that are unreachable only until their caller is written. fmt, clippy -D
warnings, and test are all clean.