Repository navigation
Releases: spilloid/spoolsmith
Release list
v1.5.0 — Windows asks for the printer's own driver, and a steadier desktop
v1.5.0 — Windows asks for the printer's own driver, and a steadier desktop
When SpoolSmith sets a printer up by IP address through Windows' automatic IPP
setup, or converts a WSD queue to its verified IP endpoint, it now also asks
Windows for that printer's own driver and keeps the Microsoft IPP Class Driver
if Windows has nothing better.
- Native driver step. After the queue is created and its endpoint verified,
SpoolSmith looks for a driver registered under the printer's reported model
name, triesAdd-PrinterDriverfor it, then searches Windows Update for exactly
one matching printer driver. If one is found the queue is switched to it; the
endpoint is checked before and after, and the class driver is put back if the
check fails. The step is time-limited to five minutes and never fails the
install. The plan you confirm shows the step and the model it will look up,
but cannot name the driver, because Windows chooses it during the apply.
SpoolSmith itself downloads nothing. RAW TCP/IP plans,--offlineplans and
the catalog are unchanged. - Status and reapply accept a queue on either the class driver or the
model-named driver, as long as its endpoint is verified. Any other driver is
still refused. - A switch that cannot be restored is shown as a failure. If Windows changes
the driver and the class driver cannot be put back, the checklist now says so
with Windows' reason instead of drawing a quiet skip. - Tab works in the main window. Tab and Shift+Tab moved nowhere on most
pages; they now walk every control in order. - Steadier desktop. Checking a saved setup's status and verifying a printer
file no longer freeze the window. A failed step now says earlier steps may
already have been applied and that adding the same printer again reuses what
exists. - Your saved-setups folder is remembered. The default is the folder you last
chose; otherwiseprofilesbeside the app when that is writable, otherwise
%LOCALAPPDATA%\SpoolSmith\profiles, which is what a machine-wide MSI install
needs.SPOOLSMITH_PROFILES_DIRstill overrides it.
What is not verified
Hardware validation, 2026-10-02. On the Brother HL-L2315D PC, the native-driver step
switched an IPP queue from the Microsoft IPP Class Driver to the printer's own driver, a
re-apply recognised it as already in use, and the original WSD queue was restored. That
driver was already installed on the PC, so a real Windows Update download is still
unverified: a read-only scan found no pending driver updates, and where Windows offers
no driver for a model the step is expected to skip and leave the class driver. Check a
test page after setup.
Clean-target USB staging, cross-PC apply and physical printing remain unverified,
as in v1.4.0. The change was made at the operator's direction ahead of board
review and is a ratify-or-reverse decision for the company board; reverting it
means IPP setups keep the Microsoft IPP Class Driver, and queues already switched
to a native driver stay on it.
Validation
Full Windows Go suite, Windows and Linux vet, and the complete desktop suite
(40/40 at 125% display scaling, including a new accessibility audit of every
page) passed. A read-only adversarial review of the change found eight issues, all
fixed. The site passed a browser check at 360, 390, 768 and 1440 px with no
horizontal overflow and no WCAG 2 A/AA axe violations. Not covered: other display
scales, Windows high contrast and a screen reader; accessible names in the desktop
are internal ids rather than readable labels. See
the release verification record.
v1.4.0 — USB copies, WSD conversion, and Windows automatic IPP setup
v1.4.0 — USB copies, WSD conversion, and Windows automatic IPP setup
SpoolSmith now copies hostname-backed RAW ports, USB printer drivers, and supported
WSD queues into portable printer files.
- Hostname ports resolve to a literal IP during copy and carry a warning about
DNS or DHCP changes. - USB copies use
.usb.ssb. A bundled driver can be staged and registered before
the printer is connected. Apply again after Windows detects its USB queue;
select a differently named queue in the desktop or with--usb-queue. - WSD copy verifies the device identity and current IP. RAW TCP/IP is preferred:
the source driver is kept when appropriate, or an existing unambiguous RAW
mapping at the same IP supplies the OEM driver. Microsoft IPP Class Driver uses
a verified IPP endpoint as fallback when no usable RAW driver mapping is known. - Both desktop and CLI use the same conversion, copy, and import path. Copied
files describe the selected address and driver before installation. - Windows automatic setup discovers IPP by IP and uses Microsoft's inbox class
driver. The desktop driver picker and CLIadd <ip> --windows-driver --name <queue>share this workflow.profile capturealso accepts--windows-driver.
This does not promise automatic acquisition of arbitrary OEM drivers.
WSD conversion needs a reachable printer. IPP endpoint discovery currently checks
common paths on TCP 631; IPPS-only endpoints and LPR mapping remain unsupported.
Creating a new IPP queue requires live directed discovery. RAW transport
availability does not prove driver compatibility; check a test page after setup.
Validation: the full Windows Go suite passed before the RAW preference change;
the full install/bundle suites and Brother hardware copy/import previews passed
afterward. Windows vet, Linux build, and the Windows release candidate build also
passed. The elevated check subsequently passed OEM driver export, RAW queue
creation/reapplication, local status, and USB offline preparation using an
installed driver. Temporarily removing the source WSD queue cleared the IPP
duplicate-printer error. Windows creates a WSD-monitored IPP port; verification
now checks its IPP protocol metadata and reads the configured URL through Windows
bidirectional printer APIs. The prepared-source hardware test passed creation,
reapplication, local status, cleanup, and source restoration.
Clean-target USB staging,
cross-PC apply, and physical printing remain unverified. The full Windows Go
suite and vet passed again. See
the WSD validation record.
The Windows automatic CLI capture and elevated direct-IP preview passed against
the Brother. Final v1.4.0 CLI/GUI builds passed. The complete GUI regression suite
passed 34/34 after named-control lookups gained the same bounded rendering wait
already used for button lookups. Earlier runs exposed startup and Details-panel
UI Automation timing failures; the assertions remain unchanged.
v1.3.0 — Double-click to install
v1.3.0 — Double-click to install
A printer file now opens like a document. Double-click a .ssb, drop it on
the SpoolSmith window or on spoolsmith-gui.exe, or copy it in Explorer and
press Ctrl+V in the app. It opens straight onto one review sheet: the
printer, where the file came from, anything to know first, and the exact steps
SpoolSmith will take. Nothing changes until you confirm, once.
Desktop
- The apply sheet replaces the Review and apply page. It opens for every
change — a printer file, a printer found on the network, a saved setup, or
Remove and Change address on This PC — and prepares its preview as soon as it
opens. Details shows the full plan; More options holds offline setup,
updating an existing queue and, for removals, removing the driver. - No more "close the app and run as administrator". If SpoolSmith isn't
elevated, the Install button carries the Windows shield. Press it and Windows
asks for permission; SpoolSmith reopens on the same printer, prepares the plan
again and asks you to confirm it there. Say no and nothing changes. - Copy notes for the ticket. When a change finishes, the sheet shows each
step's result, and one button copies a plain-text summary to the clipboard. - This PC is a table. Select one or several printers and choose Copy 1
printer... or Copy N printers... (several make one.zipset), or press
Ctrl+C and paste the.ssbfiles into a folder, a share or a chat.
Ctrl+A selects every printer that can be copied. Printers SpoolSmith can't
copy are greyed, with the reason. - Open
.ssbfiles with SpoolSmith. On first run the app offers to open
printer files when you double-click them, for your Windows account only. Turn
it on or off under More. A second double-click while SpoolSmith is open
goes to the window that's already open. - Two places, not seven. The sidebar is This PC and Add a printer.
Intune packaging, Inspect, the action log and saved setups are under More. - Add a printer lists the printers on the network the PC is connected to,
scanned at startup. A different network or a single address is one click away. - The window opens at its intended size (earlier versions could open several
screens tall), with the sidebar flush to the edge.
The driver catalog is being retired
SpoolSmith copies a printer that already works; it doesn't need to look your
printer up in a model list. The desktop no longer offers the driver catalog,
"Use catalog identification instead...", or the printer-family override.
On the command line, catalog probe, catalog families and catalog-driven
install <ip> (with --force-family) still work in this release but print a
notice that they are pending deprecation and will be removed in a future
build. The notice goes to stderr; stdout and --json output are unchanged.
install --profile is not affected. Use copy and apply instead.
Notes
- Nothing about the plan, its fingerprint (
--plan-hash) or the confirmation
changed. The CLI still refuses to change Windows unless it's already running
as administrator; only the desktop offers to elevate, and only when you press
the shield button. - The
.ssbformat is unchanged (version 1). Printer files and sets from v1.1
and v1.2 open as before. - The
.ssbassociation is stored under your user account
(HKCU\Software\Classes), never machine-wide, and never for.zip. - Ctrl+C writes printer files to a SpoolSmith folder under your temp directory
so they stay available to paste; copies older than a day are cleaned up.
v1.2.0 — Printer files bring their driver's publisher trust with them
v1.2.0 — Printer files bring their driver's publisher trust with them
apply now installs a copied driver on a clean PC without a manual
certificate step. A .ssb copied from a working PC could carry a correctly
signed driver and still fail on the next machine with "The publisher of an
Authenticode(tm) signed catalog has not yet been established as trusted."
The catalog's signature was valid; Windows had simply never been told to trust
that publisher for driver installs. The fix was to export the signer
certificate and import it into Trusted Publishers by hand, which defeated the
point of a portable printer file.
Now SpoolSmith does that step itself:
- Only when Windows says the catalog is valid. SpoolSmith reads the catalog
files the driver's INF names, asks Windows to check each signature, and takes
the signer certificate only from a catalog Windows reports asValid.
Nothing in the bundle — no manifest field, no bundled.cer, no name — is
ever trusted. - Exactly that certificate. It is matched by thumbprint in
LocalMachine\TrustedPublisher, so a different certificate with the same
publisher name doesn't count. It is added straight to the store (no temporary
.ceron disk) and checked again before the driver is staged. If it is
already there, nothing changes:Driver publisher already trusted. - In the plan you confirm. The install plan has a new Driver publisher
trust line, and--dry-run --jsonapublisher_trustfield. It states the
rule, not whether this particular PC already trusts the publisher, so one
reviewed--plan-hashstill covers a whole fleet. - Never the Root store. A self-signed or privately rooted catalog is never
made to validate.
Clearer driver failures. When Windows refuses a driver package, the error now
says why — untrusted publisher, signature that doesn't validate, wrong
architecture, malformed INF, or registration failing after staging — and
includes Windows' own pnputil output instead of just "staging failed". A
pnputil result of reboot required (3010) is now treated as success.
Notes
- SpoolSmith no longer rejects an unsigned or non-validating catalog on its
own. It says so, trusts nothing from it, and lets Windows decide when the
package is staged. On 64-bit Windows that normally still means an unsigned
driver is refused — by Windows, with its reason shown. A catalog whose
signature doesn't match its own contents (evidence of modification) still
stops the install before anything is staged. - Only catalogs the driver's INF names are considered; other
.catfiles in a
payload are ignored. If the INF names several, each valid signer is trusted. - A printer file can therefore cause its driver's publisher to become trusted on
the PC you apply it to. That was always the manual fix; it is now shown in the
plan and printed during apply (signer name and thumbprint). Treat a printer
file as trusted exactly as much as the PC it came from. - The
.ssbformat is unchanged (still version 1). Plan fingerprints from
v1.1.0 don't match v1.2.0 plans for printer files with drivers: the staging
command changed. Take a new--dry-runfingerprint after upgrading. - The desktop app uses the same apply path and shows the same plan; no screens
changed.
v1.1.0 — the full UX upgrade
v1.1.0 — The full UX upgrade
Printer setup now uses one printer file from capture to deployment, several
printers travel as one ordinary .zip, copies bring their drivers, and an
unreachable printer no longer sends you back to the beginning.
One printer file, one printer set
- A
.ssbis one printer. Capture, copy, save, edit, inspect, apply and package
the same file. Saved setups can carry the same verified driver payload as
copied printers. - A printer set is a plain
.zipwhose entries are.ssbfiles at its root:
no index file, and the optional note is the zip comment. Selecting.ssb
files in Explorer and choosing Compress to ZIP file makes a valid set.
SpoolSmith refuses sets with files inside folders, non-.ssbentries, unsafe or duplicate
names, or more than 1,000 printers. copy --all [printers.zip]writes one set (default
SpoolSmith-printers-<date>-<time>.zip) instead of a folder. Duplicate names
get-2,-3suffixes, a failed printer doesn't stop the others, an existing
file is never replaced, and stopping the copy saves no set. The desktop's
Copy all printers asks where to save the set as a.zip, and its Copy results
button copies a plain-text report.apply <set.zip>walks the set: each printer gets its own plan and its own
confirmation, never one confirmation for several.--member <name>picks one
printer;--plan-hashwith a multi-printer set needs--member.
bundle inspectlists a set's printers.- On the desktop, Add a printer's Open a printer file... opens either shape;
a set opens a Printer set list where each printer is reviewed on its own. - Saved-setup Export all and Import all (
profile export-all/import-all) use
.zipsets and now carry embedded drivers. The review shows each file,
whether it carries a driver, and destination conflicts; a file or set that
changes after review is refused.
Drivers come along by default
copy,copy --alland the desktop's Copy to a file and Copy all printers
now include each printer's Windows driver whenever it can be exported. When it
can't (not running as administrator, the export fails, or the package is above
the 1 GiB limit), that printer is still saved with its settings only and the
result says why and which driver the other PC will need.- Opt out with
--settings-only, or clear the desktop's driver checkbox.
--include-driveris now unnecessary; it is accepted as a no-op with a note. - A driver exported from another PC is checked before it is installed:
apply
verifies every payload file against the SHA-256 in the bundle, and Windows'
catalog signature check gates staging throughpnputil. A payload that fails
either is not installed. The hashes detect corruption and edits, not who made
the file, so trust a copied driver as much as the PC it came from.
Upgrade note: existing .ssb bundles remain supported. Bare-JSON profiles
and JSON library exports from older releases are no longer read. Preserve them
for reference; recreate setups by copying installed queues or capturing their
addresses and driver names. Renaming the old files does not convert them.
Scripts that pass copy --all a folder should pass a .zip name instead, and
scripts that relied on copies being settings-only by default should add
--settings-only. Existing Windows printers are unaffected.
Keep working when the printer is unavailable
- Applying a saved printer automatically falls back to offline setup when the
printer is unreachable or cannot confirm its identity after retrying. The
plan explains the fallback before confirmation. A live identity mismatch
still stops setup. - Copying an unreachable queue still saves its Windows settings, clearly marks
identity unconfirmed, and reports that result for each queue in a bulk copy. - Canceled probes stop installation instead of triggering offline fallback.
Explicit--offlineremains available to skip probing from the start.
Clearer desktop and website
- A sidebar replaces the desktop's top tab strip and the tab strip nested inside
Tools. It lists every page in the order the work happens — This PC, Add a
printer, Review and apply — with Intune package, Inspect, Driver catalog and
Action log grouped below under Tools. "Catalog" is now "Driver catalog". - Intune packaging has its own sidebar page that explains what the package
contains and what it never does, instead of a button at the foot of the old
Tools tab. - The Intune wizard is now two numbered steps instead of tabs: Package settings,
then Review and export. Only "Validate and preview package" reaches the review,
and "Back to settings" discards it, so an unvalidated package cannot be exported. - SpoolSmith's own dialogs share the main window's blue header band. Message
boxes and file pickers remain standard Windows. - The main window opens at 1060×720 and can shrink to 960×640 (previously 820×620)
to make room for the sidebar. - Copying without elevation still works and saves settings only; the driver
controls say administrator access is needed to include the driver. - Cleaner review wording and readable Windows errors make the next action clearer.
- Refreshed product site, current command examples, an upgrade guide and new
screenshots captured from the real Windows app. - Intune exports use a valid settings-only
.ssbfor status, installation and
removal, and reject older incompatible CLIs. Exported files are tested with
the real CLI as well as the script lifecycle harness. - Intune packaging remains local, with optional
.intunewincreation through
Microsoft's Content Prep Tool. Upload and assignment remain manual.
Distribution and limits
The Windows x64 ZIP includes the CLI and desktop app, both Authenticode-signed,
plus README and license. A SHA-256 checksum accompanies the download.
Printer sets and default driver export are covered by automated Go tests; they
have not yet been exercised against real printers or between two PCs, and the
desktop test suite and screenshots are pending a re-run for the new set dialogs.
The desktop Inspect page reads a single .ssb; use Open a printer file... or
bundle inspect to list a set's printers. Intune packages one printer .ssb at
a time, not a set. Automatic driver downloads, USB/shared-queue setup and
IPP/LPR setup remain outside this release. Physical two-PC transfer, broader
printer hardware and display/accessibility coverage remain documented
validation priorities in the roadmap.
Validation: release record.
v1.0.1 — the Intune wizards can finally make the .intunewin
v1.0.1 — the Intune wizards can finally make the .intunewin
The desktop Intune wizard now creates the .intunewin file. Through v1.0.0
it exported the source folder and then told you to open README.txt and run
Microsoft's IntuneWinAppUtil.exe yourself — even when that file was sitting
right next to spoolsmith-gui.exe. The GUI had no code that ever looked for it.
That was a gap, not a design choice: only the CLI's intune build could run the
tool, and only if you passed both --content-prep-tool and
--content-prep-output.
Now, all three entry points behave the same way:
- Put
IntuneWinAppUtil.exein the same folder as SpoolSmith and you are done.
intune build,intune wizardand the desktop wizard find it there, export the
bundle, and createinstall.intunewinin a new<export folder>-intunewin
folder beside the export. Only that one file name in that one folder is ever
looked for — nothing onPATH, nothing searched for — so what runs is a file you
placed there or chose yourself. - The desktop review page has a Content Prep tool field and an output folder.
The tool is filled in when it is found beside the program. Export reviewed
package exports and then packages; Create .intunewin from the exported
folder retries the packaging step alone if it failed, without exporting again.
Closing the window while the tool runs stops it. intune buildneeds neither flag any more. Either--content-prep-toolor
--content-prep-outputmay be given alone, and the new--no-content-prep
exports the bundle only even when the tool is present.intune wizardshows the
detected tool in its review step and offers a path (ornone) under advanced
settings.
It fails safely. A missing tool, or an output folder inside the export, is
refused before anything is exported. If Microsoft's tool fails, the exported
folder is left complete and the tool's own output is shown. And SpoolSmith now
reports success only if install.intunewin actually exists — previously a tool
that exited 0 without producing a package would have been reported as a success
on the CLI.
Still local and manual where it always was: SpoolSmith does not download the
Content Prep Tool, sign in to a tenant, or upload or assign the app in Intune.
Notes
- The old rule that both content-prep flags must be given together is gone. An
existingintune build ... --content-prep-tool X --content-prep-output Ycommand
behaves exactly as before. - A build that previously only exported the bundle will now also create the
.intunewinifIntuneWinAppUtil.exehappens to be besidespoolsmith.exe.
Use--no-content-prepto keep the old behavior. intune wizardscripts that answer the advanced-settings questions need one
more answer (the tool path, after the export folder). The wizard requires an
interactive terminal, so this only affects scripted terminal sessions.- Verified with Microsoft's real
IntuneWinAppUtil.exe, from the CLI and through
the real desktop app. The reviewed-package screenshot on the product site is
refreshed for the new fields.
v1.0.0 — signed releases, and a pipeline that refuses to publish anything else
The Windows binaries are Authenticode-signed. spoolsmith.exe and
spoolsmith-gui.exe are signed with Azure Artifact Signing,
so Windows shows a named publisher rather than an unknown one on a tool that
asks for Administrator rights and writes to the driver store. That gap was the
uncomfortable one: SpoolSmith's own trust model already requires an Authenticode
check on the vendor driver payloads it stages, and until now it held its own
executables to a lower standard than it held its inputs.
The release pipeline fails closed. Signing is not a step that can silently
be skipped. The release workflow aborts before building if signing is
unconfigured, and fails the release if a binary comes back unsigned,
untimestamped, or signed by an unexpected certificate profile. There is no path
through it that publishes an unsigned artifact.
You can check what you downloaded without installing anything.
scripts/verify-signature.ps1 deliberately uses Get-AuthenticodeSignature
rather than signtool verify — SignTool ships with the Windows SDK and is not
present on a stock Windows 11 machine, which this project documented as a
problem with its own verification guidance and then fixed here:
Get-AuthenticodeSignature .\spoolsmith.exe | Format-List Status, SignerCertificateThe ZIP is still published with its SHA-256 sidecar, and that hash now covers
the signed archive — the binaries are signed before packaging, not after, so
the signature is inside the artifact the hash describes.
Signing does not depend on the pipeline. scripts/build-release.ps1 -Sign
performs the same signing on a Windows machine by hand, keeping this project's
rule that a release must be reproducible without trusting CI.
One detail worth knowing, because it fails quietly if you get it wrong: Artifact
Signing certificates are valid for three days. The RFC 3161 countersignature is
what keeps a release verifiable afterwards, so an untimestamped build looks
perfect on release day and starts failing on users' machines about three days
later. Both the workflow and the local script timestamp explicitly, and
verification treats a missing timestamp as a hard failure rather than a warning.
Setup, troubleshooting and the full runbook are in
docs/code-signing.md.
SpoolSmith has an icon. Both executables now carry the product icon — an
anvil coming down on a printer — so Explorer, the taskbar, Alt+Tab and every
window title bar show it instead of a generic application icon, and the
product site has a favicon for the first time. It is embedded in the
executables, so it cannot be separated from them when a release is copied or
renamed.
Why 1.0.0
No commands, options or behavior changed since v0.7.4; the icon is the only
change a user can see in the app. This release is about distribution:
continuously delivered, signed builds that a Windows admin can verify before
running them with Administrator rights. For a tool whose entire argument is
"review before you change anything," being unverifiable itself was the last
thing standing between v0.x and calling it 1.0.
Verified: go vet and the full go test ./... suite clean. The signing
pipeline signed both executables in GitHub Actions before this release, and the
signed files were downloaded and checked on a separate Windows machine: valid
signature issued to Joseph Spillers, with a timestamp countersignature.
The pipeline was also confirmed to refuse unsigned binaries. The published
assets are re-verified after upload, since CI checks what it built and users get
what was uploaded.
v0.7.4 — desktop bulk copy, bulk-transfer preview, and hardware-caught fixes
v0.7.4 — desktop bulk copy, bulk-transfer preview, and two real bugs a hardware run caught
Desktop reaches CLI parity for bulk driver export. This PC → Copy all
printers... exports every supported queue on the machine to its own .ssb
file, sharing the exact bundle.CreateAll batch implementation copy --all
already used on the CLI rather than a second one: a destination folder, an
include-driver choice, live progress, a Stop copying control that keeps
whatever already finished, and Copy results / JSON for pasting the outcome
into a ticket. Existing files are never replaced, and a filename collision is
reported before the affected printer is probed or its driver exported.
Bulk saved-setup transfer gets a real preview. profile export-all /
profile import-all take a new --dry-run on the CLI; the desktop's Saved
setups → Export/Import all JSON gained the same review step. Both list every
filename, printer setting and destination conflict before anything is
written, and closing that review dialog no longer blocks indefinitely if a
destination check or save is slow — a stalled network path used to trap the
operator with no way out short of killing the app.
A quality pass over the diff, then a hardware run on real Windows, found and
fixed:
spoolsmith copy --allcould silently swap its documented JSON result shape
for a generic error object when the output folder couldn't be created or
read, discarding the per-queue outcomes it had already built.- A single
copy's destination-filename collision was only caught after
probing the printer and, with--include-driver, exporting the driver —
copy --allalready checked first;copynow does too. - Two GUI buttons had silently regressed to "Export/Import setup JSON..."
— misleading, since they act on every saved profile in the folder, not the
one selected above them — caught only because this release's full 31-test
FlaUI suite was actually run against real Windows before shipping, not just
reviewed as a diff.
Full account, including what a static review can't catch and what only
running the app on real hardware does, in
docs/dev-process.md.
Verified: gofmt/go build/go vet/go test clean on Linux and
cross-compiled for Windows; all 31 SpoolSmithGui.Tests FlaUI tests passing
against the real rendered GUI on the kubert Windows 11 box.
v0.7.3 — UX pass, GUI/CLI polish, and bulk driver export
v0.7.3 — UX pass, GUI/CLI polish, and bulk driver export
Astra (Codex gpt-6-astra, adversarial review) ran a UX pass over SpoolSmith's
CLI and desktop GUI, primed with the operator's own product-scope record so its
recommendations stayed inside what's actually authorized. Ten findings, all
fixed:
- Command-level help was broken:
add --helpwas an unknown-flag error,
inspect --helpwas treated as the inspect target, andhelp copyprinted
the entire command catalog instead of justcopy's own syntax. Every
command now has its own scoped help, and a usage mistake shows only the
relevant command instead of the full listing. - A driver chosen for one printer could silently carry over to the next one
set up in the same session — closed for both ways it could happen:
selecting a different printer, and retyping the IP field directly. - The Intune wizard's preview built its JSON text with raw line endings
instead of the app's own CRLF helper — the same class of rendering bug this
project's dev log had already recorded once before. - Stale README claims (a leftover "v0.6.0" headline, "Intune packaging
remains outside the shipped surface" long after it shipped, "a single
spoolsmith.exe" when the release ships two binaries) are corrected. - Saved-setup dialog wording no longer lets "Remove" (a Windows mutation) and
"Save changes" (a local file edit) read as the same kind of action; empty
states now say when something couldn't be read instead of claiming there's
nothing there; and three recovery messages now match what actually failed
(a save location vs. a missing driver vs. an unreachable printer) instead
of giving one generic printer-connectivity nudge for all of them.
Two more were found by using the app, not reading it: the review screen's
confirm button read "Add printer..." — a trailing ellipsis is Windows
convention for "this opens another dialog," backwards for a button that
performs the reviewed action immediately — so the suffix is gone. And
"offline mode" had two different names in the GUI; it's now Offline
setup everywhere, defined once in the README.
Bulk driver export: spoolsmith copy --all [<output-dir>] bundles every
copyable queue on the machine in one run, skipping and explaining any queue
it can't reproduce rather than aborting the batch. GUI parity for this is
intentionally not in this release — see docs/gui-parity.md.
Everything here is copy, help text, and CLI ergonomics — the confirmation
gate, --yes/--plan-hash, and the driver-payload trust model are untouched.
Astra reviewed the diff itself for correctness in a second pass and found four
real issues before anything merged — an incomplete driver-clearing guard, a
factually wrong claim in the reworded Intune offline label, two stale test
strings, and a bulk-export test too weak to catch a real loop bug — all fixed
and reproduced against source, not accepted on the report alone. Verified for
real: go build/go vet/go test clean on Linux; both binaries cross-compile
for Windows; copy --all run against a real Brother HL-L2315D on the kubert
Windows 11 box, producing and verifying a real bundle; and all 30
SpoolSmithGui.Tests FlaUI tests passing against the actual rendered GUI on
that same box. Full record in
docs/dev-process.md.
v0.7.1 — A simpler Intune packaging wizard
v0.7.1 — A simpler Intune packaging wizard
v0.7.0 shipped Intune packaging on both the CLI and desktop GUI, but every
field was manual — deployment ID, revision, binary hash, output folder. This
release derives sensible defaults from the profile so the common case needs
almost none of that:
- The deployment ID, app display name and description are suggested from the
printer profile. The CLI binary's SHA-256 is calculated automatically
instead of requiring a separate step. An unused export folder beside the
profile is suggested rather than needing to be invented. - The desktop GUI wizard collapsed from three pages to two, with an
Advanced settings panel for updates, metadata and policy overrides when
you need them. The CLI wizard offers the same advanced prompts on request;
intune buildkeeps all its flags as explicit overrides. - Everything that made packaging trustworthy is unchanged: the CLI binary is
still verified (PE architecture, Go build identity, endpoint capability
marker), payload hashes are still pinned and re-verified at export, and
export still requires a separate, explicit confirmation after review.
Tenant sign-in and automatic upload/assignment remain out of scope.
This was built by Codex (gpt-6-astra, adversarial peer review) in an
isolated worktree, then verified independently — including two rounds of real
Windows hardware testing that caught and fixed two genuine UI-Automation bugs
before anything merged. See
the validation record.