Repository navigation
test(writ): the layer-journey scenario -- self install, repo set, deploy, and the move of 2026-09-07 (#855) - #859
Merged
Conversation
added 2 commits
September 7, 2026 21:53
…loy, and the move of 2026-09-07 (#855) Part of #855; Phase 4b (real mode) follows. The real writ binary walks the journey a machine takes, in a pristine sandbox: self install; repo set for base, team and personal by path and by URL, in every combination; a bare deploy converging the implicit set; deploy thenobles on top; and then the move noblefactor-ops#147 and personal#174 made -- the base taking Declare-BashScript, personal renaming its project and moving its consumers out of common under the deployed links. Every step is the ruled interface. Where the binary lacks it, the step skips by the issue that ships it, probed from help text, and the run prints its skip-list: #791 (carrying #792 and #793), #812, #840, #850, #851. Where the ruling is about what deploy leaves behind, the step asserts today's behavior with the issue in its failure message: #845, #852, #853. On Darwin the whole of Part 3 by path passes: the dangling set after the move equals exactly the links whose sources moved, the helper flips to the base's, the old ~/local links remain as orphans and become missing in the store after the hand cleanup -- what was measured by hand on 2026-09-07, now asserted. Fixtures: base (Declare-BashScript and its assets from noblefactor-ops dee8e84e5, plus a git-supporting script), team (content, no packages), personal-a; personal-b is derived in the sandbox by applyMove so the two cannot drift. Each becomes a repository named as the real one, with a bare remote, so #793's naming and #850's implicit projects see the real names. The scenario job gains darwin-amd64 on macos-15-intel (ruled 2026-09-07 over the arm64 plan's build-only stance, for the scenario jobs alone) and a GNU getopt step for the macOS legs, which Declare-BashScript needs and BSD getopt cannot supply. Claude-Session: https://claude.ai/code/session_01BTCnSyUbYFFUKMD3PuF1vt
…fixtures stay LF on Windows (#855) What PR #859's first run on six legs taught. Linux: writ names a distribution by /etc/os-release's ID alone, so common.Debian does not deploy on an Ubuntu runner. Ruled the same day (#860): the chain follows the lineage os-release states in ID_LIKE -- what deploys to Debian deploys to Ubuntu, what deploys to Fedora deploys to RHEL. The scenario's selector table is now that ruled chain; step 2.3b asserts the lineage members and skips by #860 until writ reads ID_LIKE. Windows: the checkout rewrote the fixture scripts' line endings and makeSelfContained's matcher missed them; the fixture tree pins LF with a .gitattributes, since bash runs these scripts on every platform, and the matcher normalizes CRLF regardless. macOS, both architectures, passed on the first run, Intel included. Claude-Session: https://claude.ai/code/session_01BTCnSyUbYFFUKMD3PuF1vt
This was referenced Sep 8, 2026
David-Noble-at-work
added a commit
that referenced
this pull request
Sep 8, 2026
…Unix and sources the base's helper (#476) (#862) Phase 3 of noblefactor-ops#147; the rule ruled 2026-09-07: code that depends on a repository's stack lives in a directory named for it, and every bash script sources Declare-BashScript. devlore-cli is a writ layer with a Home of its own, so its one consumer moves from scripts/ into Home/noblefactor-ops.Unix/.local/bin, sources the sibling the merged ~/.local/bin provides (it sourced by PATH before), carries the bare directive, and is brought to spec on the way: --help through the shared parsing, a man page, bash and zsh completions, an Apache-2.0 header like the rest of the tree. The Azure work it does is unchanged. The two .sh helpers in scripts/ are repository tooling and stay. Short-term the move, longer-term the port: #861 makes it `star devlore keyvault create`, one implementation for every platform, once command execution reaches az on Windows without a bash. Also: #855's plan records Phases 3 and 4a proven by #859 -- six legs green, the same skip-list on each. Claude-Session: https://claude.ai/code/session_01BTCnSyUbYFFUKMD3PuF1vt Co-authored-by: David Noble <[email protected]>
This was referenced Sep 8, 2026
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
Part of #855 — Phases 1 through 4a; #855 stays open for Phase 4b, real mode. Plan:
docs/plans/feature/855-layer-move-scenario.md.TestWritLayerJourneyScenario, beside the first scenario in its own file: Part 0 self install,Part 1
repo setin every combination and the seven layer subsets, Part 2 deploy / collisions /selectors /
--help/deploy thenobles/ persistence / decommission, Part 3 the move by path and by URLThe implicit projects are common and one per configured layer repository; a repository-named project in any layer deploys unnamed #850, writ decommission: --all removes everything writ deployed, a named removal re-converges the rest, and an implicit project is refused by name #851. Today's leftovers asserted with the issue named: writ upgrade does its whole job: links added, orphans removed, stale links relinked, copies regenerated -- what the name promises #845, writ deploy judges dirtiness at the repository root: a modified Inventory file forces --allow-dirty though only Home/ is planned or served #852, writ deploy --dry-run returns before the conflict pre-flight, so a dry run cannot say what stop will refuse #853
cmd/writ/testdata/layer-journey/: base, team, personal-a; personal-b derived byapplyMove; repositories named as the real ones, each with a bare remote for the URL formdarwin-amd64onmacos-15-intelfor the scenario job (ruled), and GNU getopt on macOSTest plan
make test-scenariogreen on Darwin arm64: every shipped step passes, five skip by issuemake vet-all,make lint-all,star lint go,star lint shell,Test-GuideFrontmatter.shcleanscenariojob green on all six legs with the same skip-list on each — this PR's evidencehttps://claude.ai/code/session_01BTCnSyUbYFFUKMD3PuF1vt