Repository navigation
feat(install): the installers take --base, --team and --personal and never ask; install.ps1 never exits the user's session; CI runs both on every platform - #984
Merged
David-Noble-at-work merged 2 commits intoSep 30, 2026
Conversation
…ags, their exits, and their documentation The installers take --base, --team and --personal and never ask; install.ps1 stops calling exit, which closes the user's PowerShell window under both one-liners; the guide and the README show the one command. Every open question was ruled on 2026-09-30, one at a time. Claude-Session: https://claude.ai/code/session_01DuNfZFyfxBoD9pdaiDEMrY
…never ask; install.ps1 never exits the user's session; CI runs both on every platform #950: each installer registers the layers it is given, base first, with the writ it just installed: writ repo set <layer> <loc> --unattended. --base/--team/--personal in install.sh, -Base/-Team/-Personal in install.ps1, DEVLORE_BASE/_TEAM/_PERSONAL for both; a flag wins over its variable. Nothing reads the terminal; a layer not given is skipped and named, with its command, in the last lines. writ's output is left as it prints it, and the summary comes after it. install.sh refuses an unknown argument. Long options throughout, the standard script headers, Apache-2.0 on both, GH_TOKEN sent when set and its false warnings gone, armv7 gone, and the PATH advice names the directory installed into. #965: install.ps1 calls no exit. -Help returns, and Write-Fatal throws, so a failure under irm | iex or the script-block form leaves the user's session and the message on screen; run as a file it still exits 1. tar and chmod gain their $LASTEXITCODE checks. The native calls run under 'Continue', so a caller who redirects the streams (*>&1 | Tee-Object) on Windows PowerShell 5.1 no longer loses the install at writ's first stderr line. #946: the README and the getting-started guide lead with the one command for bash and PowerShell (the script-block form preferred), a table of the flags, and the steps by hand. No releases/latest, no per-program assets, no go install. The guide's repository and deploy sections stay as develop has them: the first-use scenario goes to #894's replan. The README's Noble Factor link points at the GitHub organization. CI: .github/workflows/installers.yaml runs scripts/Test-InstallScript.sh on macOS (both architectures, with macOS's own tools) and Linux (both), and scripts/Test-InstallScript.ps1 on Windows (both architectures) under Windows PowerShell 5.1 and PowerShell 7. wiki/Releasing.md says the release copies both installers. PR A's plan (#962) takes its last tick and is complete. Found and filed: #982, #983. Resolves #950 Resolves #965 Resolves #946 Claude-Session: https://claude.ai/code/session_01DuNfZFyfxBoD9pdaiDEMrY
David-Noble-at-work
deleted the
feature/950-installers-take-base-team-and
branch
September 30, 2026 01:01
David-Noble-at-work
added a commit
that referenced
this pull request
Sep 30, 2026
…tc/os-release before it closes it (#986) * fix(writ): plan for #959, writ detects the Linux distribution detectDistro closes /etc/os-release before reading it, so DISTRO has been empty on every Linux host since 57a9fd2. The plan: readDistro(path) opens, defers the close, and scans; tests that go through the file and fail first; the adopt test that pinned the bug refuses a word no host detects; PR B's owed ticks. Lane 18 of #949; #944 follows as lane 19. Claude-Session: https://claude.ai/code/session_01DuNfZFyfxBoD9pdaiDEMrY * fix(writ): writ detects the Linux distribution; detectDistro reads /etc/os-release before it closes it detectDistro closed /etc/os-release between the open and the scan, so every read failed and the DISTRO segment has been empty on every Linux host since 57a9fd2 (#288): no directory with a distribution suffix matched anywhere. It now calls readDistro(path), which defers the close straight after the open. The path is the seam the tests use: readDistro runs against os-release fixtures (Ubuntu with its ID_LIKE, Debian, a quoted ID, an unknown ID, no ID, no file), and TestDetectSegments checks DISTRO on a Linux host whose os-release carries an ID. Both failed against the old close and pass now. The adopt test that pinned the bug refused "Ubuntu", which is matched on Ubuntu now; it refuses NoSuchPlatform instead. DISTRO stays the ID field, capitalized: `debian` matches `.Debian`. The lineage, so that Ubuntu also matches `.Debian`, is #944, the next PR. PR B's plan takes its two owed ticks, the installers jobs on #984 and the site's sync, and is complete. Resolves #959 Claude-Session: https://claude.ai/code/session_01DuNfZFyfxBoD9pdaiDEMrY
2 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Lanes 15, 16 and 17 of #949, PR B of four (ruled 2026-09-29: "We'll four PRs: A, B, #959, and then C.").
--base,--teamand--personal(-Base,-Team,-Personal;DEVLORE_BASE,DEVLORE_TEAM,DEVLORE_PERSONAL) register each layer with the writ just installed,writ repo set <layer> <loc> --unattended, base first. The installers never ask; a layer not given is skipped and named last with its command. writ's output is left as it prints it; the summary follows it. Long options, the standard headers, Apache-2.0,GH_TOKENsent when set, unknown arguments refused, and PATH advice that names the directory installed into.install.ps1returns from-Helpand throws on failure, soirm | iexand the script-block form leave the user's session open with the message on screen. Run as a file, a failure still exits 1. Native calls run under'Continue', so a Windows PowerShell 5.1 user who redirects the streams keeps the install..github/workflows/installers.yamlrunsscripts/Test-InstallScript.shonmacos-latest,macos-15-intel,ubuntu-latestandubuntu-24.04-arm(on macOS with macOS's own bash 3.2 and BSD tools), andscripts/Test-InstallScript.ps1onwindows-latestandwindows-11-armunder Windows PowerShell 5.1 and PowerShell 7. Both scripts run by hand, in a scratch account.Also:
wiki/Releasing.mdsays the release copies both installers; the README's Noble Factor link points at https://github.com/NobleFactor; PR A's plan (#962) takes its last tick and iscomplete. Found and filed: #982, #983.docs/plans/feature/950-installers-take-base-team-and.md. It staysactive: its last boxes are this PR's installers jobs and, after the merge, the site's copies of both installers.Resolves #950
Resolves #965
Resolves #946
Test plan
unchanged); a URL layer;DEVLORE_BASEalone and flag over variable; no flags with and without a terminal, identical; refusals; 36 of 37 checks, the 37th a deadnoblefactor.comlink, since repointedirm | iex,-Help, a forced failure under both forms leaving the session open,-Fileexit codes; develop'sinstall.ps1ends the session on the same failurescripts/Test-InstallScript.sh, 14 of 14, andscripts/Test-InstallScript.ps1under pwsh 7, 12 of 12, on Linux arm64; the host's devlore files and the checkout untouchedRemove-Itemon directory links)star lint shell, the PowerShell gate, ASCII only, 0exitnodes ininstall.ps1, guide frontmatter; every address the documents add answers 200install.shandinstall.ps1equal develop'sTime
Computed by the algorithm of noblefactor-ops#188 at merge.