Repository navigation
2026.9.29.1: install configures once per scope, --reconfig, and progress that belongs to the renderer - #633
Merged
Conversation
…ess that belongs to the renderer Closes #629. Closes #632 (§1, §4; §3 through openxlings/xim-pkgindex#903; §2 unchanged by decision). Consumes libxpkg 0.0.59 (openxlings/libxpkg#44, closing libxpkg#43). Install configures once per scope (#632 §1) - A payload in the store is a HOME fact; having run its config() is a fact about ONE scope. Each scope's .xlings.json records `configured: {"<ns>:<name>@<version>": <revision>}`, a top-level sibling of `workspace` (an older client reads every `workspace` key as a target). - xim::configured_verdict, asked by the planner and the installer: a present payload is left alone only when the record names the recipe's current revision AND every ledger entry the payload owns is claimed by the scope's installed[]. No record means configure -- old homes migrate on their next install. - A closure that is configured throughout does the report, the activation and one routing-table rebuild, and says how to configure again. `--reconfig` (interface `reconfig`, protocol 1.4) runs config for the whole plan. - A revision bump reaches every scope: the scope that reinstalls the payload records the new revision, every other scope's record names the old one. uninstall (detach and delete) and a superseded unbind erase the record. - Each node that did something prints ` [i/n] installed|configured <coord>`; the interface gets `progress` phase `configure`. - The privileged-env notice is printed for a new or changed declaration only (#632 §4). SubosRuntimeUnknown's remedy says `--reconfig`. Routing-table rebuild - Kept per node: later hooks of one plan run earlier nodes' commands by name (musl-gcc -> patchelf, gcc config -> <bindir>/gcc-specs-config, ...). Measured instead where a rebuild spent its time: re-parsing the 3.6 MB home config to read `knownProjects`, and in project scope rewriting it for `lastSeen`. known_projects() now follows the file's size/mtime and takes the list from the parses that already happen; register_known_project writes at most once a day. Output (#629) - An index build script's io.write/print reach xlings through libxpkg's BuildOutput, not fd 1: one `[index] built <ns> (<n> files)` line, the script's other lines passed on, the interface's index_rebuild events unchanged (parse_bracketed_step moved to xim::index, one implementation). - index:* downloads draw no frames; a finished progress block ends with a blank line; the renderer asks the frontend's capability, so `--ui-mode cli` means no bars (palette::cursor_rewrite_allowed, the second answerer, is gone); `self update` runs its children with `--ui-mode cli`. Tests: E2E-125 install_configured_record_test.sh (C1 fails on 2026.9.28.2), E2E-126 index_build_output_test.sh (B1 fails on 2026.9.28.2), E2E-123 P2 extended; unit ConfiguredVerdict.*, ProgressOutput.* rewritten on ui::capabilities_of. Docs: interface spec 1.4, AGENTS.md, quick-start, xlings-usage skill, plan and release notes under .agents/docs/.
libxpkg 0.0.59 is the first xpkg release this repository resolves through the mcpplibs index rather than from a warm payload cache, and that index requires mcpp >= 2026.9.18.3 (E0006): the pinned 2026.8.8.4 cannot read it, so `mcpplibs.xpkg@0.0.59` reported as not found on every cold runner. - .xlings.json: mcpp 2026.8.8.4 -> 2026.9.28.3 (the index's `latest`, present for linux, macosx and windows). - XIM_PKGINDEX_REF -> 7b9bf43 in all six workflows that pin it, the first xim-pkgindex commit carrying that mcpp version. - mcpp.lock: the xpkg entry's hash as mcpp 2026.9.28.3 computes it; every other entry already matched that mcpp. Built and unit-tested locally with mcpp 2026.9.28.3: 56/56 suites.
…uild) `forceGlobal ? " -g" : ""` is a `const char*`; under `import std`, libc++ (llvm 20.1.7) deduced a wide format string for log::println with that argument and commands.cpp failed to compile on macOS. The argument is a std::string now, and so is the per-node verb. Reproduced and verified on Linux with `mcpp build --toolchain llvm@20.1.7`: fails before, builds after.
Sunrisepeak
pushed a commit
that referenced
this pull request
Sep 28, 2026
The release notes gain the two changes CI asked for (mcpp 2026.9.28.3 with the index ref that carries it; a libc++ log argument) and §4: publication checked by full download against GitHub, GitCode and the sidecars, the libxpkg 0.0.59 chain, the released binary in an isolated home, and the real home through `self update` and a sandboxed subos -- no-op install 0.72 s, `--reconfig`, update into a file with no CR/ESC, the libxpkg#43 probe, g++ and an mcpp build. The plan's implementation record names #633 and #904. Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
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.
2026.9.29.1. Closes #629, closes #632 (§1, §3 via openxlings/xim-pkgindex#903, §4; §2 left as is by decision). Consumes libxpkg 0.0.59 (openxlings/libxpkg#44, closes libxpkg#43; published to mcpp-index in mcpplibs/mcpp-index#485).
Plan and review record:
.agents/docs/2026-09-29-install-config-trigger-and-output-plan.md. Release notes:.agents/docs/2026-09-29-release-2026.9.29.1-notes.md.Install configures once per scope (#632 §1)
A payload in the store is a home fact; having run its
config()is a fact about one scope. Each scope's.xlings.jsonnow recordsconfigured: {"<ns>:<name>@<version>": <revision>}(top-level, next toworkspace).xim::configured_verdict— asked by the planner and by the installer — leaves a present payload alone only when the record names the recipe's current revision and every ledger entry the payload owns is claimed by the scope'sinstalled[]. No record means "configure" (old homes migrate on their next install).--reconfig(interface:"reconfig": true, protocol 1.4) runs config for the whole plan, as before.removeand a superseded unbind take the record with the binding.[i/n] installed|configured <coord>; the interface getsprogressphaseconfigure.SubosRuntimeUnknown's remedy now says--reconfig(glibc's config is what records the runtime).Routing-table rebuild (B2)
Deferring the rebuild to the end of the plan was rejected: later hooks in one plan run earlier nodes' commands by name (musl-gcc →
patchelf, media-crawler →uv, mcpp-vscode-clangd →mcpp, claude-llm →claude) and gcc's config calls<bindir>/gcc-specs-configby path. Measured instead: a rebuild spent ~0.08 s of its ~0.16 s re-parsing the 3.6 MB home config to readknownProjects, and in project scope rewrote it to movelastSeen.known_projects()now follows the file's size/mtime and takes the list from the parses that already happen;register_known_projectwrites at most once a day.Output (A1–A3, #629)
BuildOutput, not fd 1: one[index] built <ns> (<n> files)line, the script's other lines passed on, the interface'sindex_rebuildevents unchanged.index:*downloads draw no frames; a finished progress block is followed by a blank line; the renderer asks the frontend's capability, so--ui-mode climeans no bars;self updateruns its children with--ui-mode cli.Tests
install_configured_record_test.sh(C1–C8; C1 fails on 2026.9.28.2), E2E-126index_build_output_test.sh(B1 fails on 2026.9.28.2). E2E-123 P2 updated: index artifact draws no frame, blank line after the last frame,--ui-mode clidraws none.ConfiguredVerdict.*;ProgressOutput.*moved from the removed palette predicate toui::capabilities_of.mcpp testall suites pass locally; the non-tarball e2e manifest run locally withXLINGS_TEST_MIRROR=CN.