Batch: agent work from agent-develop #101

Merged
EduarD3V merged 20 commits from agent-develop into develop 2026-10-09 18:30:25 +02:00
Collaborator

One batch of agent work, integrated on agent-develop and conflict-free against develop.

Commits:

5b84430 Merge pull request 'feat(plan): typed steps carry id, allow_failure, timeout_seconds' (#99) from issue/89-typed-steps into agent-develop
2cf65f0 Merge pull request 'Sync develop into agent-develop' (#100) from develop into agent-develop
aca2b39 feat(plan): typed steps carry id, allow_failure, timeout_seconds

Merged issue PRs:
Merge pull request 'feat(plan): typed steps carry id, allow_failure, timeout_seconds' (#99) from issue/89-typed-steps into agent-develop
Merge pull request 'Sync develop into agent-develop' (#100) from develop into agent-develop

CI runs on this PR: the five required contexts on develop must be green before it is merged.
Every contained PR was already green on its own branch.

Refs (#26 etc. - no closing keywords).

One batch of agent work, integrated on `agent-develop` and conflict-free against `develop`. Commits: ``` 5b84430 Merge pull request 'feat(plan): typed steps carry id, allow_failure, timeout_seconds' (#99) from issue/89-typed-steps into agent-develop 2cf65f0 Merge pull request 'Sync develop into agent-develop' (#100) from develop into agent-develop aca2b39 feat(plan): typed steps carry id, allow_failure, timeout_seconds ``` Merged issue PRs: Merge pull request 'feat(plan): typed steps carry id, allow_failure, timeout_seconds' (#99) from issue/89-typed-steps into agent-develop Merge pull request 'Sync develop into agent-develop' (#100) from develop into agent-develop CI runs on this PR: the five required contexts on `develop` must be green before it is merged. Every contained PR was already green on its own branch. Refs (#26 etc. - no closing keywords).
Plan.steps: string[] on wire stays byte-identical. Add optional typed overlay
via contract.typedSteps; bare string[] clients keep working unchanged.

- normalizeStepInput maps `string | {run, id?, allow_failure?, timeout_seconds?,
  description?}` onto a Plan.steps entry (run[]) and a contract.typedSteps
  entry (typed); both paths are read by the agent and the dashboard.
- Prose steps are rejected at create time with the 1-based offending index
  (skipped when steps contain an agent block). The length violation now names
  the index and the actual length; "step longer than 64 chars" is gone.
- allow_failure is enforced at middleware scoring time only; Go's Step has no
  such field and unknown YAML keys are ignored. timeout_seconds (1..86400)
  is emitted as the YAML `timeout:` for repo plans.
- New migration 0033_plan_typed_steps (typedSteps on plan_contract jsonb).
- UC-MW-174 typed steps surface; UC-MW-175 prose rejection at create time.
- 11 new tests (typed-step creation, normalizeStepInput, planFingerprint
  unchanged, the patched steps, the AllowFailure scoring seam, expiry-1..
  86400, dbColumn round-trip via the contract).

Gates:
- UC-MW-174 + UC-MW-175: 11 pass / 0 fail / 29 expect() / 16.15 s
- middleware/tests/uc-mw-cluster2-plans.test.ts: 17 pass / 1 fail
  (UC-MW-35 DELETE idempotent — pre-existing on base 038c94b, unrelated to
  this change)
- docs/use-cases/_check.py: 366 UCs conform
- scripts/check-ai-headers.py: 579 ok / 0 missing / 0 malformed
- scripts/check-type-mirror.py: clean (4 dashboard-only types noted as info)

Refs #89
Merge pull request 'feat(plan): typed steps carry id, allow_failure, timeout_seconds' (#99) from issue/89-typed-steps into agent-develop
All checks were successful
agent-guards / test-tampering (pull_request) Successful in 1m5s
CI and agent release / check-docs (pull_request) Successful in 21s
CI and agent release / test-agent (pull_request) Successful in 1m34s
CI and agent release / test-dashboard (pull_request) Successful in 3m0s
CI and agent release / test-middleware (pull_request) Successful in 9m36s
CI and agent release / build (pull_request) Has been skipped
CI and agent release / release (pull_request) Has been skipped
CI and agent release / publish-images (pull_request) Has been skipped
5b84430f26
The control tool params omitted requirements, and planCreateBody/
applyPlanPatch dropped the field, so no path could declare what a plan
needs. Params, tool schemas, PLAN_PATCH_KEYS and the write path now carry
it through to compatibility scoring.

Refs #90 (UC-MW-176)
POST /plans/:id/run ignored rule hostnames/groupIds, so a plan pinned to
adam-slave-0 could be hand-run on any enrolled agent. The route now
considers every rule referencing the plan and refuses 409 unless at least
one allows the target host; no referencing rule stays unrestricted.

Refs #90 (UC-MW-177)
rule | manual | retry, stamped by the rule-matched pipeline and incident
paths, the manual run route, and retry; persisted in a nullable text
column (0034) and surfaced in execution summaries and the dashboard
mirror. Paths with no matched rule leave it undefined.

Refs #90 (UC-MW-177)
The related: edits for UC-MW-176/UC-MW-177 left '- - [link]' lines in
five partner UCs' Related headings. Single bullets again.

Refs #90
Issue #90 requires every execution to record trigger. The control-chat
machine-command run and the operator agent test are manual dispatches;
rollback and chain continuations already carry the parent's ruleId, so
they inherit the parent trigger. Alert diagnostics with no matched rule
and agent-internal steps stay undefined (UC-MW-177 4a).

Refs #90
Merge pull request 'feat(plan): requirements reachable from create_plan and plan_update; dispatch honours rule hostnames' (#102) from issue/90-requirements-hostnames into agent-develop
All checks were successful
agent-guards / test-tampering (pull_request) Successful in 52s
CI and agent release / check-docs (pull_request) Successful in 32s
CI and agent release / test-agent (pull_request) Successful in 1m54s
CI and agent release / test-dashboard (pull_request) Successful in 3m11s
CI and agent release / test-middleware (pull_request) Successful in 9m58s
CI and agent release / build (pull_request) Has been skipped
CI and agent release / release (pull_request) Has been skipped
CI and agent release / publish-images (pull_request) Has been skipped
3122e89e20
Merge pull request 'Issue #91: memory rows naming gotoi object IDs go stale on delete' (#104) from issue/91-memory-row-invalidation into agent-develop
All checks were successful
CI and agent release / test-middleware (pull_request) Successful in 9m31s
CI and agent release / build (pull_request) Has been skipped
CI and agent release / release (pull_request) Has been skipped
CI and agent release / publish-images (pull_request) Has been skipped
CI and agent release / check-docs (pull_request) Successful in 25s
agent-guards / test-tampering (pull_request) Successful in 40s
CI and agent release / test-agent (pull_request) Successful in 1m32s
CI and agent release / test-dashboard (pull_request) Successful in 2m56s
ffa37d5df9
FeedTable used table-fixed w-full whenever the caller passed no columnStyle
(/plans/incidents, /plans/executions). table-cell carries whitespace-nowrap, so
each column locked to an equal fraction of the pane while its content was wider;
the text overflowed the cell box and painted over its neighbour, and the
overflow-auto wrapper had nothing to scroll because the table never exceeded
100%.

Measurements on the live stack at 700px: verdict cell clientWidth 87 vs
scrollWidth 119 (+32), status +19, planId +11; incidents at 390px warning +27,
resolved +30. /alerts already passed columnStyle and stayed on the table-auto
branch, and did not overlap.

Drop the table-fixed branch: the base table is always w-max min-w-full
table-auto, so columns size to content and the existing wrapper scrolls.
After: zero overflowing cells at 390/480/700px on both pages; wrapper scrollWidth
807 vs clientWidth 364 at 390px.

Also removes an incidental table-fixed source assertion from the UC-FE-27 test
(it pinned the defect), and records the narrow-width scroll rule in UC-FE-75.

Refs #93
The story claimed a per-cell min-width; FeedTable applies no min-width on
the incidents/executions path (columnStyle is alerts-only, head cells only).
State the actual invariant: w-max min-w-full table-auto, matching DataTable.
Merge pull request 'Issue #93: feed tables never overlap cell text at narrow widths (table-auto + scroll)' (#105) from issue/93-table-fitting into agent-develop
Some checks failed
agent-guards / test-tampering (pull_request) Failing after 40s
CI and agent release / check-docs (pull_request) Successful in 30s
CI and agent release / test-agent (pull_request) Successful in 1m43s
CI and agent release / test-dashboard (pull_request) Successful in 2m49s
CI and agent release / test-middleware (pull_request) Has been cancelled
CI and agent release / build (pull_request) Has been cancelled
CI and agent release / release (pull_request) Has been cancelled
CI and agent release / publish-images (pull_request) Has been cancelled
d9d3f53cc6
Merge pull request 'docs(canon): reviewer-static + perf-pass (canvas drift fixes)' (#98) from docs/reviewer-static-checkers into agent-develop
Some checks failed
agent-guards / test-tampering (pull_request) Failing after 34s
CI and agent release / check-docs (pull_request) Successful in 30s
CI and agent release / test-agent (pull_request) Successful in 1m41s
CI and agent release / test-dashboard (pull_request) Successful in 3m5s
CI and agent release / test-middleware (pull_request) Successful in 9m26s
CI and agent release / build (pull_request) Has been skipped
CI and agent release / release (pull_request) Has been skipped
CI and agent release / publish-images (pull_request) Has been skipped
cd202e999a
Reviewed-on: #98
EduarD3V merged commit 1410e73aa1 into develop 2026-10-09 18:30:25 +02:00
Sign in to join this conversation.
No description provided.