You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add incomplete-result signaling on parse failure (#67) (#78)
* initial implementation for replacing except-pass
* fix: test failure with bubble none and pytest missing
* fix: Broaden the decode guard to keep malformed KV rows non-fatal.
* fix: replace remaining print and pattern.
* initial implementation
* fix: review comments
* fix: review comments
* fix: review comments
### Must fix#1 — **Fixed**
`GET /api/workspaces` always returns `{"projects": [...], "warnings"?: [...]}` so the shape no longer flips at runtime.
### Should fix#2 — **Fixed**
Removed dead `attach_warnings` from `models/__init__.py` and deleted the unused module-level helper.
### Should fix#3 — **Fixed**
Added `AND value IS NOT NULL` to bubble and composer queries in `workspace_tabs.py`; removed NULL branches that called `record_*_skipped()` (tombstones are not `parse_error`).
### Nice to have #4 — **Fixed**
Renamed/updated `test_workspaces_api_object_when_clean` and adjusted `test_api_endpoints.py` `TestListWorkspaces` + exclusion tests for the object shape.
### Nice to have #5 — **Skipped**
`if count > 0` guards — style-only; no behavior change for normal callers (`count` defaults to 1).
### Extra (follow-on from #1)
- `tests/web-ui-smoke.sh` — parse `body["projects"]` when the response is an object (smoke would otherwise fail).
- `static/js/app.js` — doc comment only; `normalizeWorkspacesResponse()` still accepts a legacy array.
### Validation
- `pytest tests/test_parse_warnings.py tests/test_api_endpoints.py` — **25 passed**
- `tests/test_workspace_tabs_null_bubble.py` — included; NULL row still must not crash (filtered in SQL, no false `parse_error` banner)
0 commit comments