~bigbes/agents-dev · parade

main · last commit 13 days ago · 7g0stsfu

← Back to the parade

ah-nyl.3 vikunja: Board adapter over the REST API Past Stand

status: closed P1 task
bd reopen ah-nyl.3
Created byEugene Blikh
Ownerbigbes@gmail.com
Created2026-07-12T23:34:34Z
Started2026-07-12T23:55:04Z
Updated2026-07-13T00:10:14Z
Closed2026-07-13T00:10:14Z
Description
Implement internal/vikunja per docs/SPEC.md SS8 (read SPEC fully; SS6, SS8 normative). ports.Board over the Vikunja 2.3.0 REST API.

Deliverables:
- New(cfg config.Vikunja, logger *slog.Logger) (*Client, error) storing an http.Client with a sane timeout (~15s).
- Bucket resolution per SPEC SS8: locate the kanban view of the configured project, build title->bucketID and bucketID->canonical-name maps from the config buckets mapping; missing configured title = error listing found titles. Resolve lazily on first use and cache; provide a Refresh path when a lookup misses (board edited).
- Snapshot(ctx): tasks of the project with canonical bucket names ("" for unmapped buckets), honoring pagination.
- MoveToBucket(ctx, taskID, canonical), Comment(ctx, taskID, markdown), each per SPEC SS8 endpoints.
- Error style: non-2xx -> error with method, path, status, and <=200 bytes of body.
- Compile-time check: var _ ports.Board = (*Client)(nil).

IMPORTANT — verify the real API contract before coding: the live OpenAPI JSON is at https://tasks.bigb.es/api/v1/docs.json (Swagger UI at /api/v1/docs) — fetch it (no auth needed for the spec itself) and confirm exact paths, request/response shapes, and pagination headers for: project views list, kanban view tasks, buckets list, bucket task move, comment create (Vikunja uses PUT-for-create), single task get. If the live spec is unreachable, use the upstream docs at https://vikunja.io/docs/ and pin your best understanding in code comments + fixtures. SPEC SS8's endpoint list is the expected shape, not gospel — trust the OpenAPI.

Tests: httptest.Server fixtures (JSON canned from the OpenAPI shapes) covering snapshot incl. pagination + unmapped buckets, bucket resolution failure (helpful error), move, comment, non-2xx error rendering. No live-network tests.

Constraints: work ONLY under internal/vikunja/. No go.mod changes, no other packages, no .beads/. Build/test ONLY your package (go build/vet/test ./internal/vikunja/...). Commit 'vikunja: ...' staging only internal/vikunja. Do NOT push.

Depends on

  • ah-nyl — Stage 1 MVP: poll-driven happy path parent-child closed
  • ah-nyl.1 — foundation: go module, domain, ports, config blocks closed

Depended on by

  • ah-nyl.6 — wiring: httpapi + agenthubd + ahub CLIs blocks

Unblocks — everything waiting on this, transitively

  • ah-nyl.6 — wiring: httpapi + agenthubd + ahub CLIs blocks closed
  • ah-nyl.7 — e2e: harness with fake vikunja + stub pi blocks closed
  • ah-nyl.8 — refactor: adopt go.bigb.es/auxilia (scribe/culpa/steward) where it pays blocks closed

No comments.

Close reason

landed a1d6038, green; OpenAPI deviation from SPEC noted in package docs (flat paginated view tasks)
  • Eugene Blikh added under epic ah-nyl · 2026-07-13T02:34:34Z
  • Eugene Blikh added dependency on ah-nyl.1 · 2026-07-13T02:34:34Z
  • Eugene Blikh created the issue · 2026-07-13T02:34:34Z
  • Eugene Blikh ah-nyl.6 now depends on this · 2026-07-13T02:35:54Z
  • Eugene Blikh changed status to in_progress · 2026-07-13T02:55:04Z
  • Eugene Blikh closed the issue · 2026-07-13T03:10:13Z
    landed a1d6038, green; OpenAPI deviation from SPEC noted in package docs (flat paginated view tasks)
  • Eugene Blikh added label milestone:stage-1 · 2026-07-20T03:08:46Z
  • Eugene Blikh removed label milestone:stage-1 · 2026-07-20T03:10:21Z
Stored rows — what this pane was built from, as read
issues 1 row
id ah-nyl.3
content_hash c5a4d9c93b65bce4f1b5dea36aa896d1dec99ba8a4a1c9579ace421cbb9f8d21
title vikunja: Board adapter over the REST API
description Implement internal/vikunja per docs/SPEC.md SS8 (read SPEC fully; SS6, SS8 normative). ports.Board over the Vikunja 2.3.0 REST API. Deliverables: - New(cfg config.Vikunja, logger *slog.Logger) (*Client, error) storing an http.Client with a sane timeout (~15s). - Bucket resolution per SPEC SS8: locate the kanban view of the configured project, build title->bucketID and bucketID->canonical-name maps from the config buckets mapping; missing configured title = error listing found titles. Resolve lazily on first use and cache; provide a Refresh path when a lookup misses (board edited). - Snapshot(ctx): tasks of the project with canonical bucket names ("" for unmapped buckets), honoring pagination. - MoveToBucket(ctx, taskID, canonical), Comment(ctx, taskID, markdown), each per SPEC SS8 endpoints. - Error style: non-2xx -> error with method, path, status, and <=200 bytes of body. - Compile-time check: var _ ports.Board = (*Client)(nil). IMPORTANT — verify the real API contract before coding: the live OpenAPI JSON is at https://tasks.bigb.es/api/v1/docs.json (Swagger UI at /api/v1/docs) — fetch it (no auth needed for the spec itself) and confirm exact paths, request/response shapes, and pagination headers for: project views list, kanban view tasks, buckets list, bucket task move, comment create (Vikunja uses PUT-for-create), single task get. If the live spec is unreachable, use the upstream docs at https://vikunja.io/docs/ and pin your best understanding in code comments + fixtures. SPEC SS8's endpoint list is the expected shape, not gospel — trust the OpenAPI. Tests: httptest.Server fixtures (JSON canned from the OpenAPI shapes) covering snapshot incl. pagination + unmapped buckets, bucket resolution failure (helpful error), move, comment, non-2xx error rendering. No live-network tests. Constraints: work ONLY under internal/vikunja/. No go.mod changes, no other packages, no .beads/. Build/test ONLY your package (go build/vet/test ./internal/vikunja/...). Commit 'vikunja: ...' staging only internal/vikunja. Do NOT push.
design
acceptance_criteria
notes
status closed
priority 1
issue_type task
assignee NULL
estimated_minutes NULL
created_at 2026-07-12T23:34:34Z
created_by Eugene Blikh
owner bigbes@gmail.com
updated_at 2026-07-13T00:10:14Z
closed_at 2026-07-13T00:10:14Z
closed_by_session
external_ref NULL
spec_id
compaction_level 0
compacted_at NULL
compacted_at_commit NULL
original_size NULL
sender
ephemeral 0
wisp_type
pinned 0
is_template 0
mol_type
work_type
source_system
metadata �{}
source_repo
close_reason landed a1d6038, green; OpenAPI deviation from SPEC noted in package docs (flat paginated view tasks)
event_kind
actor
target
payload
await_type
await_id
timeout_ns 0
waiters
hook_bead
role_bead
agent_state
last_activity NULL
role_type
rig
due_at NULL
defer_until NULL
no_history 0
started_at 2026-07-12T23:55:04Z
is_blocked 0
dependencies 3 rows
id 02733ef0-9b14-5f6a-8ed2-6df1dc998b8f
issue_id ah-nyl.3
type parent-child
created_at 2026-07-13T02:34:34Z
created_by Eugene Blikh
metadata �{}
thread_id
depends_on_issue_id ah-nyl
depends_on_wisp_id NULL
depends_on_external NULL
id df62df6e-c2b7-5d57-aba9-77091e4e5410
issue_id ah-nyl.3
type blocks
created_at 2026-07-13T02:34:34Z
created_by Eugene Blikh
metadata �{}
thread_id
depends_on_issue_id ah-nyl.1
depends_on_wisp_id NULL
depends_on_external NULL
id f31cc1dc-1257-5f14-a5a1-af72404bacbc
issue_id ah-nyl.6
type blocks
created_at 2026-07-13T02:35:54Z
created_by Eugene Blikh
metadata �{}
thread_id
depends_on_issue_id ah-nyl.3
depends_on_wisp_id NULL
depends_on_external NULL
events 5 rows
id 019f58ae-bbf8-7b85-a2f8-a341f3fc6d9d
issue_id ah-nyl.3
event_type created
actor Eugene Blikh
old_value
new_value
comment NULL
created_at 2026-07-13T02:34:34Z
id 019f58c1-8017-7207-9931-05352f4e49b1
issue_id ah-nyl.3
event_type status_changed
actor Eugene Blikh
old_value {"id":"ah-nyl.3","title":"vikunja: Board adapter over the REST API","description":"Implement internal/vikunja per docs/SPEC.md SS8 (read SPEC fully; SS6, SS8 normative). ports.Board over the Vikunja 2.3.0 REST API.\n\nDeliverables:\n- New(cfg config.Vikunja, logger *slog.Logger) (*Client, error) storing an http.Client with a sane timeout (~15s).\n- Bucket resolution per SPEC SS8: locate the kanban view of the configured project, build title-\u003ebucketID and bucketID-\u003ecanonical-name maps from the config buckets mapping; missing configured title = error listing found titles. Resolve lazily on first use and cache; provide a Refresh path when a lookup misses (board edited).\n- Snapshot(ctx): tasks of the project with canonical bucket names (\"\" for unmapped buckets), honoring pagination.\n- MoveToBucket(ctx, taskID, canonical), Comment(ctx, taskID, markdown), each per SPEC SS8 endpoints.\n- Error style: non-2xx -\u003e error with method, path, status, and \u003c=200 bytes of body.\n- Compile-time check: var _ ports.Board = (*Client)(nil).\n\nIMPORTANT — verify the real API contract before coding: the live OpenAPI JSON is at https://tasks.bigb.es/api/v1/docs.json (Swagger UI at /api/v1/docs) — fetch it (no auth needed for the spec itself) and confirm exact paths, request/response shapes, and pagination headers for: project views list, kanban view tasks, buckets list, bucket task move, comment create (Vikunja uses PUT-for-create), single task get. If the live spec is unreachable, use the upstream docs at https://vikunja.io/docs/ and pin your best understanding in code comments + fixtures. SPEC SS8's endpoint list is the expected shape, not gospel — trust the OpenAPI.\n\nTests: httptest.Server fixtures (JSON canned from the OpenAPI shapes) covering snapshot incl. pagination + unmapped buckets, bucket resolution failure (helpful error), move, comment, non-2xx error rendering. No live-network tests.\n\nConstraints: work ONLY under internal/vikunja/. No go.mod changes, no other packages, no .beads/. Build/test ONLY your package (go build/vet/test ./internal/vikunja/...). Commit 'vikunja: ...' staging only internal/vikunja. Do NOT push.\n","status":"open","priority":1,"issue_type":"task","owner":"bigbes@gmail.com","created_at":"2026-07-12T23:34:34Z","created_by":"Eugene Blikh","updated_at":"2026-07-12T23:34:34Z"}
new_value {"status":"in_progress"}
comment NULL
created_at 2026-07-13T02:55:04Z
id 019f58cf-6268-7a73-a122-07e4b4f7bb2e
issue_id ah-nyl.3
event_type closed
actor Eugene Blikh
old_value
new_value landed a1d6038, green; OpenAPI deviation from SPEC noted in package docs (flat paginated view tasks)
comment NULL
created_at 2026-07-13T03:10:13Z
id 019f7cda-9088-789f-805e-f0b05c7e1516
issue_id ah-nyl.3
event_type label_added
actor Eugene Blikh
old_value NULL
new_value NULL
comment Added label: milestone:stage-1
created_at 2026-07-20T03:08:46Z
id 019f7cdc-03b3-771c-ab73-437e8a092b8e
issue_id ah-nyl.3
event_type label_removed
actor Eugene Blikh
old_value NULL
new_value NULL
comment Removed label: milestone:stage-1
created_at 2026-07-20T03:10:21Z