refactor(omo-codex): rename ultragoal component to ulw-loop

Fully rename the ultragoal component to ulw-loop so the identifier
matches the ulw-loop skill it powers. Renames the component directory,
nested skill, TS identifiers (UlwLoop / ULW_LOOP_* / ulwLoop*), the
omo ulw-loop CLI subcommand, the .omo/ulw-loop state directory, the
OMO_ULW_LOOP_STEER directive token, and the @code-yeongyu/codex-ulw-loop
package. Also threads Atlas-style right-sized parallel worker delegation
and a Prometheus-style QA + maximum-parallelism plan into the ulw-loop
skill, with a critical post-subagent QA gate.

Updates aggregate wiring (plugin package components, hooks.json,
sync-skills), the install-codex agent-link test fixture, and user docs.
This commit is contained in:
YeonGyu-Kim
2026-05-29 12:38:22 +09:00
parent 0edf087117
commit 8c6e8e4986
84 changed files with 1429 additions and 1392 deletions
@@ -47,7 +47,7 @@ test("#given isolated components #when hooks are inspected #then commands stay i
"components/rules/dist/cli.js",
"components/start-work-continuation/dist/cli.js",
"components/telemetry/dist/cli.js",
"components/ultragoal/dist/cli.js",
"components/ulw-loop/dist/cli.js",
"components/ultrawork/dist/cli.js",
];
@@ -55,10 +55,10 @@ test("#given isolated components #when hooks are inspected #then commands stay i
for (const marker of componentMarkers) {
assert.match(text, new RegExp(marker.replaceAll("/", "\\/")));
}
assert.doesNotMatch(text, /codex-(comment-checker|lsp|rules|telemetry|ultragoal|ultrawork)@/);
assert.doesNotMatch(text, /codex-(comment-checker|lsp|rules|telemetry|ulw-loop|ultrawork)@/);
});
test("#given aggregate OMO plugin is enabled #when hooks are inspected #then ultragoal guards budgeted create_goal calls", async () => {
test("#given aggregate OMO plugin is enabled #when hooks are inspected #then ulw-loop guards budgeted create_goal calls", async () => {
// given
const hooks = await readJson("hooks/hooks.json");
const text = JSON.stringify(hooks);
@@ -67,7 +67,7 @@ test("#given aggregate OMO plugin is enabled #when hooks are inspected #then ult
const preToolUseGroups = hooks.hooks.PreToolUse;
// then
assert.match(text, /components\/ultragoal\/dist\/cli\.js/);
assert.match(text, /components\/ulw-loop\/dist\/cli\.js/);
assert.match(text, /hook pre-tool-use/);
assert.deepEqual(preToolUseGroups.map((group) => group.matcher), ["^create_goal$"]);
});
@@ -128,8 +128,8 @@ test("#given component directories #when scanned #then only intentional resource
"rules",
"start-work-continuation",
"telemetry",
"ultragoal",
"ultrawork",
"ulw-loop",
]);
for (const name of componentNames) {
const expectedManifest = expectedComponentManifests.get(name);
@@ -20,7 +20,7 @@ const expectedSkills = [
"review-work",
"rules",
"start-work",
"ultragoal",
"ulw-loop",
];
test("#given synced aggregate Codex skills #when inspected #then component and shared skills are present", async () => {
@@ -41,9 +41,9 @@ test("#given synced aggregate Codex skills #when inspected #then component and s
}
});
test("#given synced ultragoal skill #when Codex hint metadata is inspected #then ulw-loop surfaces the ultragoal alias", async () => {
test("#given synced ulw-loop skill #when Codex hint metadata is inspected #then ulw-loop surfaces the ulw-loop alias", async () => {
// given
const skillRoot = join(root, "skills", "ultragoal");
const skillRoot = join(root, "skills", "ulw-loop");
// when
const skill = await readFile(join(skillRoot, "SKILL.md"), "utf8");
@@ -53,21 +53,21 @@ test("#given synced ultragoal skill #when Codex hint metadata is inspected #then
assert.match(skill, /^---\nname: ulw-loop\n/m);
assert.match(skill, /Goal-like loop that uses ultrawork mode to decompose work into systematic, evidence-bound steps\./);
assert.match(interfaceMetadata, /display_name: "ulw loop"/);
assert.doesNotMatch(interfaceMetadata, /ulw-loop \/ ultragoal/);
assert.doesNotMatch(interfaceMetadata, /ulw-loop \/ ulw-loop/);
assert.match(interfaceMetadata, /short_description: "Goal-like ultrawork loop for systematic decomposition"/);
assert.match(interfaceMetadata, /default_prompt: "Use \$ulw-loop/);
});
test("#given synced ultragoal skill #when Codex hint metadata is inspected #then ultragoal remains discoverable as an alias", async () => {
test("#given synced ulw-loop skill #when Codex hint metadata is inspected #then ulw-loop remains discoverable as an alias", async () => {
// given
const skillRoot = join(root, "skills", "ultragoal");
const skillRoot = join(root, "skills", "ulw-loop");
// when
const interfaceMetadata = await readFile(join(skillRoot, "agents", "openai.yaml"), "utf8");
// then
assert.match(interfaceMetadata, /search_terms:/);
assert.match(interfaceMetadata, /- "ultragoal"/);
assert.match(interfaceMetadata, /- "ulw-loop"/);
});
test("#given synced aggregate Codex skills #when they contain OpenCode orchestration examples #then Codex tool compatibility guidance is injected", async () => {