main · last commit
13 days ago ·
7g0stsfu
ah-nyl.1 foundation: go module, domain, ports, config
Past Stand
bd reopen ah-nyl.1
| Created by | Eugene Blikh |
| Owner | bigbes@gmail.com |
| Created | 2026-07-12T23:34:03Z |
| Started | 2026-07-12T23:38:10Z |
| Updated | 2026-07-12T23:55:03Z |
| Closed | 2026-07-12T23:55:03Z |
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.
ah-nyl
— Stage 1 MVP: poll-driven happy path
parent-child
closed
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
| 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 |
| 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 |
| 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 |
No comments.
Close reason