chore(simplify): drop verbose comments + introduce DefaultMaxConcurrentTasks const

Simplify pass on top of the wire-up commit:

- New const models.DefaultMaxConcurrentTasks = 1; handlers and tests
  reference the symbol so the schema-default mirror lives in one place.
- Strip 5 multi-line comments that narrated what the code does.
- Drop the duplicate field-rationale on OrgWorkspace; the one on
  CreateWorkspacePayload is canonical.
- Drop test-side positional comments that would silently lie if columns
  get reordered.

Pure cleanup; no behaviour change.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
rabbitblood 2026-04-26 11:07:00 -07:00
parent ad5295cd8a
commit 4bcfc64e25
6 changed files with 16 additions and 31 deletions

View File

@ -11,6 +11,7 @@ import (
"time"
"github.com/DATA-DOG/go-sqlmock"
"github.com/Molecule-AI/molecule-monorepo/platform/internal/models"
"github.com/gin-gonic/gin"
)
@ -31,7 +32,7 @@ func TestWorkspaceCreate_WithParentID(t *testing.T) {
mock.ExpectBegin()
// Default tier is 3 (Privileged) — see workspace.go create-handler comment.
mock.ExpectExec("INSERT INTO workspaces").
WithArgs(sqlmock.AnyArg(), "Child Agent", nil, 3, "langgraph", sqlmock.AnyArg(), &parentID, nil, "none", (*int64)(nil), 1).
WithArgs(sqlmock.AnyArg(), "Child Agent", nil, 3, "langgraph", sqlmock.AnyArg(), &parentID, nil, "none", (*int64)(nil), models.DefaultMaxConcurrentTasks).
WillReturnResult(sqlmock.NewResult(0, 1))
mock.ExpectCommit()
mock.ExpectExec("INSERT INTO canvas_layouts").
@ -66,7 +67,7 @@ func TestWorkspaceCreate_ExplicitClaudeCodeRuntime(t *testing.T) {
mock.ExpectBegin()
mock.ExpectExec("INSERT INTO workspaces").
WithArgs(sqlmock.AnyArg(), "CC Agent", nil, 2, "claude-code", sqlmock.AnyArg(), (*string)(nil), nil, "none", (*int64)(nil), 1).
WithArgs(sqlmock.AnyArg(), "CC Agent", nil, 2, "claude-code", sqlmock.AnyArg(), (*string)(nil), nil, "none", (*int64)(nil), models.DefaultMaxConcurrentTasks).
WillReturnResult(sqlmock.NewResult(0, 1))
mock.ExpectCommit()
mock.ExpectExec("INSERT INTO canvas_layouts").
@ -277,12 +278,8 @@ func TestWorkspaceList_WithData(t *testing.T) {
}
}
// ---------- workspace.go: Create with explicit max_concurrent_tasks (#1408) ----------
// ---------- workspace.go: Create with explicit max_concurrent_tasks ----------
// Locks the wire-up that lets a leader workspace's template config.yaml
// (or a direct API caller) set max_concurrent_tasks > 1 so an in-flight
// cron doesn't reject incoming A2A delegations. Schema default is 1; a
// non-zero payload value must reach the INSERT verbatim.
func TestWorkspaceCreate_MaxConcurrentTasksOverride(t *testing.T) {
mock := setupTestDB(t)
setupTestRedis(t)
@ -290,7 +287,6 @@ func TestWorkspaceCreate_MaxConcurrentTasksOverride(t *testing.T) {
handler := NewWorkspaceHandler(broadcaster, nil, "http://localhost:8080", t.TempDir())
mock.ExpectBegin()
// 11th arg = max_concurrent_tasks; payload says 3, must propagate.
mock.ExpectExec("INSERT INTO workspaces").
WithArgs(sqlmock.AnyArg(), "Leader Agent", nil, 3, "claude-code", sqlmock.AnyArg(), (*string)(nil), nil, "none", (*int64)(nil), 3).
WillReturnResult(sqlmock.NewResult(0, 1))

View File

@ -290,10 +290,8 @@ func TestWorkspaceCreate(t *testing.T) {
// Expect workspace INSERT (uuid is dynamic, use AnyArg for id, runtime, awareness_namespace).
// Default tier is 3 (Privileged) — see workspace.go create-handler comment.
// 11th arg: max_concurrent_tasks defaults to 1 when payload omits it
// (see workspace.go Create handler — schema default mirror, #1408).
mock.ExpectExec("INSERT INTO workspaces").
WithArgs(sqlmock.AnyArg(), "Test Agent", nil, 3, "langgraph", sqlmock.AnyArg(), (*string)(nil), nil, "none", (*int64)(nil), 1).
WithArgs(sqlmock.AnyArg(), "Test Agent", nil, 3, "langgraph", sqlmock.AnyArg(), (*string)(nil), nil, "none", (*int64)(nil), models.DefaultMaxConcurrentTasks).
WillReturnResult(sqlmock.NewResult(0, 1))
// Expect transaction commit (no secrets in this payload)

View File

@ -287,13 +287,7 @@ type OrgWorkspace struct {
// InitialMemories are memories seeded into this workspace at creation
// time. If empty, defaults.initial_memories are used. Issue #1050.
InitialMemories []models.MemorySeed `yaml:"initial_memories" json:"initial_memories"`
// MaxConcurrentTasks lets a leader workspace handle multiple A2A
// messages + cron fires concurrently (#1408). Default 1 keeps the
// classic worker-style serialised execution; bump to 3 for leaders
// (PM, leads with 5-min orchestrator pulses) so an in-flight cron
// doesn't reject incoming A2A delegations. Wired into the workspaces
// table at template-import time + read by the scheduler's capacity
// check (workspace-server/internal/scheduler/scheduler.go).
// MaxConcurrentTasks: see models.CreateWorkspacePayload.
MaxConcurrentTasks int `yaml:"max_concurrent_tasks" json:"max_concurrent_tasks"`
Schedules []OrgSchedule `yaml:"schedules" json:"schedules"`
Channels []OrgChannel `yaml:"channels" json:"channels"`

View File

@ -103,12 +103,9 @@ func (h *OrgHandler) createWorkspaceTree(ws OrgWorkspace, parentID *string, absX
// (see canvas-topology.ts), so imports don't spray the viewport.
initialCollapsed := false
// max_concurrent_tasks from org template (#1408). 0/omitted → schema
// default of 1. Leaders typically set 3 in their org.yaml so an
// in-flight cron doesn't reject incoming A2A delegations.
maxConcurrent := ws.MaxConcurrentTasks
if maxConcurrent <= 0 {
maxConcurrent = 1
maxConcurrent = models.DefaultMaxConcurrentTasks
}
_, err := db.DB.ExecContext(ctx, `
INSERT INTO workspaces (id, name, role, tier, runtime, awareness_namespace, status, parent_id, workspace_dir, workspace_access, max_concurrent_tasks)

View File

@ -210,12 +210,9 @@ func (h *WorkspaceHandler) Create(c *gin.Context) {
return
}
// max_concurrent_tasks: payload-supplied → write as-is; 0/omitted →
// fall back to the schema default (1). Single INSERT shape regardless,
// avoids a forked column list. (#1408)
maxConcurrent := payload.MaxConcurrentTasks
if maxConcurrent <= 0 {
maxConcurrent = 1
maxConcurrent = models.DefaultMaxConcurrentTasks
}
// Insert workspace with runtime persisted in DB (inside transaction)
_, err := tx.ExecContext(ctx, `

View File

@ -6,6 +6,12 @@ import (
"time"
)
// DefaultMaxConcurrentTasks mirrors the workspaces.max_concurrent_tasks
// schema default. Handlers that resolve a 0/omitted payload value write
// this constant so the read-side (scheduler capacity check) sees a
// guaranteed non-zero column on every row.
const DefaultMaxConcurrentTasks = 1
type Workspace struct {
ID string `json:"id" db:"id"`
Name string `json:"name" db:"name"`
@ -85,11 +91,8 @@ type CreateWorkspacePayload struct {
// workspace secrets at creation time. Stored encrypted (same path as
// POST /workspaces/:id/secrets). Nil/empty map is a no-op.
Secrets map[string]string `json:"secrets"`
// MaxConcurrentTasks caps how many A2A messages + cron fires the
// scheduler will dispatch in parallel for this workspace (#1408).
// 0 = use the schema default of 1 (serialised, worker-style).
// Set to 3 for leaders with frequent orchestrator pulses so an
// in-flight cron doesn't reject incoming A2A delegations.
// MaxConcurrentTasks caps parallel A2A + cron dispatch. 0 means use
// DefaultMaxConcurrentTasks. Leaders typically set 3.
MaxConcurrentTasks int `json:"max_concurrent_tasks"`
Canvas struct {
X float64 `json:"x"`