Repository navigation
Commit bb71b38
fix(dashboard): restore completed-task readback and workspace reliability (#3961)
* fix(dashboard): expose scoped completed task readback
Signed-off-by: song <liusongstep@gmail.com>
* fix(workspace): stabilize locale context and recover render failures
Signed-off-by: song <liusongstep@gmail.com>
* fix(workspace): refresh visit digest without resetting its baseline
Signed-off-by: song <liusongstep@gmail.com>
* fix(workspace): prevent task overlap and add expandable completed readback
Signed-off-by: song <liusongstep@gmail.com>
* fix(workspace): label file actions by their actual behavior
Signed-off-by: song <liusongstep@gmail.com>
* fix(dashboard): distinguish live loading and execution discovery failures
Signed-off-by: song <liusongstep@gmail.com>
* fix(dashboard): proxy workspace report API in source development
Signed-off-by: song <liusongstep@gmail.com>
* docs(workspace): explain task readback scope and recovery behavior
Signed-off-by: song <liusongstep@gmail.com>
* refactor(chat): own completed-task readback in a request mixin
`chat_server.py` sat at its maintainability ceiling (1503 lines, 25 `Any`
names) before this PR, and the inline completed-todos handler pushed it
to 1560 lines, so the control-plane maintainability ratchet failed in CI.
Follow the existing `ChatStatusRequestMixin` shape: move the handler into
`loopx/chat_completed_todos_api.py` as `ChatCompletedTodosRequestMixin`,
which owns the route constant, the query allowlist, paging bounds, the
scope check, and the read-only todo projection. The mixin depends on the
handler only through the `_send_error`/`_send_json` stubs and a new
`_compact_todo_record` hook, so it does not import `chat_server` back.
`chat_server.py` returns to 1509 lines and 25 `Any` names; no ratchet
baseline entry is edited.
Two behavior corrections to the readback surfaced while moving it:
- a done record without `todo_id` is dropped from the page instead of being
serialized with a null id, because the dashboard response schema requires
a string id and one such record would fail the whole page;
- an unknown goal (`ValueError` from `list_goal_todos`) now answers 404
rather than 400; malformed queries keep 400 and unreadable sources 503.
Tests patch the new owner module and cover both corrections.
Validation:
- python3 -m pytest tests/test_chat_server_cors.py tests/canary/test_maintainability_ratchet.py tests/control_plane/test_m6_quality_gates.py -q -> 21 passed
- python3 examples/control_plane/control-plane-maintainability-ratchet-smoke.py -> ok
- ruff: new module and test clean; chat_server.py findings identical to main
Signed-off-by: song <liusongstep@gmail.com>
* fix(workspace): align task typography to one measured scale in every lane
On `main` the task surfaces render inconsistently: the `.personal-task-card`
lane picks up the LoopX theme rule (13px / 600 / 18px titles, 11px
metadata) while the attention, schedule, and completed lanes are plain
buttons that fall through to the global defaults (16px / 700 / 24px titles,
12.8px metadata). The theme contract test asserted the card rule text, not
the rendered result, so the mismatch was never caught.
Make the scale explicit and identical for the board lanes, the board cards,
the loopx-theme override, and the new grouped list rows, using the design
system tokens: titles Body M `14px / 500 / 20px`, metadata Body S
`12px / 400 / 16px`, and group headers `12px / 600 / 18px` to match the
existing lane headers. Cards still do not shrink below their content and
long titles still clamp. The theme contract assertion now names the Body M
scale for task titles.
Disclosure: this is a deliberate first-screen typography change on the
Tasks view; measured before/after values and screenshots are in the PR.
Validation:
- node src/features/personal-workspace/workspace-theme.test.mjs -> ok
- node src/features/personal-workspace/personal-workspace-contract.test.mjs -> ok
- rendered metrics via Playwright: all four lanes in both views report
header 12px/600/18px, title 14px/500/20px, meta 12px/400/16px
Signed-off-by: song <liusongstep@gmail.com>
* fix(workspace): keep Board as the default Tasks view
The grouped list view stays available behind the List/Board switch, but
Tasks opens in the four-lane board as it does on `main`. The packaged
Personal Workspace browser smoke (a required Frontstage step) locates the
progress and completed columns through the board structure, and changing
the default made those assertions fail in CI. Keeping the board default also
leaves the Tasks first screen unchanged, so the only first-screen change in
this branch is the typography scale disclosed separately.
The user guide describes the board as the default and the list as the
switchable view; the task-board scroll smoke no longer needs to switch views
before measuring the lanes.
Validation:
- node src/features/personal-workspace/personal-workspace-contract.test.mjs -> ok
- node src/features/personal-workspace/workspace-theme.test.mjs -> ok
- npm run smoke:personal-workspace-packaged -> personal-workspace-browser-smoke (packaged): ok
Signed-off-by: song <liusongstep@gmail.com>
* chore(dashboard): regenerate packaged Personal Workspace assets
The Frontstage workflow rebuilds the packaged Chat dashboard with
`npm run build:chat` and fails when `loopx/web/chat` differs from a clean
source build. Regenerate `index.html` and the hashed bundles for the source
changes in this branch. As with previous regenerations, earlier bundles stay
tracked because the chat build keeps `emptyOutDir: false`.
Validation:
- npm run build:chat -> tsc --noEmit and vite build passed
- npm run smoke:personal-workspace-packaged -> ok against these assets
Signed-off-by: song <liusongstep@gmail.com>
* fix(chat): keep completed task route names distinct
Signed-off-by: song <liusongstep@gmail.com>
* fix(dashboard): reference rebuilt merged chat bundle
Signed-off-by: song <liusongstep@gmail.com>
* refactor(workspace): share snapshot history across task views
Signed-off-by: huangruiteng <huangrt01@163.com>
---------
Signed-off-by: song <liusongstep@gmail.com>
Signed-off-by: huangruiteng <huangrt01@163.com>
Co-authored-by: huangruiteng <huangrt01@163.com>1 parent bf217e1 commit bb71b38
24 files changed
Lines changed: 614 additions & 76 deletions
File tree
- apps/presentation/dashboard
- smoke
- src
- features/personal-workspace
- views
- docs/guides
- examples
- loopx
- web/chat
- assets
- tests
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
27 | 27 | | |
28 | 28 | | |
29 | 29 | | |
30 | | - | |
| 30 | + | |
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | | - | |
11 | 10 | | |
12 | 11 | | |
13 | | - | |
| 12 | + | |
14 | 13 | | |
15 | | - | |
| 14 | + | |
16 | 15 | | |
17 | 16 | | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
18 | 21 | | |
19 | 22 | | |
20 | 23 | | |
| |||
35 | 38 | | |
36 | 39 | | |
37 | 40 | | |
38 | | - | |
| 41 | + | |
39 | 42 | | |
40 | 43 | | |
41 | 44 | | |
| |||
54 | 57 | | |
55 | 58 | | |
56 | 59 | | |
57 | | - | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
58 | 66 | | |
59 | 67 | | |
60 | 68 | | |
61 | 69 | | |
62 | | - | |
63 | | - | |
64 | | - | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
65 | 73 | | |
66 | 74 | | |
67 | 75 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
897 | 897 | | |
898 | 898 | | |
899 | 899 | | |
900 | | - | |
901 | | - | |
| 900 | + | |
| 901 | + | |
902 | 902 | | |
903 | 903 | | |
904 | 904 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
| 18 | + | |
18 | 19 | | |
19 | 20 | | |
20 | 21 | | |
21 | 22 | | |
22 | 23 | | |
| 24 | + | |
23 | 25 | | |
24 | 26 | | |
25 | 27 | | |
| |||
51 | 53 | | |
52 | 54 | | |
53 | 55 | | |
54 | | - | |
| 56 | + | |
55 | 57 | | |
56 | 58 | | |
57 | 59 | | |
| |||
64 | 66 | | |
65 | 67 | | |
66 | 68 | | |
67 | | - | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
68 | 80 | | |
69 | 81 | | |
70 | 82 | | |
| |||
115 | 127 | | |
116 | 128 | | |
117 | 129 | | |
| 130 | + | |
118 | 131 | | |
119 | 132 | | |
120 | 133 | | |
| |||
164 | 177 | | |
165 | 178 | | |
166 | 179 | | |
167 | | - | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
168 | 188 | | |
169 | 189 | | |
170 | 190 | | |
| |||
202 | 222 | | |
203 | 223 | | |
204 | 224 | | |
205 | | - | |
206 | | - | |
| 225 | + | |
| 226 | + | |
207 | 227 | | |
208 | 228 | | |
209 | 229 | | |
| |||
219 | 239 | | |
220 | 240 | | |
221 | 241 | | |
222 | | - | |
| 242 | + | |
223 | 243 | | |
224 | 244 | | |
225 | 245 | | |
| |||
258 | 278 | | |
259 | 279 | | |
260 | 280 | | |
261 | | - | |
| 281 | + | |
262 | 282 | | |
263 | 283 | | |
264 | 284 | | |
265 | 285 | | |
266 | 286 | | |
267 | 287 | | |
268 | 288 | | |
269 | | - | |
| 289 | + | |
270 | 290 | | |
271 | 291 | | |
272 | 292 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
3 | 2 | | |
4 | 3 | | |
5 | 4 | | |
6 | 5 | | |
7 | 6 | | |
8 | 7 | | |
| 8 | + | |
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
| |||
88 | 88 | | |
89 | 89 | | |
90 | 90 | | |
91 | | - | |
92 | | - | |
93 | | - | |
94 | | - | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
95 | 95 | | |
96 | 96 | | |
97 | 97 | | |
| |||
804 | 804 | | |
805 | 805 | | |
806 | 806 | | |
| 807 | + | |
| 808 | + | |
| 809 | + | |
| 810 | + | |
| 811 | + | |
| 812 | + | |
| 813 | + | |
| 814 | + | |
807 | 815 | | |
808 | 816 | | |
809 | 817 | | |
| |||
914 | 922 | | |
915 | 923 | | |
916 | 924 | | |
917 | | - | |
918 | | - | |
919 | | - | |
920 | | - | |
| 925 | + | |
| 926 | + | |
| 927 | + | |
| 928 | + | |
921 | 929 | | |
922 | 930 | | |
923 | 931 | | |
| |||
1630 | 1638 | | |
1631 | 1639 | | |
1632 | 1640 | | |
| 1641 | + | |
| 1642 | + | |
| 1643 | + | |
| 1644 | + | |
| 1645 | + | |
| 1646 | + | |
| 1647 | + | |
| 1648 | + | |
1633 | 1649 | | |
1634 | 1650 | | |
1635 | 1651 | | |
| |||
1684 | 1700 | | |
1685 | 1701 | | |
1686 | 1702 | | |
1687 | | - | |
1688 | | - | |
1689 | | - | |
1690 | | - | |
1691 | | - | |
1692 | | - | |
1693 | | - | |
1694 | | - | |
1695 | 1703 | | |
1696 | 1704 | | |
1697 | 1705 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
345 | 345 | | |
346 | 346 | | |
347 | 347 | | |
348 | | - | |
349 | | - | |
| 348 | + | |
| 349 | + | |
350 | 350 | | |
351 | 351 | | |
352 | 352 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
727 | 727 | | |
728 | 728 | | |
729 | 729 | | |
| 730 | + | |
730 | 731 | | |
731 | 732 | | |
732 | 733 | | |
| |||
946 | 947 | | |
947 | 948 | | |
948 | 949 | | |
949 | | - | |
950 | 950 | | |
951 | | - | |
952 | | - | |
953 | | - | |
954 | | - | |
955 | | - | |
956 | | - | |
957 | | - | |
958 | | - | |
| 951 | + | |
| 952 | + | |
| 953 | + | |
| 954 | + | |
| 955 | + | |
| 956 | + | |
| 957 | + | |
| 958 | + | |
| 959 | + | |
959 | 960 | | |
| 961 | + | |
960 | 962 | | |
961 | 963 | | |
962 | 964 | | |
963 | 965 | | |
964 | 966 | | |
965 | | - | |
| 967 | + | |
966 | 968 | | |
967 | 969 | | |
968 | 970 | | |
969 | | - | |
| 971 | + | |
| 972 | + | |
| 973 | + | |
970 | 974 | | |
971 | 975 | | |
972 | 976 | | |
| |||
0 commit comments