Files
stack/docs/scratchpads/807-glpi-partial-content.md
jason.woltje e1d3891bd1
All checks were successful
ci/woodpecker/pr/ci Pipeline was successful
fix(glpi): accept partial content in list wrappers
Accept HTTP 206 responses from ranged GLPI list endpoints while preserving failures for genuine error statuses. Add red-first regression coverage across ticket, computer, and user lists.

Closes #807

Co-Authored-By: OpenAI GPT <noreply@openai.com>
2026-07-16 17:31:44 -05:00

3.5 KiB

Issue #807 — GLPI list wrappers accept HTTP 206

  • Branch: fix/807-glpi-206
  • Task: Gitea issue #807
  • Role: Author-only worker reporting to mosaic-100; no self-review or merge
  • Started: 2026-07-16

Objective

Fix the shipped GLPI ticket, computer, and user list wrappers so ranged responses with HTTP 206 Partial Content render successfully while genuine HTTP failures remain non-zero errors.

Scope

  • Modify only the three affected list wrappers and a focused shell regression test.
  • Do not touch session-init.sh, ticket-create.sh, or docs/TASKS.md.
  • Add task-local delivery evidence here as required by the mission protocol.

Plan

  1. Add a deterministic shell harness that copies each wrapper beside stubbed session-init.sh, credentials, and curl boundaries.
  2. Prove RED against the current 200-only gates: 206 must fail before the implementation change.
  3. Update all three status gates to accept exactly 200 or 206.
  4. Prove GREEN for 206 rendering and genuine 401/500 failures, then run repository quality gates.
  5. Commit with co-author attribution, run the push queue guard, push, and open a PR for independent review and merge by the team lead.

Budget

  • No explicit token cap supplied.
  • Soft estimate: 8K tokens; narrow single-worker execution with no exploratory scope.

Progress

  • Mission, task, PRD, QA, documentation, and code-review guidance loaded.
  • RED regression evidence captured: test-list-http-status.sh exited 1; all three wrappers rejected 206 while retaining 401 failures.
  • Implementation complete.
  • Relevant tests and repository gates green.
  • Commit pushed and PR opened.

Tests and evidence

  • RED (before source fix): packages/mosaic/framework/tools/glpi/test-list-http-status.sh → exit 1; ticket/computer/user 206 assertions failed, all 401 assertions passed.
  • GREEN: bash -n packages/mosaic/framework/tools/glpi/{ticket-list.sh,computer-list.sh,user-list.sh,test-list-http-status.sh} → pass.
  • GREEN: shellcheck packages/mosaic/framework/tools/glpi/test-list-http-status.sh → pass.
  • GREEN: packages/mosaic/framework/tools/glpi/test-list-http-status.sh → 6 assertions pass (206 renders and 401 errors for all three wrappers).
  • GREEN: pnpm typecheck → 42/42 tasks pass.
  • GREEN: pnpm lint → 23/23 tasks pass.
  • GREEN: pnpm format:check → all matched files pass.
  • Setup note: initial gate attempts could not start because the fresh worktree lacked dependencies; pnpm install --frozen-lockfile --store-dir /home/hermes/.local/share/pnpm/store restored the locked workspace dependencies without lockfile changes.

Acceptance criteria mapping

Criterion Evidence
HTTP 206 succeeds and renders each ranged list Focused test's three 206 render assertions pass
Genuine HTTP failures remain non-zero with existing diagnostics Focused test's three HTTP 401 assertions pass
Only affected list wrappers change Diff contains the three status predicates plus focused test/evidence; session and create wrappers untouched

Documentation decision

No operator/API documentation change is needed: this restores documented list behavior for a healthy GLPI response without changing command syntax, output, configuration, or public contracts. This task scratchpad records delivery evidence.

Risks / blockers

  • Existing dirty .mosaic/orchestrator/mission.json and .mosaic/orchestrator/session.lock are runtime-owned and will not be edited or committed.