Repository navigation
Content: personalspace install runs the template's own bootstrap (#377) - #412
Conversation
5b09bae to
207ff03
Compare
agentrozjedemeai
left a comment
There was a problem hiding this comment.
@immakermatty Exact-head QA on 207ff03 (base 2727629): CHANGES_REQUESTED.
Blocking regression: this PR silently reverts the already-merged #411 (its merge commit IS this PR’s base). In src/launchpad/apps-view.ts, appsHomeParts no longer accepts the verified personal holder or offers new-personal-module; an empty Personalspace Workspace disappears, and the personal section is renamed back to Osobní. src/launchpad/catalog-panel.ts drops the personal "+ Nový modul" tile; src/launchpad/prompts.ts and server.ts remove the holder-gated new-personal-module route; ui.ts removes the holder refresh. docs/decisions.md also deletes #411’s accepted 2026-10-13 addendum and its evidence. Thus the holder cannot found their first personal module from the Apps home even though #411 and #399 are merged. The PR description says Organization install is unchanged and does not disclose this product removal. Restore #411 behavior, decision text and its regression tests; keep the #377 bootstrap changes separate. Then rerun checks and request review on the new head.
Evidence: diff against base #411; isolated checkout bun run check:static PASS, four focused suites 62 PASS/0 FAIL; git diff --check PASS; CI 38553794061 green on this head; zero review threads. Green tests cannot cover behavior whose tests this PR deleted. Template #4 is separately approved but remains the merge-order dependency. No merge performed.
A Personalspace created by lazurio personalspace install kept the template's
placeholders (owner-github-username, Owner Display Name): the install never
ran the template's bootstrap, so its CI checked the instance as the template
and its live doctor reported the real owner as a forbidden collaborator.
Matěj's decision of 2026-10-14 ("S gbrainem, podle šablony"), decision F9's
addendum of 2026-10-14: for a Personalspace this run has just created, the
install runs the template's own `bun run bootstrap -- --login <login>
--display-name <profile name, else login> --apply` in the fresh, clean,
marked checkout. The template names the owner and creates and clones the
private <login>/<login>-gbrain (root decision 0046); the gbrain CLI is not
installed. The new push step commits exactly the files the template's manual
names and pushes them to main of both new repositories. Bun and the
operator's Git identity are checked before anything is created. A failed
bootstrap leaves the repository created and unpushed, with the template's
reason and the next step. An existing Personalspace is never bootstrapped:
one that still holds the placeholders succeeds with the warning
personalspace-placeholders and the next step (the bootstrap in a task
worktree and a pull request).
The Platform writes neither declaration; the template's bootstrap is behind
one injectable seam (src/content/personalspace-bootstrap.ts). The Launchpad
shows the two new steps only where the Personalspace is created.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…has none Nothing on a Remote Environment sets git's user.name or user.email, so the Personalspace install stopped at git-identity-missing on a fresh personal Environment (a regression of the first run's "Připravit"), and the first commit of lazurio module create personalspace/<slug> failed (commit-failed). Commits Lazurio makes on the person's behalf (the Personalspace's and gbrain's after the template's bootstrap, a personal module's first) now use the operator's own Git identity where it is set, and otherwise the person's GitHub identity from the viewer gh already returns: the profile's name, else the login, and <id>+<login>@users.noreply.github.com. It is given per commit (git -c user.name=… -c user.email=…, only for the missing fields) and never written into any Git configuration. git-identity-missing and commit-failed remain only when neither is known. Tests: with an identity set it is the commits' author and committer; without one GitHub's noreply identity is, for both install commits and the module's first commit, and neither the home nor the checkouts gain a Git configuration; without either nothing is created. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
207ff03 to
4782fa2
Compare
agentrozjedemeai
left a comment
There was a problem hiding this comment.
@immakermatty Exact-head QA on 4782fa2 (base 2727629): APPROVED. My prior #411 removal finding on 207ff03 was a two-dot comparison artifact after main advanced; the old branch’s merge-base patch did not remove #411. This rebase removes that ambiguity: the exact-base diff changes only src/launchpad/content-view.ts and messages.ts under src/launchpad; #411 apps home, tile, route, holder refresh and decision remain unchanged. Isolated detached checkout: check:static PASS; seven focused suites 98 pass / 0 fail, content-github 8 pass / 0 fail; git diff --check PASS. Live CI: required scope, static, test shards and Ubuntu check SUCCESS; 0 review threads; Template #4 merged. Remaining documented limitation: a real GitHub Remote Environment install was not exercised locally. Review only; no merge.
Fixes #377. Merge Lazurio/PersonalspaceTemplate_GEN3#4 first.
Why
lazurio personalspace installcreated the person's private<login>/<login>_GEN3from the template but never ran the template's bootstrap. Its placeholders (owner-github-username,Owner Display Name) therefore stayed inpersonal.gen3.jsonandmodules.manifest.json. Two things followed: the template's CI checked the instance as the template, and its live doctor took the placeholder for the owner. The doctor then reported the real owner as a forbidden collaborator of the Personalspace and of every personal module (#359 M2).Matěj decided on 2026-10-14 ("S gbrainem, podle šablony"): the install runs the template's own bootstrap. It names the owner and creates and clones the private
<login>/<login>-gbrain(root decision 0046). It does not install the gbrain CLI. The manual and the automatic install follow one rule, and the template keeps its identity logic.What changes
These steps apply only to a Personalspace that this run has just created:
create:~/.local/bin/bunas the module lifecycle uses it, else on the PATH. Otherwisepersonalspace-toolchain-missing.git-identity-missingonly when neither is known.bootstrap.personalspace.template.json. Otherwisepersonalspace-template-unexpected.bun run --cwd <checkout> bootstrap -- --login <login> --display-name <name> --applywith the operator's gh and git. The name is the GitHub profile's (nameofGET /user, newly read byparseViewer), else the login.--install-gbrainis not passed.incompleteonly because ofgbrain.clipasses.push. It commits exactly the files the template's manual names (step 7), with its commit messages:personal.gen3.jsonandmodules.manifest.json, tomainof the new Personalspace;gbrain/.gitignore, tomainof the new gbrain repository.personalspace-commit-failed,personalspace-push-failed,gbrain-commit-failed,gbrain-push-failed.personalspace-bootstrap-failed):bootstrapis reportedskippedwith what it found.warnings: ["personalspace-placeholders"].personalspace/.worktrees/<task>), commit the two files and open a pull request into the Personalspace. The template PR adds the worktree support this needs.ContentHost.personalspace(src/content/personalspace-bootstrap.ts).docs/content-sync.md(The Personalspace) and decision F9's addendum of 2026-10-14, with alternatives and risks.Why a re-run stays report-only
Re-running
lazurio personalspace installon an existing Personalspace does not bootstrap it and does not open the pull request itself, for three reasons:mainis the person's Publication.create-personalspace.mjsrefuses that too ("nikdy nespouští kód z předem existujícího repa").The warning carries the exact next step, so an agent can do it in a task worktree with a pull request the person merges.
What deliberately does not change
Verification
bun run check:staticpasses: lint, typecheck, check:public, proof build and smoke.bun test --parallel=4on the first head gave 2 load timeouts (tests/folder-tools.test.ts,tests/frozen-install-process.test.ts, Flaky under a loaded full run: frozen-install-process "real install stops when its hook changes .bunfig.toml" hits the 5 s test timeout #381); both pass alone. The current head is fully green (below).tests/content-install.test.ts:tests/personalspace-bootstrap.test.ts: the exact command line and environment (no stray variables, no--install-gbrain), the reason line,ready, andpublish, which commits only the named files and reports a refused push as stagepush.tests/content-github.test.ts: the profile's name.tests/content-view.test.ts: the new steps appear only on creation.tests/content-routes.test.ts: the job's steps now include the skippedbootstrap.initializeFolder(not a Git repository), with a fakeghfor the template.find, create, clone, bootstrap, push, checkall done.mainnamesexample/ "Ex Ample", and gbrain's.gitignoreis pushed.INCOMPLETEonly ongbrain.cli, androot.*is N/A ("Lazurio Folder mimo Git").main, which now includes the M2 stack (Modules: one module generator in the Platform, with the personal form (M2 1/3, #359) #394, Modules: lazurio module create personalspace/<slug> --dry-run, and module prepare dispatched (M2 2/3, #359) #396, Modules: lazurio module create personalspace/<slug> --confirm creates the confirmed plan (M2 3/3, #359) #399).user.nameoruser.email, so Lazurio's commits on the person's behalf use the operator's own Git identity where it is set. Otherwise they use the person's GitHub identity: the profile's name (else the login) and<id>+<login>@users.noreply.github.com. It is given per commit withgit -c, only for the missing fields, and is never written into any Git configuration. This covers the install's Personalspace and gbrain commits and the first commit oflazurio module create(module-create-run.ts).git-identity-missingandcommit-failedremain only when neither identity is known. Tests: with an identity set, it is the author and committer; without one, the noreply identity is, and no.gitconfigor localuser.*appears.bun run check:staticpasses, andbun test --parallel=4gives 3458 pass, 7 skip, 0 fail. GitHub CI on the head is green.Risks and open points
main, a fresh install fails truthfully atbootstrap, with the template's "chybí launchpad.gen3.json" reason. The repository stays created and cloned, without placeholders fixed. Merge the template first.mainwith the operator's gh and git. A template regression would reach new installs directly. The marker and clean-tree check guard only against an unexpected repository.personalspace-placeholderswarning anywhere (the skipped step is hidden); the CLI and the job JSON carry it. A small follow-up could surface it in Settings → Obsah Environmentu.gh repo createof gbrain and HTTPS pushes with gh as the credential helper. The SSH path and the helper wiring are the same ones the clone already uses.🤖 Generated with Claude Code
Note
Run the template's own bootstrap during personalspace install
.gitignorevia install.ts and the new bootstrap service in personalspace-bootstrap.tspersonalspace-placeholderswarning and manual worktree guidanceModuleCreateRunHostnow requires GitHub viewer access; hosts without it will not compile. Failed bootstraps leave the created checkout in place but uncommitted and unpushedMacroscope summarized 4782fa2.