Small fixes: dashboard #741

Open
opened 2026-10-07 04:13:44 +00:00 by claude · 5 comments
Member

Found during IW-678 (Claude links on the / board and agent lane). Items:

  • The "not read" lookup rule is written twice: WorktreeLinks.claudeSessionsOf and the inline getOrElse(key, notRead.claudeSessions) in WorktreeLinksService.combine; and CaskServer builds the Claude-links map in both linksFor and waitingList — review-phase-02-20261007-054839.md (architecture).
  • No itest proves an unreadable session registry shows "Claude sessions cannot be read" on the / waiting card and agent card — ClaudeSessionLinksItest.scala covers only the project and worktree pages; review-phase-02-20261007-054839.md (error-handling).
  • DashboardPageTest.cardHolding throws empty.min when no end marker matches, and its markup end markers can cut a card wrong; the / BATS card cut takes the first card to the first </ul> — review-phase-02-20261007-054839.md (testing).
  • The stretched-link mechanism is explained in the dashboard.css comment and again in the WaitingListView.card and AgentSessionsView.card Scaladoc — review-phase-02-20261007-054839.md (style).
Found during IW-678 (Claude links on the / board and agent lane). Items: - [ ] The "not read" lookup rule is written twice: `WorktreeLinks.claudeSessionsOf` and the inline `getOrElse(key, notRead.claudeSessions)` in `WorktreeLinksService.combine`; and `CaskServer` builds the Claude-links map in both `linksFor` and `waitingList` — review-phase-02-20261007-054839.md (architecture). - [ ] No itest proves an unreadable session registry shows "Claude sessions cannot be read" on the `/` waiting card and agent card — ClaudeSessionLinksItest.scala covers only the project and worktree pages; review-phase-02-20261007-054839.md (error-handling). - [ ] `DashboardPageTest.cardHolding` throws `empty.min` when no end marker matches, and its markup end markers can cut a card wrong; the `/` BATS card cut takes the first card to the first `</ul>` — review-phase-02-20261007-054839.md (testing). - [ ] The stretched-link mechanism is explained in the `dashboard.css` comment and again in the `WaitingListView.card` and `AgentSessionsView.card` Scaladoc — review-phase-02-20261007-054839.md (style).
Author
Member

Intake: needs-input
Workflow: waterfall
Reason: all gates passed; 1 question (rule): the Scaladoc trim of item 4 needs Michal's permission under the comment rule
Analysis: project-management/issues/IW-741/analysis.md on branch IW-741

The fourth item of the issue says the same mechanism is explained three times: once in the CSS and once in each of two Scaladoc blocks. The analysis cuts the Scaladoc copies and calls the issue your permission (analysis.md:91). But the loop's own account filed the issue from an automated review, so it is not your permission. Your rule says not to remove a comment unless it is false. The full explanation stays in dashboard.css:807-810.

WaitingListView.scala:103-105, before:

The one part that opens something else is the Claude row: HTML does not allow a link inside a link, so the primary link covers the card from underneath and the row sits above it.

After:

The one part that opens something else is the Claude row, a sibling of the primary link and never its child; the .card-link rule in dashboard.css says why.

AgentSessionsView.scala:113-116, before:

The Claude row is the one part that opens something else; it sits beside the primary link, never inside it, because HTML does not allow a link inside a link.

After: the same sentence as the first file.

  • a) Trim as the analysis says. Each Scaladoc keeps the fact that the row is a sibling of the link and points to the CSS rule. The text is written only once, but a reader must open the CSS file to see why.
  • b) Keep the Scaladoc as it is and drop item 4. No comment changes. The explanation stays in three places.
  • c) Trim only the agent card. Its sentence is shorter, and it already says "beside, never inside". The waiting card keeps its full text, so the text is in two places.

Recommended: a) — no fact is lost, and the CSS file holds the mechanism.

Answer in a comment on this issue, per number, for example "1: a", or in your own words; intake reads it on its next iteration.

Intake: needs-input Workflow: waterfall Reason: all gates passed; 1 question (rule): the Scaladoc trim of item 4 needs Michal's permission under the comment rule Analysis: project-management/issues/IW-741/analysis.md on branch IW-741 ### 1. May the two Scaladoc comments drop their explanation of the stretched link and point to the CSS instead? (rule) The fourth item of the issue says the same mechanism is explained three times: once in the CSS and once in each of two Scaladoc blocks. The analysis cuts the Scaladoc copies and calls the issue your permission ([analysis.md:91](https://code.iterative.works/iterative-works/iw-cli/src/branch/IW-741/project-management/issues/IW-741/analysis.md#L91)). But the loop's own account filed the issue from an automated review, so it is not your permission. Your rule says not to remove a comment unless it is false. The full explanation stays in [dashboard.css:807-810](https://code.iterative.works/iterative-works/iw-cli/src/branch/IW-741/dashboard/jvm/resources/static/dashboard.css#L807-L810). [WaitingListView.scala:103-105](https://code.iterative.works/iterative-works/iw-cli/src/branch/IW-741/dashboard/jvm/src/presentation/views/WaitingListView.scala#L103-L105), before: > The one part that opens something else is the Claude row: HTML does not allow a link inside a link, so the primary link covers the card from underneath and the row sits above it. After: > The one part that opens something else is the Claude row, a sibling of the primary link and never its child; the `.card-link` rule in `dashboard.css` says why. [AgentSessionsView.scala:113-116](https://code.iterative.works/iterative-works/iw-cli/src/branch/IW-741/dashboard/jvm/src/presentation/views/AgentSessionsView.scala#L113-L116), before: > The Claude row is the one part that opens something else; it sits beside the primary link, never inside it, because HTML does not allow a link inside a link. After: the same sentence as the first file. - **a) Trim as the analysis says.** Each Scaladoc keeps the fact that the row is a sibling of the link and points to the CSS rule. The text is written only once, but a reader must open the CSS file to see why. - **b) Keep the Scaladoc as it is and drop item 4.** No comment changes. The explanation stays in three places. - **c) Trim only the agent card.** Its sentence is shorter, and it already says "beside, never inside". The waiting card keeps its full text, so the text is in two places. **Recommended: a)** — no fact is lost, and the CSS file holds the mechanism. Answer in a comment on this issue, per number, for example "1: a", or in your own words; intake reads it on its next iteration.
Owner

1: a

1: a
Author
Member

Intake: agent-ready
Workflow: waterfall
Reason: all gates passed
Analysis: project-management/issues/IW-741/analysis.md on branch IW-741

Intake: agent-ready Workflow: waterfall Reason: all gates passed Analysis: project-management/issues/IW-741/analysis.md on branch IW-741
Author
Member

Implement: needs-human
Reason: batch-implement exit 1 — the kanon plugin does not compile against the iw-cli core of this branch

The kanon plugin's batch/ForgeCatchUp.scala expects the tracker port to return Either[String, _]. Since main took the TrackerError change (#778, #780), the port returns Either[TrackerError, _], so the command fails before any phase runs. No batch-implement.log was written. The issue itself is not the cause: every batch-implement run on a branch at the current main fails the same way until the plugin follows the port change.

[warn]  Using directives detected in multiple files:
- /home/mph/.local/share/iw/plugins/kanon/lib/deps.scala:1:1-7:41
It is recommended to keep them centralized in the /home/mph/Devel/iw/iw-cli-IW-741/core/project.scala file.

[error] /home/mph/.local/share/iw/plugins/kanon/lib/batch/ForgeCatchUp.scala:143:7
[error] Found:    Either[iw.core.model.TrackerError, Option[batch.ForgeState]]
[error] Required: Either[String, Option[batch.ForgeState]]
Compilation failed
Implement: needs-human Reason: batch-implement exit 1 — the kanon plugin does not compile against the iw-cli core of this branch The kanon plugin's `batch/ForgeCatchUp.scala` expects the tracker port to return `Either[String, _]`. Since `main` took the TrackerError change (#778, #780), the port returns `Either[TrackerError, _]`, so the command fails before any phase runs. No `batch-implement.log` was written. The issue itself is not the cause: every `batch-implement` run on a branch at the current `main` fails the same way until the plugin follows the port change. ``` [warn] Using directives detected in multiple files: - /home/mph/.local/share/iw/plugins/kanon/lib/deps.scala:1:1-7:41 It is recommended to keep them centralized in the /home/mph/Devel/iw/iw-cli-IW-741/core/project.scala file. [error] /home/mph/.local/share/iw/plugins/kanon/lib/batch/ForgeCatchUp.scala:143:7 [error] Found: Either[iw.core.model.TrackerError, Option[batch.ForgeState]] [error] Required: Either[String, Option[batch.ForgeState]] Compilation failed ```
Author
Member

Release: the implement loop failed this issue for a reason outside it. The kanon plugin did not compile against iw-cli main, because the tracker port now returns TrackerError (iw-cli #778). The plugin fix is dev-docs #484, and iw-cli 0.22.1 carries the core change. The issue goes back to the implement loop.

Release: the implement loop failed this issue for a reason outside it. The kanon plugin did not compile against iw-cli main, because the tracker port now returns TrackerError (iw-cli #778). The plugin fix is dev-docs #484, and iw-cli 0.22.1 carries the core change. The issue goes back to the implement loop.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
iterative-works/iw-cli#741
No description provided.