Skip to content

Comments

feat: Board Roadmap MVP task generation (#142)#17

Open
wolverin0 wants to merge 8 commits intomainfrom
feat/board-roadmap-v1-142
Open

feat: Board Roadmap MVP task generation (#142)#17
wolverin0 wants to merge 8 commits intomainfrom
feat/board-roadmap-v1-142

Conversation

@wolverin0
Copy link
Owner

@wolverin0 wolverin0 commented Feb 18, 2026

Summary

Implements Board Roadmap MVP with markdown checklist parsing and idempotent task generation from unchecked roadmap items.

What changed

  • Added BoardRoadmap model (1:1 with Board)
  • Added BoardRoadmapTaskLink model (roadmap_item_key -> task_id)
  • Added unchecked checklist parser (- [ ] item)
  • Added BoardRoadmapTaskGenerator service
  • Added board UI for roadmap editing and task generation
  • Added routes/controller actions:
    • PATCH /boards/:board_id/roadmap
    • POST /boards/:board_id/roadmap/generate_tasks
  • Added auth-safe board scoping via current_user.boards.find
  • Added tests for parser, generation, idempotency, and permissions

Validation

  • bin/rails db:migrate
  • bin/rails test test/services/board_roadmap_task_generator_test.rb test/controllers/boards/roadmaps_controller_test.rb

Both passed with 0 failures and 0 errors.

Model fixes:
- task_dependency: error messages ('circular dependency', 'cannot depend on itself')
  + self.strict_loading_mode = :n_plus_one + skip circular check for self-deps
- task_template: global slug uniqueness now scoped to global templates only
  (prevents fixture interference with create_defaults! tests)
- factory_cycle_log: belongs_to :factory_loop optional: true
- notification: add after_create :enforce_cap_for_user callback
- task/agent_integration: in_progress_requires_active_lease only checks
  claimed tasks (agent_claimed_at.present?); requires_agent_output_for_done?
  only checks claimed/session tasks (not just assigned)

Migrations:
- 20260218140000: allow null source on runner_leases
- 20260218140001: add expires_at to api_tokens
- 20260218140002: allow null factory_loop_id on factory_cycle_logs

Test fixes:
- task_dependency_test: add 3rd create for for_task scope; fix self-dep message
- openclaw_integration_status_test: clean up users(:two) in setup;
  assert_raises(ArgumentError) for invalid enum value
- task_template_test: fix %w[] slug literal, validation_command commands,
  ordered scope destroy_all, @board.slug → hardcoded slug, priority slugs
- agent_test_recording_test: delete_all fixtures before for_task assertion
- agent_auto_runner_service_test: add orchestration_mode pipeline_assist;
  destroy onboarding boards to prevent sample task interference
- task_activity_test: actor → actor_name/type; fix record_creation(task)
  and record_status_change(task, old_status:, new_status:) signatures
- behavioral_intervention_test: valid AuditReport (daily + score)
- openclaw_memory_search_health_service_test: service now uses HTTP probe

Service fixes:
- openclaw_memory_search_health_service: use HTTP probe instead of CLI
  (post_json('/api/memory/search')) to match test expectations

View fixes:
- _panel.html.erb: mobile div classes include min-h-0 + overflow-y-auto

Controller fixes:
- file_viewer_controller: return 403 (not 404) for nonexistent files
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant