I3403 — The Cockpit runner, the execution form and the intent workspace show an answer that names a skill as one link to that skill, proven in the existing browser case
In share/cockpit/runner.js (show) and share/cockpit/executions.js (report), when an unsuccessful answer's message names majordomus://skill/<id>, append after the text a link to /ui/skills#skill-<id>; the message stays textContent and the link is built with createElement, never innerHTML. Change the no-intent hint at apps/majordomus-cli/src/ui/idd.rs:292 to say that a one-paragraph statement is proposed and a longer paste is decomposed by the skill, with a link to the same anchor. Extend the existing browser case test/cases/3220_the_idd_loop_is_walked_in_a_browser.sh with a step that submits a two-paragraph statement to /cockpit/capabilities/intents.propose and checks the link.
BLOKOVÁNO wave 2 · p2 · implementation profile · parallel safe
Blocked. This issue cannot start until I3400, I3401 are done. The status is derived from that, not declared.
Cíl
In share/cockpit/runner.js (show) and share/cockpit/executions.js (report), when an unsuccessful answer's message names majordomus://skill/<id>, append after the text a link to /ui/skills#skill-<id>; the message stays textContent and the link is built with createElement, never innerHTML. Change the no-intent hint at apps/majordomus-cli/src/ui/idd.rs:292 to say that a one-paragraph statement is proposed and a longer paste is decomposed by the skill, with a link to the same anchor. Extend the existing browser case test/cases/3220_the_idd_loop_is_walked_in_a_browser.sh with a step that submits a two-paragraph statement to /cockpit/capabilities/intents.propose and checks the link.
Proč
Under T6 of the owner's report of 2026-10-19, a new user starts from the UI as often as from a terminal, and a refusal shown as raw text is the internal archaeology T6 asks to remove. The owner's 2026-10-19 order covers every path a paste can take. On master the UI path to intents.propose is the Cockpit runner, whose form carries data-mj-start (cockpit/pages.rs:1240) and so may run through executions.js as well as runner.js. No server-side test executes either script, so the only honest proof is a browser case, and the plan allows no new case number. The /ui/idd propose form of I2807 is not on master and inherits the same answer.
Aktuální stav
share/cockpit/runner.js:126-161 prints the status badge, a line and JSON.stringify of the body as text. share/cockpit/executions.js:85-97 renders 'code: message' as textContent. apps/majordomus-cli/tests/cockpit.rs:251-273 checks only server-rendered HTML. test/cases/3220_the_idd_loop_is_walked_in_a_browser.sh is the browser case of the ui job that walks the Cockpit (it opens /cockpit/plan/issues/I0001 at line 291). apps/majordomus-cli/src/ui/idd.rs:292 says only 'Propose one with `majordomus intent propose`, or the intents.propose capability', and its unit test no_intent_says_how_to_propose_one is at idd.rs:1161. /ui/skills anchors every workflow skill as id=\"skill-<id>\" (apps/majordomus-cli/src/ui/skills.rs:152-170).
Cílový stav
A person who pastes into the Cockpit sees that nothing was written and one link to the procedure that continues the work, whichever button ran the call.
Rozsah
- share/cockpit/runner.js
- share/cockpit/executions.js
- apps/majordomus-cli/src/ui/idd.rs
- apps/majordomus-cli/tests/ui_idd.rs
- test/cases/3220_the_idd_loop_is_walked_in_a_browser.sh
Mimo rozsah
- A new route or screen
- Running the skill from the UI
- The I2807 form itself, which is not on master
- Any change to the capability's answer
- A new test/cases file
Závislosti
- I3400READY The decompose-a-brief skill exists, is invoked by the plan workflow, and is named by both skill tests, so skills verify holds it as a capability
- I3401BLOCKED intents.propose writes no record for a multi-paragraph, Markdown or over-length statement and answers invalid_input, naming the canonical digest and the skill that decomposes it
Kritéria přijetí
- Precondition: majordomus intent preflight for this issue passes from a branch of master that holds I3400 and I3401
- In case 3220, a two-paragraph statement submitted to /cockpit/capabilities/intents.propose renders an anchor whose href is /ui/skills#skill-decompose-a-brief, and the case's existing steps still pass
- The scripts render no anchor for a message naming no skill, and render a message holding markup literally; both are asserted by the same browser step through a second submission
- The /ui/idd page with no intent names the skill and links to /ui/skills#skill-decompose-a-brief, and no_intent_says_how_to_propose_one still finds 'intent propose'
- Case 3220 passes in the ui job on the pull request's head, and ten consecutive local runs with a browser are green
Validace
- bash test/run.sh 3220_the_idd_loop_is_walked_in_a_browser
- cargo test -p majordomus-cli --lib ui::idd
- cargo test -p majordomus-cli --test ui_idd
Požadované důkazy
- test_a_refusal_naming_a_skill_links_to_it
Důkazy
Nic nezaznamenáno. Za každým tokenem výše musí stát příkaz nebo artefakt, než lze tento úkol dokončit; vyprávění se odmítá.
Časová osa
- zahájeno
- —
- ověřeno
- —
- dokončeno
- —
Tato tři pole, důkazy výše a stav závislostí jsou vše, z čeho se stav skládá. Neexistuje žádné pole stavu, které by s nimi mohlo být v rozporu.
Canonical record: .ai/repo/project/issues/I3403.yaml. Read it back with majordomus plan show I3403.