~bigbes/agents-dev · parade

main · last commit 13 days ago · 7g0stsfu

← Back to the parade

ah-nyl.1 foundation: go module, domain, ports, config Past Stand

status: closed P0 task
bd reopen ah-nyl.1
Created byEugene Blikh
Ownerbigbes@gmail.com
Created2026-07-12T23:34:03Z
Started2026-07-12T23:38:10Z
Updated2026-07-12T23:55:03Z
Closed2026-07-12T23:55:03Z
Description
Create the Go foundation of agents-dev exactly per docs/SPEC.md (read it fully first; SS4-6, SS12-13 are normative for this task).

Deliverables:
1. go.mod: module go.bigb.es/agents-dev, go 1.26. Add ALL stage-1 external deps now so siblings never touch go.mod: modernc.org/sqlite, gopkg.in/yaml.v3. Populate go.sum by building a throwaway smoke import (e.g. internal/smoke_test.go importing both, then delete the file but keep go.sum entries; or keep a tiny blank-import file under internal/deps/deps.go with build tag 'deps' — your choice, document it).
2. internal/domain: types + constants from SPEC SS5 (State, Outcome, Task, Repo, TaskRecord, Run, Event, RunSummary) and pure transition helpers, at minimum CanClaim(*TaskRecord) bool per SS5 semantics. Table tests for every helper.
3. internal/ports: interfaces exactly as SPEC SS6 (Board, Runner, Store, Notifier + BoardTask, StartSpec, RunInfo, RunStatus). Doc comments on every method stating error/nil semantics ((nil, nil) for absent, etc.).
4. internal/config: Load(path string) (*Config, error) implementing SPEC SS12: yaml.v3 with KnownFields(true), ${VAR} env expansion in string values (only for vars that exist; unknown var = validation error), "~" expansion in paths, duration parsing, validation that collects ALL problems into one error (repos non-empty, default_repo/default_role resolve, buckets map has all six canonical keys, listen is loopback host:port). Config struct mirrors config.example.yaml at repo root (keep the two in sync; fix the example if you find an inconsistency and note it in the commit message). Tests: golden-load of config.example.yaml with env set, plus failure cases.

Rules: stdlib + the two deps only; log/slog if logging is needed (probably not here); no package-level state. Run: go build ./... && go vet ./... && go test ./... (allowed for THIS task only, since you own the whole tree). Commit everything as one or two commits, message style 'domain: ...', 'config: ...'. Do NOT push. Do NOT touch .beads/.

Acceptance: go build/vet/test green on a clean checkout; interfaces compile exactly against the names/signatures in SPEC SS6 (parallel siblings will implement them verbatim); config.example.yaml loads.

Depends on

  • ah-nyl — Stage 1 MVP: poll-driven happy path parent-child closed

Depended on by

  • ah-nyl.5 — reconcile: the control loop blocks
  • ah-nyl.2 — store: SQLite implementation of ports.Store blocks
  • ah-nyl.4 — runner: pi+zellij implementation + ahub-run supervisor blocks
  • ah-nyl.3 — vikunja: Board adapter over the REST API blocks

Unblocks — everything waiting on this, transitively

  • ah-nyl.5 — reconcile: the control loop blocks closed
  • 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
  • ah-nyl.2 — store: SQLite implementation of ports.Store blocks closed
  • ah-nyl.4 — runner: pi+zellij implementation + ahub-run supervisor blocks closed
  • ah-nyl.3 — vikunja: Board adapter over the REST API blocks closed

No comments.

Close reason

Closed
  • Eugene Blikh added under epic ah-nyl · 2026-07-13T02:34:03Z
  • Eugene Blikh created the issue · 2026-07-13T02:34:03Z
  • Eugene Blikh ah-nyl.2 now depends on this · 2026-07-13T02:34:33Z
  • Eugene Blikh ah-nyl.3 now depends on this · 2026-07-13T02:34:34Z
  • Eugene Blikh ah-nyl.4 now depends on this · 2026-07-13T02:35:16Z
  • Eugene Blikh ah-nyl.5 now depends on this · 2026-07-13T02:35:17Z
  • Eugene Blikh changed status to in_progress · 2026-07-13T02:38:10Z
  • Eugene Blikh closed the issue · 2026-07-13T02:55:02Z
    Closed
  • Eugene Blikh added label milestone:stage-1 · 2026-07-20T03:08:46Z
  • Eugene Blikh removed label milestone:stage-1 · 2026-07-20T03:10:19Z
Stored rows — what this pane was built from, as read
issues 1 row
id ah-nyl.1
content_hash faee2c254f4120dc1b198544543cd6073a586bf48f0606929988685660049281
title foundation: go module, domain, ports, config
description Create the Go foundation of agents-dev exactly per docs/SPEC.md (read it fully first; SS4-6, SS12-13 are normative for this task). Deliverables: 1. go.mod: module go.bigb.es/agents-dev, go 1.26. Add ALL stage-1 external deps now so siblings never touch go.mod: modernc.org/sqlite, gopkg.in/yaml.v3. Populate go.sum by building a throwaway smoke import (e.g. internal/smoke_test.go importing both, then delete the file but keep go.sum entries; or keep a tiny blank-import file under internal/deps/deps.go with build tag 'deps' — your choice, document it). 2. internal/domain: types + constants from SPEC SS5 (State, Outcome, Task, Repo, TaskRecord, Run, Event, RunSummary) and pure transition helpers, at minimum CanClaim(*TaskRecord) bool per SS5 semantics. Table tests for every helper. 3. internal/ports: interfaces exactly as SPEC SS6 (Board, Runner, Store, Notifier + BoardTask, StartSpec, RunInfo, RunStatus). Doc comments on every method stating error/nil semantics ((nil, nil) for absent, etc.). 4. internal/config: Load(path string) (*Config, error) implementing SPEC SS12: yaml.v3 with KnownFields(true), ${VAR} env expansion in string values (only for vars that exist; unknown var = validation error), "~" expansion in paths, duration parsing, validation that collects ALL problems into one error (repos non-empty, default_repo/default_role resolve, buckets map has all six canonical keys, listen is loopback host:port). Config struct mirrors config.example.yaml at repo root (keep the two in sync; fix the example if you find an inconsistency and note it in the commit message). Tests: golden-load of config.example.yaml with env set, plus failure cases. Rules: stdlib + the two deps only; log/slog if logging is needed (probably not here); no package-level state. Run: go build ./... && go vet ./... && go test ./... (allowed for THIS task only, since you own the whole tree). Commit everything as one or two commits, message style 'domain: ...', 'config: ...'. Do NOT push. Do NOT touch .beads/. Acceptance: go build/vet/test green on a clean checkout; interfaces compile exactly against the names/signatures in SPEC SS6 (parallel siblings will implement them verbatim); config.example.yaml loads.
design
acceptance_criteria
notes
status closed
priority 0
issue_type task
assignee NULL
estimated_minutes NULL
created_at 2026-07-12T23:34:03Z
created_by Eugene Blikh
owner bigbes@gmail.com
updated_at 2026-07-12T23:55:03Z
closed_at 2026-07-12T23:55:03Z
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 Closed
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:38:10Z
is_blocked 0
dependencies 5 rows
id 83acbf1b-de37-5f6c-8145-18f5dfd53fbd
issue_id ah-nyl.1
type parent-child
created_at 2026-07-13T02:34:03Z
created_by Eugene Blikh
metadata �{}
thread_id
depends_on_issue_id ah-nyl
depends_on_wisp_id NULL
depends_on_external NULL
id 9d961c7a-5369-5b87-ab39-3aa80050e04e
issue_id ah-nyl.5
type blocks
created_at 2026-07-13T02:35:17Z
created_by Eugene Blikh
metadata �{}
thread_id
depends_on_issue_id ah-nyl.1
depends_on_wisp_id NULL
depends_on_external NULL
id a7480fd4-e1a1-5f90-8fba-f35f368fa473
issue_id ah-nyl.2
type blocks
created_at 2026-07-13T02:34:33Z
created_by Eugene Blikh
metadata �{}
thread_id
depends_on_issue_id ah-nyl.1
depends_on_wisp_id NULL
depends_on_external NULL
id d53dcd44-b88d-5f2b-9657-427bb2b99459
issue_id ah-nyl.4
type blocks
created_at 2026-07-13T02:35:16Z
created_by Eugene Blikh
metadata �{}
thread_id
depends_on_issue_id ah-nyl.1
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
events 5 rows
id 019f58ae-43b8-7683-a96f-8e547b31ec37
issue_id ah-nyl.1
event_type created
actor Eugene Blikh
old_value
new_value
comment NULL
created_at 2026-07-13T02:34:03Z
id 019f58b2-07e1-78e5-81fa-b80c23cd0964
issue_id ah-nyl.1
event_type status_changed
actor Eugene Blikh
old_value {"id":"ah-nyl.1","title":"foundation: go module, domain, ports, config","description":"Create the Go foundation of agents-dev exactly per docs/SPEC.md (read it fully first; SS4-6, SS12-13 are normative for this task).\n\nDeliverables:\n1. go.mod: module go.bigb.es/agents-dev, go 1.26. Add ALL stage-1 external deps now so siblings never touch go.mod: modernc.org/sqlite, gopkg.in/yaml.v3. Populate go.sum by building a throwaway smoke import (e.g. internal/smoke_test.go importing both, then delete the file but keep go.sum entries; or keep a tiny blank-import file under internal/deps/deps.go with build tag 'deps' — your choice, document it).\n2. internal/domain: types + constants from SPEC SS5 (State, Outcome, Task, Repo, TaskRecord, Run, Event, RunSummary) and pure transition helpers, at minimum CanClaim(*TaskRecord) bool per SS5 semantics. Table tests for every helper.\n3. internal/ports: interfaces exactly as SPEC SS6 (Board, Runner, Store, Notifier + BoardTask, StartSpec, RunInfo, RunStatus). Doc comments on every method stating error/nil semantics ((nil, nil) for absent, etc.).\n4. internal/config: Load(path string) (*Config, error) implementing SPEC SS12: yaml.v3 with KnownFields(true), ${VAR} env expansion in string values (only for vars that exist; unknown var = validation error), \"~\" expansion in paths, duration parsing, validation that collects ALL problems into one error (repos non-empty, default_repo/default_role resolve, buckets map has all six canonical keys, listen is loopback host:port). Config struct mirrors config.example.yaml at repo root (keep the two in sync; fix the example if you find an inconsistency and note it in the commit message). Tests: golden-load of config.example.yaml with env set, plus failure cases.\n\nRules: stdlib + the two deps only; log/slog if logging is needed (probably not here); no package-level state. Run: go build ./... \u0026\u0026 go vet ./... \u0026\u0026 go test ./... (allowed for THIS task only, since you own the whole tree). Commit everything as one or two commits, message style 'domain: ...', 'config: ...'. Do NOT push. Do NOT touch .beads/.\n\nAcceptance: go build/vet/test green on a clean checkout; interfaces compile exactly against the names/signatures in SPEC SS6 (parallel siblings will implement them verbatim); config.example.yaml loads.\n","status":"open","priority":0,"issue_type":"task","owner":"bigbes@gmail.com","created_at":"2026-07-12T23:34:03Z","created_by":"Eugene Blikh","updated_at":"2026-07-12T23:34:03Z"}
new_value {"status":"in_progress"}
comment NULL
created_at 2026-07-13T02:38:10Z
id 019f58c1-7bc1-7589-bf55-7eba737f89bf
issue_id ah-nyl.1
event_type closed
actor Eugene Blikh
old_value
new_value Closed
comment NULL
created_at 2026-07-13T02:55:02Z
id 019f7cda-9085-70a0-800f-bb52658a07b5
issue_id ah-nyl.1
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 019f7cdb-fa46-77e3-8b62-414b516ea0da
issue_id ah-nyl.1
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:19Z