@zalom/plastic 2.0.0-alpha.27 → 2.0.0-alpha.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PLASTIC.md +13 -139
- package/README.md +337 -133
- package/agents/plastic-enforcer.md +9 -10
- package/agents/plastic-executor.md +1 -1
- package/bin/crap +4 -0
- package/bin/lib/context_budget.rb +35 -1
- package/bin/lib/skill_census.rb +839 -0
- package/bin/plastic +6 -0
- package/bin/plastic-skill-census +114 -0
- package/bin/verify-change +345 -0
- package/deprecations.yml +1 -1
- package/{skills/agent-advisor/references → docs/help}/advisor-protocol.md +4 -7
- package/{skills/auto/references → docs/help}/agent-architecture.md +7 -7
- package/{skills/conventions/references → docs/help}/completion-and-done.md +1 -1
- package/{skills/auto/references → docs/help}/human-report-contract.md +17 -19
- package/{skills/conventions/references → docs/help}/roadmaps.md +2 -2
- package/{skills/tutorial/references → docs/help}/track-1-guided.md +8 -8
- package/{skills/tutorial/references → docs/help}/track-2-auto.md +5 -5
- package/{skills/tutorial/references → docs/help}/track-3-projects-and-roadmaps.md +24 -17
- package/package.json +3 -2
- package/scripts/append-ledger +2 -1
- package/scripts/dashboard.rb +10 -9
- package/scripts/day-summary +2 -1
- package/scripts/doctor.rb +48 -42
- package/scripts/end-intent +2 -8
- package/scripts/file-session-intent +2 -1
- package/scripts/hook-capture +4 -3
- package/scripts/hook-close +2 -1
- package/scripts/hook-record +3 -2
- package/scripts/hook-savepoint +3 -2
- package/scripts/hook-session-start +5 -4
- package/scripts/hook-stop +2 -1
- package/scripts/insight-append +1 -2
- package/scripts/install.rb +3 -1
- package/scripts/lib/active_delivery.rb +1 -1
- package/scripts/lib/arm.rb +2 -1
- package/scripts/lib/backup.rb +63 -0
- package/scripts/lib/cli/command.rb +85 -0
- package/scripts/lib/cli/commands/auto.rb +18 -0
- package/scripts/lib/cli/commands/auto_brief.rb +44 -0
- package/scripts/lib/cli/commands/auto_lock.rb +60 -0
- package/scripts/lib/cli/commands/auto_report.rb +50 -0
- package/scripts/lib/cli/commands/auto_take.rb +25 -0
- package/scripts/lib/cli/commands/backup.rb +43 -0
- package/scripts/lib/cli/commands/checkout.rb +25 -0
- package/scripts/lib/cli/commands/continue.rb +66 -0
- package/scripts/lib/cli/commands/doctor.rb +20 -0
- package/scripts/lib/cli/commands/feedback.rb +40 -0
- package/scripts/lib/cli/commands/help.rb +69 -0
- package/scripts/lib/cli/commands/hook.rb +32 -0
- package/scripts/lib/cli/commands/index.rb +23 -0
- package/scripts/lib/cli/commands/install.rb +21 -0
- package/scripts/lib/cli/commands/installer_verb.rb +37 -0
- package/scripts/lib/cli/commands/intent.rb +19 -0
- package/scripts/lib/cli/commands/intent_answer.rb +37 -0
- package/scripts/lib/cli/commands/intent_command.rb +53 -0
- package/scripts/lib/cli/commands/intent_end.rb +61 -0
- package/scripts/lib/cli/commands/intent_new.rb +62 -0
- package/scripts/lib/cli/commands/intent_note.rb +43 -0
- package/scripts/lib/cli/commands/intent_rule.rb +36 -0
- package/scripts/lib/cli/commands/intent_show.rb +25 -0
- package/scripts/lib/cli/commands/intent_spec.rb +44 -0
- package/scripts/lib/cli/commands/intent_step.rb +43 -0
- package/scripts/lib/cli/commands/intent_verify.rb +26 -0
- package/scripts/lib/cli/commands/migrate.rb +16 -0
- package/scripts/lib/cli/commands/migrate_stores.rb +31 -0
- package/scripts/lib/cli/commands/next.rb +49 -0
- package/scripts/lib/cli/commands/project.rb +19 -0
- package/scripts/lib/cli/commands/project_links.rb +42 -0
- package/scripts/lib/cli/commands/project_list.rb +20 -0
- package/scripts/lib/cli/commands/project_new.rb +72 -0
- package/scripts/lib/cli/commands/query.rb +31 -0
- package/scripts/lib/cli/commands/render.rb +25 -0
- package/scripts/lib/cli/commands/roadmap.rb +19 -0
- package/scripts/lib/cli/commands/roadmap_check.rb +44 -0
- package/scripts/lib/cli/commands/roadmap_log.rb +54 -0
- package/scripts/lib/cli/commands/roadmap_next.rb +34 -0
- package/scripts/lib/cli/commands/roadmap_show.rb +45 -0
- package/scripts/lib/cli/commands/rollback.rb +20 -0
- package/scripts/lib/cli/commands/search.rb +60 -0
- package/scripts/lib/cli/commands/session.rb +18 -0
- package/scripts/lib/cli/commands/session_commit.rb +42 -0
- package/scripts/lib/cli/commands/session_handoff.rb +34 -0
- package/scripts/lib/cli/commands/session_summary.rb +35 -0
- package/scripts/lib/cli/commands/status.rb +68 -0
- package/scripts/lib/cli/commands/subcommand_list.rb +36 -0
- package/scripts/lib/cli/commands/sync.rb +46 -0
- package/scripts/lib/cli/commands/uninstall.rb +20 -0
- package/scripts/lib/cli/commands/update.rb +20 -0
- package/scripts/lib/cli/commands/version.rb +53 -0
- package/scripts/lib/cli/frontier.rb +84 -0
- package/scripts/lib/cli/legacy.rb +50 -0
- package/scripts/lib/cli/output.rb +102 -0
- package/scripts/lib/cli/scope.rb +127 -0
- package/scripts/lib/cli/table.rb +64 -0
- package/scripts/lib/cli.rb +94 -0
- package/scripts/lib/compact_instructions.rb +8 -0
- package/scripts/lib/day_summary.rb +4 -3
- package/scripts/lib/doctor_core.rb +7 -32
- package/scripts/lib/doctor_session_ledger.rb +2 -1
- package/scripts/lib/feedback_report.rb +1 -1
- package/scripts/lib/graph_measure_models.rb +3 -1
- package/scripts/lib/index_entry.rb +9 -0
- package/scripts/lib/installer_core.rb +73 -19
- package/scripts/lib/intent_screen.rb +3 -3
- package/scripts/lib/lock.rb +2 -2
- package/scripts/lib/node_input.rb +3 -2
- package/scripts/lib/preflight.rb +2 -4
- package/scripts/lib/project_config.rb +2 -1
- package/scripts/lib/project_validator.rb +3 -2
- package/scripts/lib/qmd_sync.rb +8 -7
- package/scripts/lib/reference_archive.rb +45 -0
- package/scripts/lib/release_guard.rb +2 -0
- package/scripts/lib/report_screen.rb +4 -3
- package/scripts/lib/rlm/corpus.rb +13 -0
- package/scripts/lib/rlm/probe.rb +29 -0
- package/scripts/lib/rlm/query.rb +22 -0
- package/scripts/lib/roadmap_queue.rb +2 -2
- package/scripts/lib/roadmap_savepoint.rb +1 -1
- package/scripts/lib/runner_absorb.rb +3 -2
- package/scripts/lib/search_index.rb +55 -0
- package/scripts/lib/session_git.rb +4 -3
- package/scripts/lib/sqlite.rb +22 -0
- package/scripts/lib/store_discovery.rb +7 -6
- package/scripts/lib/store_layout.rb +54 -0
- package/scripts/lib/store_provisioning.rb +2 -1
- package/scripts/lib/store_sync.rb +85 -0
- package/scripts/lib/stores_move.rb +93 -0
- package/scripts/lib/verify_intent.rb +2 -7
- package/scripts/lib/version_number.rb +48 -0
- package/scripts/lib/work_graph.rb +59 -0
- package/scripts/lib/worktree.rb +3 -8
- package/scripts/lib/worktree_sweep.rb +3 -2
- package/scripts/link-suggest +2 -1
- package/scripts/migrate-to-global +1 -1
- package/scripts/new-intent +3 -12
- package/scripts/plastic-lock +3 -2
- package/scripts/promote-session-item +3 -2
- package/scripts/release-check +10 -5
- package/scripts/report-screen +1 -1
- package/scripts/session-commit +2 -1
- package/scripts/spawn-preamble +2 -2
- package/scripts/update.rb +25 -4
- package/scripts/write-handoff +2 -1
- package/templates/agents.md +6 -6
- package/templates/render.css +10 -0
- package/bin/plastic.js +0 -70
- package/skills/agent-advisor/SKILL.md +0 -84
- package/skills/auto/SKILL.md +0 -297
- package/skills/auto/evals/evals.json +0 -255
- package/skills/auto/references/end-tail.md +0 -64
- package/skills/conventions/SKILL.md +0 -29
- package/skills/dashboard/SKILL.md +0 -180
- package/skills/dashboard/evals/evals.json +0 -38
- package/skills/dashboard/references/classification.md +0 -22
- package/skills/dashboard/templates/dashboard-global.md +0 -20
- package/skills/dashboard/templates/dashboard-project.md +0 -19
- package/skills/direct/SKILL.md +0 -66
- package/skills/direct/references/request-signals.md +0 -59
- package/skills/doctor/SKILL.md +0 -305
- package/skills/doctor/report.md +0 -102
- package/skills/feedback/SKILL.md +0 -98
- package/skills/feedback/references/transport-and-privacy.md +0 -65
- package/skills/feedback/report.md +0 -36
- package/skills/install/SKILL.md +0 -215
- package/skills/intent-continuing/SKILL.md +0 -156
- package/skills/intent-continuing/references/board-fill.md +0 -52
- package/skills/intent-continuing/references/boarding-matrix.md +0 -35
- package/skills/intent-continuing/references/context-management.md +0 -28
- package/skills/intent-continuing/references/liveness-ranking.md +0 -57
- package/skills/intent-creating/SKILL.md +0 -89
- package/skills/intent-creating/evals/evals.json +0 -72
- package/skills/intent-creating/references/lifecycle.md +0 -81
- package/skills/intent-creating/references/wikilinks.md +0 -8
- package/skills/intent-ending/SKILL.md +0 -182
- package/skills/intent-ending/evals/evals.json +0 -74
- package/skills/intent-executing/SKILL.md +0 -87
- package/skills/intent-executing/evals/evals.json +0 -66
- package/skills/intent-executing/implementer-prompt.md +0 -47
- package/skills/intent-executing/spec-reviewer-prompt.md +0 -27
- package/skills/intent-speccing/SKILL.md +0 -136
- package/skills/intent-speccing/evals/evals.json +0 -126
- package/skills/intent-speccing/references/design-principles.md +0 -44
- package/skills/intent-speccing/references/per-section-fill-rules.md +0 -92
- package/skills/intent-speccing/references/self-verify-checklist.md +0 -37
- package/skills/project-creating/SKILL.md +0 -162
- package/skills/project-creating/references/hubs-projects.md +0 -55
- package/skills/project-creating/references/project-scaffolding.md +0 -97
- package/skills/releasing/SKILL.md +0 -376
- package/skills/releasing/references/deprecations.md +0 -60
- package/skills/releasing/references/promotion-and-tagging.md +0 -70
- package/skills/releasing/references/release-lines.md +0 -105
- package/skills/roadmap/SKILL.md +0 -90
- package/skills/roadmap/references/file-format.md +0 -134
- package/skills/roadmap/references/operations.md +0 -112
- package/skills/rollback/SKILL.md +0 -91
- package/skills/tutorial/SKILL.md +0 -66
- package/skills/tutorial/evals/evals.json +0 -186
- package/skills/uninstall/SKILL.md +0 -75
- package/skills/update/SKILL.md +0 -126
- /package/{skills/auto/references → docs/help}/agent-report-contract.md +0 -0
- /package/{skills/intent-executing → docs/help}/code-quality-reviewer-prompt.md +0 -0
- /package/{skills/conventions/references → docs/help}/knowledge-graph.md +0 -0
- /package/{skills/conventions/references → docs/help}/lifecycle-and-savepoints.md +0 -0
- /package/{skills/conventions/references → docs/help}/locks-and-worktrees.md +0 -0
- /package/{skills/conventions/references → docs/help}/maintenance-and-revisions.md +0 -0
- /package/{skills/intent-executing → docs/help}/plan-reviewer-prompt.md +0 -0
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
# End-Tail Mechanics: Arm.disarm and the Ordering
|
|
2
|
-
|
|
3
|
-
Deep mechanics behind two spots in `SKILL.md`: how `plastic-lock arm` resolves a session id
|
|
4
|
-
when it takes an intent, and why the End-tail steps in Completion (release the worktree, clear
|
|
5
|
-
the lock, reindex) run in that exact order. `scripts/lib/arm.rb` carries the arm, disarm, and
|
|
6
|
-
repair operations.
|
|
7
|
-
|
|
8
|
-
## Table of Contents
|
|
9
|
-
|
|
10
|
-
- [Session resolution](#session-resolution)
|
|
11
|
-
- [Disarm ordering and worktree cleanup rationale](#disarm-ordering-and-worktree-cleanup-rationale)
|
|
12
|
-
- [QMD reindex ordering rationale](#qmd-reindex-ordering-rationale)
|
|
13
|
-
|
|
14
|
-
## Session resolution
|
|
15
|
-
|
|
16
|
-
`Arm.resolve_session` picks the first non-empty of: the explicit id (`--session`, or the hook
|
|
17
|
-
stdin `session_id` when a caller has it), the `CLAUDE_CODE_SESSION_ID` the CLI read, then a
|
|
18
|
-
deterministic derived key (a hash of the store and the intent id). It never returns nil, so
|
|
19
|
-
the arm verb works even when every session variable is empty; a session-less arm and a later
|
|
20
|
-
session-less close resolve to the same key.
|
|
21
|
-
|
|
22
|
-
Arming acquires the durable `delivery.lock` in the intent dir, keyed by that resolved session
|
|
23
|
-
and stamped with `run_mode`. Ownership is session-keyed, not process-keyed, so the arm command
|
|
24
|
-
exiting is fine by construction: the lock stays yours for every later tool call in this
|
|
25
|
-
session, and the record hook refreshes its lease on every write you make. Holding that lock is
|
|
26
|
-
why the capture and record hooks stop treating your prompts as day-ledger items for the rest
|
|
27
|
-
of the delivery.
|
|
28
|
-
|
|
29
|
-
## Disarm ordering and worktree cleanup rationale
|
|
30
|
-
|
|
31
|
-
`Arm.disarm` runs the ordered End tail: it releases the worktree first, then clears the
|
|
32
|
-
intent's `delivery.lock` as its recorded owner. The worktree goes first so a released lock
|
|
33
|
-
never points at a checkout another session could claim; the lock goes last so the record
|
|
34
|
-
hook keeps heartbeating it until the delivery is actually done.
|
|
35
|
-
|
|
36
|
-
**Mechanized since intent 188.** `scripts/end-intent` performs this disarm itself, as its own
|
|
37
|
-
step 5, after steps 1-4 (outcome/INDEX/savepoint/commit) commit. A pre-flight lock guard
|
|
38
|
-
refuses on a live foreign session (exit 4) and reclaims a stale foreign lock automatically
|
|
39
|
-
(audited to savepoint.md); a dirty code worktree refuses before removal (exit 5,
|
|
40
|
-
`--discard-worktree-changes` overrides deliberately); and the durable lock file is checked
|
|
41
|
-
again after disarm, never merely trusted (exit 3 if it is somehow still present).
|
|
42
|
-
|
|
43
|
-
**Worktree cleanup (mandatory, intent 73c3).** `end-intent`'s step 5 calls `Arm.disarm` by
|
|
44
|
-
default, which calls `Worktree.release` on the block `Arm.worktree_block` derives from
|
|
45
|
-
`projects.yml` and the intent id, removing the intent's code worktree under
|
|
46
|
-
`<repo>/.claude/worktrees/{id}--{slug}` and pruning the repo. This is the plain remove path:
|
|
47
|
-
the disarm route does NOT merge, so use it only when no release merges the branch (the branch
|
|
48
|
-
survives and can be reclaimed).
|
|
49
|
-
|
|
50
|
-
When the work is being shipped through a release, do NOT rely on this plain remove.
|
|
51
|
-
`skills/releasing/SKILL.md` runs its worktree-merge step BEFORE its `end-intent` call, merging
|
|
52
|
-
the intent's code branch (`plastic/{id}--{slug}`) back to the repo's default branch BEFORE
|
|
53
|
-
the worktree is removed, via `Worktree.finish(Arm.delivery(intent_dir: ...), merge: true)`
|
|
54
|
-
(merge-then-remove), so the integrated work is not lost. By the time `end-intent`'s own step 5
|
|
55
|
-
runs afterward, the worktree is already gone (a harmless no-op) and only the delivery lock is
|
|
56
|
-
left to clear. Never leave an orphaned worktree, and run `git worktree prune`
|
|
57
|
-
if you hit a stale reference.
|
|
58
|
-
|
|
59
|
-
## QMD reindex ordering rationale
|
|
60
|
-
|
|
61
|
-
Completion is the lifecycle event that keeps the search index fresh. `<store-root>` is the
|
|
62
|
-
store that holds this intent (the global store or the project store). The reindex is the LAST
|
|
63
|
-
End-tail step, run after the disarm, so the index never references a lock that is about to
|
|
64
|
-
disappear.
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: plastic-conventions
|
|
3
|
-
description: >
|
|
4
|
-
Chapters of Plastic doctrine used by more than one skill: the knowledge graph,
|
|
5
|
-
lifecycle and savepoints, locks and
|
|
6
|
-
worktrees, completion, maintenance, and roadmaps. Read a chapter when its trigger
|
|
7
|
-
applies to the work in front of you.
|
|
8
|
-
user-invocable: false
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
# Plastic Conventions
|
|
12
|
-
|
|
13
|
-
The chapters below hold Plastic doctrine that more than one skill needs. Core always-on
|
|
14
|
-
conventions stay in `~/.plastic/PLASTIC.md`, which is injected at session start. Read a chapter
|
|
15
|
-
when the trigger in the second column applies to the work in front of you.
|
|
16
|
-
|
|
17
|
-
| Chapter | Read it when |
|
|
18
|
-
|---|---|
|
|
19
|
-
| `references/knowledge-graph.md` | when creating, linking, curating, or indexing intents and you need the sources-vs-chain doctrine, the tiers of influence, the `## Links` projection, or branch-vs-root directory semantics |
|
|
20
|
-
| `references/lifecycle-and-savepoints.md` | when running a lifecycle stage or a savepoint and you need the subagent report-home contract for how an insight reaches the intent |
|
|
21
|
-
| `references/locks-and-worktrees.md` | before taking or releasing a delivery lock, and when working with claims, worktrees, solo mode, or the station ledger |
|
|
22
|
-
| `references/completion-and-done.md` | when ending an intent, for what "intent done" means and the End-stage tail |
|
|
23
|
-
| `references/maintenance-and-revisions.md` | before any structural maintenance edit, for WORK vs MAINTENANCE, the `revisions.md` move-and-record contract, the violation-tag catalog, and the context-economy measurement buckets |
|
|
24
|
-
| `references/roadmaps.md` | when creating, ordering, closing, or consuming a roadmap, for the file format and the status-mirror rule |
|
|
25
|
-
|
|
26
|
-
Other skills read these chapters directly at
|
|
27
|
-
`../plastic-conventions/references/<chapter>.md`, resolved relative to their own installed
|
|
28
|
-
directory. All three harnesses install skills flat into one shared skills root through the same
|
|
29
|
-
`install_skills_flat` call, so that path is harness-independent.
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: plastic-dashboard
|
|
3
|
-
description: Use when the user wants an overview of intents, asks "where are we", "what's next", "what should I work on", "show the dashboard", or invokes /plastic-dashboard. Renders the intent store(s) as Markdown prose, the global board as a narrative of work done, each project board as a short summary plus its most-valuable next work, and emits a machine-readable queue that auto mode consumes.
|
|
4
|
-
user-invocable: false
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Dashboard — Plastic Work Cockpit
|
|
8
|
-
|
|
9
|
-
A deterministic overview of the intent store(s). It answers three questions at a glance:
|
|
10
|
-
**where we are** (recently worked; `Graph ID | Intent | Stage | Progress | Lead`),
|
|
11
|
-
**where we go next** (the most-valuable next work; `Rank | Graph ID | Intent | Reason`), and
|
|
12
|
-
**how to conduct it** (a disposition per intent). The human-facing surface is **Markdown**,
|
|
13
|
-
because the user's UI renders Markdown natively but collapses raw tool-call stdout.
|
|
14
|
-
|
|
15
|
-
The script does all the data work. The agent fills a Markdown template from the script's
|
|
16
|
-
payload with near-zero reasoning and **presents the filled board in its reply**. Same store
|
|
17
|
-
state → byte-identical payload, regardless of model. Do NOT hand-summarize intents.
|
|
18
|
-
|
|
19
|
-
## When to Use
|
|
20
|
-
|
|
21
|
-
- User invokes `/plastic-dashboard`
|
|
22
|
-
- User asks "where are we", "what's next", "what should I work on", "show me the intents"
|
|
23
|
-
- `plastic-intent-continuing` lands on the board on a bare resume
|
|
24
|
-
- `plastic-auto` reads `--json` to choose the next dispatchable intent
|
|
25
|
-
|
|
26
|
-
## The screen surface (intent 331d/331f)
|
|
27
|
-
|
|
28
|
-
`dashboard.rb project <slug> --screen` (or `continue --screen` for the global board) is the
|
|
29
|
-
default surface on every invocation: print it as the first characters of the reply, nothing
|
|
30
|
-
before it, no fence, or the hook cannot paint it. It carries a title, six fields (Active, In
|
|
31
|
-
delivery, Delivered, Roadmap, Sessions, Changed), then the Where-we-are and Where-we-go-next
|
|
32
|
-
tables, its own grammar and painted form standing in for the filled Markdown template below.
|
|
33
|
-
`plastic-intent-continuing`'s project route prints it this way. The Markdown board (Step 1-4
|
|
34
|
-
below) stays available as the deeper prose surface a reader can ask for.
|
|
35
|
-
|
|
36
|
-
## Procedure (the Markdown board — default human surface)
|
|
37
|
-
|
|
38
|
-
### Step 1 — Get the data payload
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
ruby ~/.plastic/scripts/dashboard.rb [continue|project <slug>] --data
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
- `continue` (default) → the **global** board payload (`mode: "global"`).
|
|
45
|
-
- `project <slug>` → that **project** board payload (`mode: "project"`).
|
|
46
|
-
|
|
47
|
-
The payload is read-only JSON. Global-board fields: `date`, `store_health`, `summary`,
|
|
48
|
-
`next_work`, `next_total`, `next_shown`, `counts`, `projects`, `project_totals`, `footer`.
|
|
49
|
-
Project-board fields: `slug`, `store_health`, `description`, `summary`, `counts`, `active`,
|
|
50
|
-
`active_total`, `active_shown`, `next_work`, `next_total`, `next_shown`, `footer`. `summary`
|
|
51
|
-
and `footer` are finished prose strings (2-3 sentences and one line respectively), built in
|
|
52
|
-
`dashboard.rb` and substituted verbatim, exactly like `{{date}}`/`{{description}}` already
|
|
53
|
-
are - never re-worded or re-derived by the skill. Each list carries cell-ready fields for
|
|
54
|
-
its table: `next_work` rows are
|
|
55
|
-
`{id, intent, scope, lifecycle, value, disposition, flags, what, flags_label, line}`;
|
|
56
|
-
`active` rows carry
|
|
57
|
-
`{id, intent, created, bullet, scope, what, stage, worker, activity, line}`. The `what`,
|
|
58
|
-
`scope`, `worker`, `activity`, and `flags_label` cell fields arrive pipe-escaped and
|
|
59
|
-
whitespace-normalized.
|
|
60
|
-
|
|
61
|
-
Each board load runs the scoped store check (`doctor --store <scope>`): the global board runs
|
|
62
|
-
`--store global` and a project board runs `--store <slug>`. The result rides in the payload as
|
|
63
|
-
`store_health` (`{scope, status, summary, failing_checks}`). Surface it as a one-line
|
|
64
|
-
store-health note on the board (for example `store health: pass (3/3)` or
|
|
65
|
-
`store health: warn (orphaned_intents)`). It is non-fatal: a warn or fail is shown as data and
|
|
66
|
-
never blocks the board.
|
|
67
|
-
|
|
68
|
-
### Step 2 — Fill the matching template
|
|
69
|
-
|
|
70
|
-
Templates live in this skill's `templates/` directory:
|
|
71
|
-
`~/.claude/skills/plastic-dashboard/templates/dashboard-global.md` and
|
|
72
|
-
`dashboard-project.md`.
|
|
73
|
-
|
|
74
|
-
Fill mechanically, no rewriting, no re-sorting:
|
|
75
|
-
- `{{a.b.count}}` → the integer (e.g. `counts.active` = that count).
|
|
76
|
-
- `{{<list>.rows}}` → the two intent lists (`active`, `next_work`) render as **Markdown table
|
|
77
|
-
rows**. The template hard-codes each table's header and separator; this placeholder becomes
|
|
78
|
-
one data row per list entry, joined with real newlines, in that table's fixed column order
|
|
79
|
-
(below). Drop each cell from the named payload field **verbatim**: cells arrive pre-escaped
|
|
80
|
-
and whitespace-normalized from the script (pipes escaped as `\|`), so never re-escape,
|
|
81
|
-
re-truncate, or reword them. Never emit `<br>`.
|
|
82
|
-
- `next_work` → `| {id} | {what} | {value} | {disposition} | {flags_label} |`
|
|
83
|
-
- `active` → `| {id} | {what} | {stage} | {worker} | {activity} |`
|
|
84
|
-
Empty list → one full-width row with `_(none)_` in the Graph ID column and every other cell blank,
|
|
85
|
-
matching that table's column count (e.g. `| _(none)_ | | | | |` for the 5-column next_work
|
|
86
|
-
table, `| _(none)_ | | | |` for the 5-column active table). Neither list carries an overflow
|
|
87
|
-
"+N more" row anymore (D5, intent 202): the true pool size rides on the payload as
|
|
88
|
-
`active_total`/`next_total` (shown counts as `active_shown`/`next_shown`), and `{{footer}}`
|
|
89
|
-
states it in prose instead.
|
|
90
|
-
- `{{projects.lines}}` (global board only) → the project rollup stays **prose**, one line per
|
|
91
|
-
project (not a table):
|
|
92
|
-
`- **{slug}**: {description}, active {active}, done {done}, future {future}, last accessed {last_accessed_at[0,10]}`.
|
|
93
|
-
- Scalars (`{{date}}`, `{{slug}}`, `{{summary}}`, `{{footer}}`) → substitute verbatim. `summary`
|
|
94
|
-
and `footer` are finished prose built in `dashboard.rb`; do not rewrite, shorten, or
|
|
95
|
-
re-derive them from the counts - that is exactly the non-determinism D5 rules out.
|
|
96
|
-
|
|
97
|
-
### Paging (conversational, D4)
|
|
98
|
-
|
|
99
|
-
The board shows a short page by default (Active capped at 3, Next-work at 5). When the
|
|
100
|
-
user asks for "more" or "all", re-invoke Step 1 with an explicit flag and re-fill the
|
|
101
|
-
template with the new payload - nothing is persisted to disk, the offset lives only in the
|
|
102
|
-
chat turn:
|
|
103
|
-
- "all" → add `--all` (lifts both caps to unbounded; the footer then shows equal shown/total).
|
|
104
|
-
- "more" → add `--limit-active N`/`--limit-next N` with a larger `N` for whichever list the
|
|
105
|
-
user is paging.
|
|
106
|
-
|
|
107
|
-
For a real, own-terminal pager instead, point the owner at `--plain`:
|
|
108
|
-
`ruby ~/.plastic/scripts/dashboard.rb project <slug> --plain | less` (or `continue --plain`
|
|
109
|
-
for the global board). `--plain` prints the full, uncapped board as plain text with no
|
|
110
|
-
Markdown table syntax; it is a separate CLI mode from `--data`, not something this skill
|
|
111
|
-
fills a template from.
|
|
112
|
-
|
|
113
|
-
### Step 3 — Present it (mandatory, every invocation)
|
|
114
|
-
|
|
115
|
-
**Paste the filled Markdown into your reply.** This is non-optional: if the reply does not
|
|
116
|
-
contain the filled Markdown, the user sees nothing — tool-call stdout and hook
|
|
117
|
-
`additionalContext` are both invisible to them. Never describe the board instead of showing
|
|
118
|
-
it, and never assume a hook already showed it for you.
|
|
119
|
-
|
|
120
|
-
`hook-continue` also emits a one-line `systemMessage` summary (counts, and the next big thing
|
|
121
|
-
when there is one) as a hook-owned fallback, independent of the agent's reply. Treat that line
|
|
122
|
-
as a floor only, not a substitute for this step: it carries no matrix, no recently-worked
|
|
123
|
-
section, and no entry-flow prompt. Presenting the full board here remains mandatory regardless
|
|
124
|
-
of whether the summary line fired. This stays a soft, agent-followed mechanism — there is no
|
|
125
|
-
stronger enforcement for a full multi-section Markdown document in this harness today.
|
|
126
|
-
|
|
127
|
-
### Step 4 — Entry flow (the board is the menu)
|
|
128
|
-
|
|
129
|
-
QMD-first (when available): when the user navigates by describing an intent rather than giving its
|
|
130
|
-
id, before scanning the store with grep/Read run `ruby ~/.plastic/scripts/qmd-sync search "<terms>"`
|
|
131
|
-
to surface the candidate intent, then open the authoritative intent file for the hit. The command is
|
|
132
|
-
a no-op when QMD is absent, so fall back to the existing INDEX.md / file scan.
|
|
133
|
-
|
|
134
|
-
The board lists everything; the user navigates by free prose (no capped picker):
|
|
135
|
-
- On the **global** board, the user replies with an **intent id** (work it), a **project
|
|
136
|
-
name** (re-run `project <slug> --data` and present that board), or **"new"** (start a new
|
|
137
|
-
intent in global via `plastic-intent-creating`).
|
|
138
|
-
- On a **project** board, the user replies with an **intent id**, or **"global"** to return.
|
|
139
|
-
|
|
140
|
-
## Auto-mode contract (`--json`)
|
|
141
|
-
|
|
142
|
-
`plastic-auto` consumes a separate machine-readable manifest (unchanged):
|
|
143
|
-
|
|
144
|
-
```bash
|
|
145
|
-
ruby ~/.plastic/scripts/dashboard.rb [continue|project <slug>|all] --json
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
```json
|
|
149
|
-
{ "generated_for": "auto-mode", "scope": "<scope|all>",
|
|
150
|
-
"next_big_thing": "<id|null>",
|
|
151
|
-
"dispatchable_queue": [ {"id","scope","disposition","type","value","effort","flags","rank"} ],
|
|
152
|
-
"human_only": ["<id>", "..."] }
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
Work `dispatchable_queue` in `rank` order (`defer`/`research`); leave `human_only` for the user.
|
|
156
|
-
|
|
157
|
-
## Text modes (terminal / legacy)
|
|
158
|
-
|
|
159
|
-
`dashboard.rb [continue|project <slug>|all]` with no flag still prints the ASCII cockpit for
|
|
160
|
-
a raw terminal. The Markdown board (`--data` + template) is the surface for the chat UI.
|
|
161
|
-
|
|
162
|
-
## How classification works (deterministic)
|
|
163
|
-
|
|
164
|
-
The script computes Effort/Value/Flags/Override/Caps; the agent never re-derives them.
|
|
165
|
-
To explain or debug a ranking or disposition, read `references/classification.md`.
|
|
166
|
-
|
|
167
|
-
## Eval
|
|
168
|
-
|
|
169
|
-
The eval is the payload + golden snapshots: run the engine against the fixture store and
|
|
170
|
-
assert the `--data` payload shape/sorting/classification and the byte-identical `--json` +
|
|
171
|
-
text goldens in [`test/fixtures/dashboard/`](https://github.com/zalom/plastic/tree/main/test/fixtures/dashboard). See [`dashboard_test.rb`](https://github.com/zalom/plastic/blob/main/test/dashboard_test.rb). Drift without an
|
|
172
|
-
intentional change means the skill is broken.
|
|
173
|
-
|
|
174
|
-
## Notes
|
|
175
|
-
|
|
176
|
-
- The two intent lists (active, next work) render as Markdown tables; the prose summary,
|
|
177
|
-
footer, counts, and the project rollup stay prose (intent 202). No Value x Effort grid
|
|
178
|
-
returns. Never emit `<br>`.
|
|
179
|
-
- Clusters (Zettelkasten grouping in INDEX.md) are intentionally not rendered.
|
|
180
|
-
- Additive: changes no core lifecycle, gate, or cycle logic.
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"skill_name": "plastic-dashboard",
|
|
3
|
-
"notes": "Intent 66a. Spec for the QMD-first step in the entry flow (resolve a free-prose intent reference before grep/Read). Runner is intent 76; spec only.",
|
|
4
|
-
"evals": [
|
|
5
|
-
{
|
|
6
|
-
"id": 1,
|
|
7
|
-
"scope": "behavior",
|
|
8
|
-
"set": "validation",
|
|
9
|
-
"prompt": "QMD is present. On the board, the user navigates by describing an intent (the search verb work) instead of giving its id.",
|
|
10
|
-
"expected_output": "Before scanning the store with grep/Read to resolve the free-prose reference, runs `ruby ~/.plastic/scripts/qmd-sync search \"search verb\"` to surface the candidate intent, then opens the authoritative intent file for the hit. No-op fallback to INDEX.md / file scan when QMD is absent.",
|
|
11
|
-
"files": [],
|
|
12
|
-
"assertions": [
|
|
13
|
-
{
|
|
14
|
-
"type": "human",
|
|
15
|
-
"check": "qmd-sync search is run before grep/Read when the user navigates by description; authoritative file opened for the hit",
|
|
16
|
-
"observed": "SKILL.md (or agent file) carries the QMD-first step: run qmd-sync search before grep/Read, then open the authoritative file; no-op fallback when QMD is absent",
|
|
17
|
-
"result": "pass"
|
|
18
|
-
}
|
|
19
|
-
]
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
"id": 2,
|
|
23
|
-
"scope": "behavior",
|
|
24
|
-
"set": "validation",
|
|
25
|
-
"prompt": "How does the project board render after intent 202 (short by default, paged on request)?",
|
|
26
|
-
"expected_output": "The project board shows, in order, and nothing else: a 2-3 sentence prose summary of what was delivered most recently (built in dashboard.rb from completed/completed_on data, not the 24h-windowed recently_worked), an Active table capped at 3 rows (Id|What|Stage, ordered lifecycle-stage descending with a savepoint tie-break), a Next-work table capped at 5 rows (Id|What|Value|Disposition|Flags), and a one-line footer stating true totals (e.g. '3 of 12 active, 5 of 47 next work') plus how to see everything. The raw Future table and its {{future.rows}} placeholder, and the separate Recently-worked table, are both gone from dashboard-project.md. dashboard-global.md carries the equivalent fix (D6): a prose summary in place of its recently-worked table, the same honest footer, and the same --limit-active/--limit-next/--all/--plain mechanics.",
|
|
27
|
-
"files": ["skills/dashboard/templates/dashboard-global.md", "skills/dashboard/templates/dashboard-project.md", "skills/dashboard/SKILL.md"],
|
|
28
|
-
"assertions": [
|
|
29
|
-
{
|
|
30
|
-
"type": "convention",
|
|
31
|
-
"check": "project board template has summary+active+next_work+footer only (no future, no recently_worked table); global template has summary+footer added; SKILL.md documents the new payload fields and CLI flags",
|
|
32
|
-
"observed": "templates carry {{summary}}, {{active.rows}} (Id|What|Stage), {{next_work.rows}} (Id|What|Value|Disposition|Flags), {{footer}}; {{future.rows}} and the recently-worked table are removed from both; SKILL.md Step 1/2 document summary/footer/active_total/active_shown/next_total/next_shown and --limit-active/--limit-next/--all/--plain",
|
|
33
|
-
"result": "pass"
|
|
34
|
-
}
|
|
35
|
-
]
|
|
36
|
-
}
|
|
37
|
-
]
|
|
38
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# How Classification Works (Deterministic)
|
|
2
|
-
|
|
3
|
-
The script (`dashboard.rb`) computes Effort/Value/Flags/Override/Caps deterministically;
|
|
4
|
-
the agent never re-derives them. Read this to explain or debug a ranking or disposition.
|
|
5
|
-
|
|
6
|
-
- **Effort** — small for `research`/`exploration`/`bugfix`, for already-scoped intents
|
|
7
|
-
(plan/checklist exists), or a **branch id** (folgezettel depth ≥ 2, e.g. `4a`, `12b3`); big
|
|
8
|
-
otherwise. A root id (a bare number) is always depth 1, so it is never demoted by this rule.
|
|
9
|
-
- **Value → high** when any of: explicit `value: high`; a human-authored **root** intent; or
|
|
10
|
-
an intent that is a `source` of ≥1 other intent (it has spawned follow-on work). A purely
|
|
11
|
-
relational `chain` entry alone is **not** a value signal (intent 68) — else low.
|
|
12
|
-
- **Flags** — `unblocked` only when a **future** intent has **all** its `sources` done AND at
|
|
13
|
-
least one source's completion date is strictly later than the intent's own `created` date (a
|
|
14
|
-
genuine wait, not a birth-time default); `in-progress` only when the savepoint ledger shows
|
|
15
|
-
real post-birth activity, not just the creation stamp; `stale` only on future intents past
|
|
16
|
-
the staleness threshold. All three kept low-noise by design.
|
|
17
|
-
- **Override** — a `value: high|low` frontmatter field always wins (pre-stamped data, never
|
|
18
|
-
model judgment at render time).
|
|
19
|
-
- **Caps**: the next-work list and the project board's `active`/`future` lists are capped at
|
|
20
|
-
8 entries plus a trailing "+N more" line; each entry's text is truncated to 120 characters
|
|
21
|
-
with a trailing ellipsis. Applies to the Markdown board only (the ASCII renderer has its own
|
|
22
|
-
separate `CELL_CAP`).
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# 🧩 Plastic · Global Board, {{date}}
|
|
2
|
-
|
|
3
|
-
{{summary}}
|
|
4
|
-
|
|
5
|
-
## Where we are
|
|
6
|
-
|
|
7
|
-
{{counts.active}} intents active, {{counts.done}} done, {{counts.future}} queued for later.
|
|
8
|
-
|
|
9
|
-
## Projects, active {{project_totals.active}}, done {{project_totals.done}}, future {{project_totals.future}}
|
|
10
|
-
{{projects.lines}}
|
|
11
|
-
|
|
12
|
-
## Most-valuable next work
|
|
13
|
-
|
|
14
|
-
| Graph ID | Intent | Value | Disposition | Flags |
|
|
15
|
-
| --- | --- | --- | --- | --- |
|
|
16
|
-
{{next_work.rows}}
|
|
17
|
-
|
|
18
|
-
{{footer}}
|
|
19
|
-
|
|
20
|
-
**What would you like to work on next?** (type an **intent id**, a **project name**, or anything **new** you'd like to start)
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# 📦 {{slug}} · Project Board, {{date}}
|
|
2
|
-
|
|
3
|
-
{{summary}}
|
|
4
|
-
|
|
5
|
-
**Active**
|
|
6
|
-
|
|
7
|
-
| Graph ID | Intent | Stage | Worker | Activity |
|
|
8
|
-
| --- | --- | --- | --- | --- |
|
|
9
|
-
{{active.rows}}
|
|
10
|
-
|
|
11
|
-
**Most-valuable next work**
|
|
12
|
-
|
|
13
|
-
| Graph ID | Intent | Value | Disposition | Flags |
|
|
14
|
-
| --- | --- | --- | --- | --- |
|
|
15
|
-
{{next_work.rows}}
|
|
16
|
-
|
|
17
|
-
{{footer}}
|
|
18
|
-
|
|
19
|
-
**What would you like to work on next?** (type an **intent id**, or **global** to go back)
|
package/skills/direct/SKILL.md
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: plastic-direct
|
|
3
|
-
description: Use when a prompt asks for a change, a fix, an edit, a file, or an answer, and no thinking conversation is open on an intent. Judges whether the work is small enough to run right now, asks one clarifying question when one answer would settle it, or offers a thinking intent when it would not. Do not use for a prompt that says "auto" or "continue", a prompt asking to start a new intent, or a prompt inside an open thinking conversation, which belong to plastic-auto, plastic-intent-continuing, plastic-intent-creating, and plastic-intent-speccing.
|
|
4
|
-
user-invocable: false
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Direct mode
|
|
8
|
-
|
|
9
|
-
Route the prompt in one read, then act. Direct work runs inline in this session, never through a
|
|
10
|
-
dispatched agent, unless the user asks for agents.
|
|
11
|
-
|
|
12
|
-
## 1. Estimate before you start
|
|
13
|
-
|
|
14
|
-
Judge the prompt alone, before doing any of the work:
|
|
15
|
-
|
|
16
|
-
1. Count the targets the prompt names, or that one grep finds.
|
|
17
|
-
2. Require each change to be a named operation on a known target (rename this, add a check there,
|
|
18
|
-
delete that line), not an outcome ("clean it up", "make it faster").
|
|
19
|
-
3. Budget about one minute per target and sum.
|
|
20
|
-
4. At or under five minutes, run it now. Five minutes is an owner ruling, not a measured
|
|
21
|
-
threshold.
|
|
22
|
-
5. A bounded sum above five minutes, offer a dedicated intent.
|
|
23
|
-
6. An unknown target, or a change described only by its outcome, cannot be bounded. Ask one
|
|
24
|
-
question when one answer would supply the missing operation or target. Otherwise offer a
|
|
25
|
-
thinking intent. A target that only investigation can find is never settled by one
|
|
26
|
-
question.
|
|
27
|
-
|
|
28
|
-
Tests or a build the prompt implies do not count against the budget. Verification is part of
|
|
29
|
-
direct work, not a reason to leave direct mode.
|
|
30
|
-
|
|
31
|
-
## 2. One question, then run
|
|
32
|
-
|
|
33
|
-
A clarifying question is allowed in direct mode and does not by itself turn the request into a
|
|
34
|
-
thinking intent. Ask one, then run. If the answer is still vague, offer a thinking intent rather
|
|
35
|
-
than asking a second question or guessing.
|
|
36
|
-
|
|
37
|
-
## 3. The routes
|
|
38
|
-
|
|
39
|
-
| What the prompt looks like | Where it goes |
|
|
40
|
-
|---|---|
|
|
41
|
-
| Clear, and bounded at or under five minutes | Run it now, inline |
|
|
42
|
-
| Clear, but the bounded estimate is above five minutes | Offer a dedicated intent, `plastic-intent-creating` |
|
|
43
|
-
| Vague, and one answer would resolve it | Ask one clarifying question, then run |
|
|
44
|
-
| Still vague after that one answer | Offer a thinking intent, `plastic-intent-speccing` |
|
|
45
|
-
| Phrased as needing help rather than as an instruction | Offer grill plus a thinking conversation, `plastic-intent-speccing` |
|
|
46
|
-
| Says "auto" explicitly | Hand off to `plastic-auto` |
|
|
47
|
-
|
|
48
|
-
Read `references/request-signals.md` when a prompt sits on the boundary between two routes, for
|
|
49
|
-
the 15 observable signals and the response each one selects.
|
|
50
|
-
|
|
51
|
-
## 4. Record and verify
|
|
52
|
-
|
|
53
|
-
- Verification in direct mode is the UI, the tests, or the user. There is no reviewer agent per
|
|
54
|
-
item.
|
|
55
|
-
- Only a prompt that changes something on disk or produces an artifact becomes a checklist item.
|
|
56
|
-
A pure question is answered inline and recorded nowhere.
|
|
57
|
-
- Direct work records into the day ledger for the session's day (the oldest day in the last
|
|
58
|
-
seven whose checklist carries the session's line, else today). Never write that lookup by hand.
|
|
59
|
-
|
|
60
|
-
## 5. What direct does not take
|
|
61
|
-
|
|
62
|
-
The capture hook detects `auto` and `continue` before you read the prompt, so defer rather than
|
|
63
|
-
keyword-match them yourself. `auto` goes to `plastic-auto`, and `continue` goes to
|
|
64
|
-
`plastic-intent-continuing`. On `auto` with no registered intent, route through
|
|
65
|
-
`plastic-intent-creating` first, because auto requires a registered intent. A prompt that arrives
|
|
66
|
-
inside an open thinking conversation belongs to that conversation, not here.
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
# Request signals
|
|
2
|
-
|
|
3
|
-
The table below is reproduced from
|
|
4
|
-
`296--make-plastic-faster-small-work/resources/research--request-analysis.md`, the
|
|
5
|
-
request-analysis research deposit of intent 296, with its source column renumbered against the
|
|
6
|
-
eight-source list below. Read it when a prompt sits on the boundary between two routes. That
|
|
7
|
-
deposit also carries seven worked examples, one per boundary, for a reader who wants them.
|
|
8
|
-
|
|
9
|
-
## The signal table
|
|
10
|
-
|
|
11
|
-
| Signal | What it looks like in a real prompt | Response it selects | Source or ruling |
|
|
12
|
-
|---|---|---|---|
|
|
13
|
-
| A concrete file and a concrete operation are named | "Rename `foo` to `bar` in `app/models/user.rb` and update its three callers." | execute now | D13, D14 |
|
|
14
|
-
| The target is a single, already-known location | "Fix the typo in README.md line 12." | execute now | D14 |
|
|
15
|
-
| The change is described only by its outcome, with no operation named | "Clean up the user model, it's gotten messy." | ask one clarifying question | Kamsties, "Understanding Ambiguity in Requirements Engineering" (source 5); D13 |
|
|
16
|
-
| The prompt uses weak, hedging modal language ("might", "could", "maybe", "somewhere") | "This might need better error handling somewhere in the payment flow." | ask one clarifying question | "Automatic Detection of Ambiguous Terminology for Software Requirements" (weakness ambiguity, source 6); D13 |
|
|
17
|
-
| The prompt admits several equally plausible readings with no cue that favors one | "Make the form better." (styling, validation, and accessibility are all live readings) | ask one clarifying question | "Knowing but Not Showing" (source 3); "Ask or Assume?" (source 1) |
|
|
18
|
-
| One answer to the clarifying question fully resolves scope | User answers: "Just the null check on line 42, nothing else." | execute now | D10 |
|
|
19
|
-
| The answer to the clarifying question is itself vague or open-ended | User answers: "I don't know, whatever seems right." | offer a thinking intent | D13; "Ask or Assume?" (source 1) |
|
|
20
|
-
| The prompt is phrased as a request for help rather than an instruction | "I need help figuring out how to structure the billing refactor, not sure where to start." | offer a thinking intent | D13 |
|
|
21
|
-
| The number of named or discoverable targets is small (roughly one to three) and each change is additive | "Update the copyright year in these three footer partials." | execute now | D14 |
|
|
22
|
-
| The number of targets is large, or the work is described as spanning many files | "Migrate all 40 view partials to the new component library." | offer a thinking intent | D14 |
|
|
23
|
-
| The target is not yet known and must be found by investigation before any edit is possible | "Something is causing the checkout page to be slow, find it and fix it." | offer a thinking intent | D14; sources 7 and 8 |
|
|
24
|
-
| The action is destructive or hard to reverse and its scope is ambiguous | "Delete the old migrations directory." | ask one clarifying question | "Structured Uncertainty guided Clarification for LLM Agents" (source 4) |
|
|
25
|
-
| The action is destructive but small, self-contained, and obviously scoped | "Delete the unused `tmp_debug.rb` file I just created." | execute now | D14 |
|
|
26
|
-
| The request implies running tests or a build step the agent can run itself as part of verification | "Fix the failing test in user_test.rb." | execute now | D15 |
|
|
27
|
-
| The prompt changes nothing on disk and produces no artifact | "What does the PaymentProcessor class do?" | execute now (answered inline; never admitted as a checklist item) | D17 |
|
|
28
|
-
|
|
29
|
-
Row 8 uses the deposit's wording. Ruling D13 makes the help-needed route grill plus a
|
|
30
|
-
thinking conversation, as `SKILL.md` section 3 states.
|
|
31
|
-
|
|
32
|
-
## Rulings, not findings
|
|
33
|
-
|
|
34
|
-
Four things in the table above are owner rulings with no literature behind them. Apply
|
|
35
|
-
them, and know they are policy knobs the owner can turn, not measured results.
|
|
36
|
-
|
|
37
|
-
- The five-minute total and the one-minute-per-target budget. Task-complexity research (sources 7
|
|
38
|
-
and 8) correlates target count and search depth with lower agent success, which supports
|
|
39
|
-
counting targets, but no source sets these numbers.
|
|
40
|
-
- The one-question cap. The clarification research (sources 1, 2, and 4) treats question count as
|
|
41
|
-
a calibrated, cost-weighted choice that can be zero, one, or more. A hard cap of one is the
|
|
42
|
-
owner's choice.
|
|
43
|
-
- "Auto" meaning auto mode. It is an interface convention, a keyword that names the mode instead
|
|
44
|
-
of asking for a judgement.
|
|
45
|
-
- "Help needed" phrasing meaning grill plus a thinking conversation. It is a register cue
|
|
46
|
-
specific to how this owner phrases requests, not a general finding.
|
|
47
|
-
|
|
48
|
-
## Sources
|
|
49
|
-
|
|
50
|
-
1. "Ask or Assume? Uncertainty-Aware Clarification-Seeking in Coding Agents." https://arxiv.org/abs/2603.26233
|
|
51
|
-
2. "Learning to Ask: When LLM Agents Meet Unclear Instruction." EMNLP 2025. https://aclanthology.org/2025.emnlp-main.1104.pdf
|
|
52
|
-
3. "Knowing but Not Showing: LLMs Recognize Ambiguity but Rarely Ask Clarifying Questions." https://arxiv.org/pdf/2605.25284
|
|
53
|
-
4. "Structured Uncertainty guided Clarification for LLM Agents." https://openreview.net/forum?id=dc8ebScygC
|
|
54
|
-
5. Kamsties, Erik. "Understanding Ambiguity in Requirements Engineering." https://link.springer.com/chapter/10.1007/3-540-28244-0_11
|
|
55
|
-
6. "Automatic Detection of Ambiguous Terminology for Software Requirements." https://www.eecis.udel.edu/~yuewang/paper/nldb2013.pdf
|
|
56
|
-
7. "An Approach for Systematic Decomposition of Complex LLM Tasks." https://arxiv.org/html/2510.07772v1
|
|
57
|
-
8. "On the Importance of Task Complexity in Evaluating LLM-Based Multi-Agent Systems." https://arxiv.org/html/2510.04311
|
|
58
|
-
|
|
59
|
-
All eight were accessed 2026-08-29. The D-numbers in the table are decisions in `296/spec.md`.
|