fix(submodules): map external/Automation_ui and external/minibook, retire two gitlinks (task-coding-0006) - #4
Merged
Flissel merged 1 commit intoAug 17, 2026
Conversation
…tire two gitlinks coding-engine carried five gitlinks while .gitmodules mapped only la_fungus_search, so `git submodule update --init --recursive` aborted at the alphabetically first unmapped path. Three consecutive vibemind-os pin chains hit this (finding B2). Mapped, each verified against the remote before writing: - external/Automation_ui -> https://github.com/Flissel/Automation_ui.git The pin 3a413ae2 is an ancestor of origin/main on that remote, established by fetching refs/heads/* only, so fork-network object serving cannot explain it. The commit is authored by the repository owner; e137ad3 in this repository advances the gitlink and calls it a submodule; docker-compose.yml builds from external/Automation_ui/backend. - external/minibook -> https://github.com/Flissel/minibook.git That remote has exactly one head, refs/heads/master, and it is precisely the pin b19c61e2. c4pt0r/minibook's master is a different commit (3b0ae99b), so the namespace collision resolves against reusing it. README.md:216 links the Flissel repository. Fetch-by-SHA cannot decide this, because Flissel/minibook is a fork; the ref-tip comparison can, and does. Retired, because neither has a usable remote and nothing consumes the tree: - external/NemoClaw. Upstream is the third-party NVIDIA/NemoClaw.git; there is no Flissel fork (the URL does not resolve). Nothing in this repository references the path. mcp_plugins/servers/nemoclaw_bridge.py is an in-repo module that says it is "inspired by" NemoClaw's sandboxed agent model and imports nothing from the tree; it talks to a sandbox over CDP/HTTP. task_executor.py imports that in-repo module, not the submodule, so the retirement changes no import. - external/free-llm-api-resources. The upstream identity is evidenced (cheahjs) but the URL does not resolve, and the repository contains zero references to it of any kind. No URL was invented for it. Deliberately untouched: la_fungus_search keeps its mapping and its pin f731c19a, which is dangling on its remote. Its upstream is being updated separately. A recursive init therefore still fails there, at the last of the five paths instead of the first. This change closes the mapping half of B2; it does not make the readiness gate green.
Flissel
marked this pull request as ready for review
August 17, 2026 11:13
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.
What
Closes the mapping half of finding B2. Five gitlinks under
external/become three, with a clean 1:1 correspondence between the remaining gitlinks and the.gitmodulespath entries.Diff is 3 files:
.gitmodules(+6), and the two removed index entries. Nothing else.Authority
Risk class
destructive. The two removals are covered by durable user authorityclaude-user-message:session_01SdA3ftgP3wciDbcFzKw4uk@2026-08-17T09:35:00Z, which grants exactlyexternal/NemoClawandexternal/free-llm-api-resourcesand nothing further. Verified by mode-field enumeration that no third gitlink moved.Both retired paths were empty, uninitialized directories (
find -mindepth 1returned zero entries for each), so only the index entry was removed and no file content was lost. The empty directories were deliberately left on disk — git does not track them, so they contribute nothing to the commit, and deleting them would have been a filesystem mutation beyond the granted scope.The gate is NOT green, and this PR does not make it green
This is the decisive evidence, and I reproduced it myself in two throwaway clones:
Before (
81ab938):fatal: No url found for submodule path 'external/Automation_ui' in .gitmodules,EXIT=128— dies at the first of five paths.After (
035b357):— both new mappings serve their pins (including the level-4
moire_tracker), then it dies at the last path.The abort moved from the first of five paths to the last. That is the entirety of the readiness change. Reaching
ready: truestill needs a re-pin or retirement ofla_fungus_search, whose pinf731c19ais not reachable from any ref on its own remote. That was excluded by user decision because the upstream is being updated right now, so it was not touched.Upstream claims re-verified — all four held
The session was told to re-verify rather than trust the brief. Nothing had to stop fail-closed, and one claim came back stronger than I had put it:
Automation_ui— my brief offered "SHA reachable there", which is weak on its own. Stronger test used instead: fetching onlyrefs/heads/*with--filter=blob:none, never the SHA, already brings the object into the closure, andgit merge-base --is-ancestorshows3a413ae2is an ancestor oforigin/main. Fork-network object serving cannot explain that. Corroborated four ways, including one strand I had not cited: vibemind-os's own.gitmodulesalready mapsspaces/desktop/Automation_uito the same remote.minibook— ref-tip comparison:Flissel/minibookhas exactly one head,refs/heads/master=b19c61e2, which is the pin;c4pt0r/minibook's master is3b0ae99b, a different commit. Proven functionally downstream — the recursive init actually cloned this URL and checked out that pin.NemoClawretirement safe —grepfor the path returns zero hits repo-wide.mcp_plugins/servers/nemoclaw_bridge.pyis an in-repo module whose docstring says "Inspired by NemoClaw's sandboxed agent model" and whose every import is stdlib/yaml/httpx/playwright/json — nothing from the tree.task_executor.py:51imports that in-repo module, not the submodule.free-llm-api-resourcesretirement safe — zero hits for the path, the underscore variant, orcheahjs. No URL was invented, and none of the third-party forks that happen to carry the object was proposed as a remote.Method carried over from
task-git-0034: fetch-by-SHA decides nothing across a fork network, so ref-tip and ref-reachability were used; gitlinks counted withawk '$1=="160000"', never a baregrep 160000.Evidence
docker compose configdocker-validateis this repo's only blocking CI job; all three compose validations pass, before and afterpytest tests/No regression, as it must be: this touches
.gitmodulesand two index entries, no Python.Two pre-existing problems found, not caused here
This repo's test suite is substantially broken on unmodified master.
tests/orchestrator/conftest.py:15importsrun_orchestrator, which was moved to_archive/old_runners/and is not importable; being a conftest failure it aborts the entire pytest session. 49 failures and 9 collection errors exist at baseline. CI hides all of it behindcontinue-on-error: trueon the lint, test and security jobs.CI never hit the bug this PR fixes because
.github/workflows/ci.ymlusesactions/checkout@v4withoutsubmodules: recursive.Both are out of scope here and worth a
cockpit-codingfollow-up.Hygiene
No dirty state was produced in either repository and no clean-up primitive was run — every measurement and both init probes used throwaway clones outside both worktrees. One git refusal was hit (
please stage your changes to .gitmodules or stash them to proceedongit rm) and it was resolved by completing the operation, not by stashing, forcing or discarding.Generated by Claude Code