Repository navigation
Personal modules: the reserved module_port_pool 23000-23099, and .worktrees/ ignored - #3
Merged
Merged
Conversation
The template now declares module_port_pool 23000-23099 in modules.manifest.json: the reserved range of personal module leases that no Organization pool uses (Lazurio root decision 0171, addendum of 2026-10-13; LazurioPlatform decision F52), from which `lazurio module create personalspace/<slug>` takes a new module's lease. The pool may be absent (a Personalspace created before gets it in the pull request that declares its first module); when declared it must lie in the reserved range, which check:template, check:static-instance and the Doctor's profile materialization now verify (modulePortPoolIssues). .worktrees/ is ignored, a safety net for a task worktree created inside the Personalspace instead of beside it. AGENTS.md and README describe personal module creation; tests cover the pool rule, bootstrap keeping the pool, and a slot as lazurio module create declares it passing modules.repo_private and the profile materialization. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
immakermatty
marked this pull request as ready for review
October 14, 2026 09:53
agentrozjedemeai
approved these changes
Oct 14, 2026
agentrozjedemeai
left a comment
Collaborator
There was a problem hiding this comment.
Exact-head review of dcd7a96 (DEV-6662 M2 template). The optional pool is restricted to 23000-23099 in the template check, static-instance check, and Doctor materialization; legacy manifests without the field remain valid. The generated personal slot and private-repository checks are exercised. In an isolated checkout, bun run check passed (28 Doctor tests; 46 library/skills tests), diff --check is clean, and the Ubuntu/Windows checks are green. Approved independently of Platform #394; this review does not approve that generator or the later CLI stack.
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.
The template side of M2 in plan DEV-6662 (Lazurio/LazurioPlatform#359): personal module creation with
lazurio module create personalspace/<slug>(LazurioPlatform draft PRs Lazurio/LazurioPlatform#394, #396 and #399). This PR is independent of them; it can merge in any order.Why
The Operator decided on 2026-10-13 (Lazurio root decision 0171, addendum of 2026-10-13) that personal module leases come from a
module_port_pooldeclared in the Personalspace'smodules.manifest.json. It is a reserved range that Organization pools never use, and the template carries it. The Platform chose 23000–23099 (decision F52):What
modules.manifest.jsondeclares"module_port_pool": { "start": 23000, "end": 23099 }. Its layout is exactly what the Platform writes into an older Personalspace together with the slot of its first module.scripts/personalspace-lib.mjshasPERSONAL_MODULE_PORT_POOLandmodulePortPoolIssues(manifest). The pool may be absent: a Personalspace created before this gets it in the pull request that declares its first module. When declared, it must be{start, end}inside 23000–23099. The rule is checked in three places:check:template;check:static-instance;personalspace.profile_materialization, throughvalidatePersonalState..gitignoreignores.worktrees/. This is a safety net: the Platform puts the Personalspace's task worktrees beside it, inpersonalspace/.worktrees/<task>, never inside it. No check requires the line, so older instances are not failed for lacking it.--confirm, the slot by pull request, where the task worktree goes, and the pool.lazurio module createdeclares it (workspace/<slug>,slug,space,private,["owner"],status: active,git.urlof the owner's repository) passing bothvalidatePersonalStateand the Doctor'smodules.repo_privatewith the pool.Deliberately not here
.worktrees/mandatory. Instances made before would fail CI on every unrelated pull request. The Platform adds the pool with the first module.Verification
bun run checkpasses in this branch: template contract, history audit, doctor surface, and 28 + 46 tests.lazurio personalspace installleaves it (owner placeholders, the example slot), plus the pool and two personal module slots written by a real run of the Platform'slazurio module create.bun run checkpasses with both the scripts ofmainand those of this branch.check:template, because the owner is still the placeholder, and accepts the slots and the pool.Open (issues are disabled here, so noted for the reviewer)
The Doctor and placeholder instances (personalspace install leaves the template's placeholders in the person's Personalspace LazurioPlatform#377). On an instance that still has the template's placeholders, the live Doctor (
bun run doctor, not CI) derives the owner frompersonal.gen3.json's placeholder login. It then reports:personalspace.profile_materialization,github.sessionandpersonalspace.collaboratorsas fail (already true today);modules.repo_privateas fail for every personal module repository: GitHub lists the real owner among a user repository's collaborators, and the Doctor reads that owner as a "forbidden collaborator", as it already does for the Personalspace repository itself.This PR does not work around it. Naming the owner is #377's fix (the coordinator is shaping it).
"Organization pools never use 23000–23099" holds today by record, not by a check. The root doctor and the Organization template's pool check should refuse an overlap. That is tracked in Organization pools: refuse a module_port_pool overlapping the reserved personal range 23000-23099 HumanAndMachines/Lazurio#545.
🤖 Generated with Claude Code
Note
Reserve personal module port pool 23000-23099 and ignore
.worktrees/PERSONAL_MODULE_PORT_POOLconstant (ports 23000-23099) and amodulePortPoolIssuesvalidator in personalspace-lib.mjs. The optionalmodule_port_poolmanifest field must have integerstart/endbounds inside the reserved range; an omitted pool stays valid.validatePersonalState, check-instance-static.mjs, and check-template.mjs so invalid pools fail both static instance and template validation..worktrees/directories in .gitignore.module_port_pooloutside 23000-23099 now failvalidatePersonalStateand the static/template checks.Macroscope summarized dcd7a96.