@event4u/agent-config 2.18.0 → 2.20.0
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/.agent-src/commands/agent-status.md +29 -0
- package/.agent-src/commands/onboard.md +221 -81
- package/.agent-src/commands/refine-ticket.md +3 -0
- package/.agent-src/packs/README.md +49 -0
- package/.agent-src/packs/agency-delivery.yml +63 -0
- package/.agent-src/packs/content-engine.yml +53 -0
- package/.agent-src/packs/founder-mvp.yml +51 -0
- package/.agent-src/personas/README.md +8 -0
- package/.agent-src/presets/README.md +26 -0
- package/.agent-src/presets/balanced.yml +34 -0
- package/.agent-src/presets/fast.yml +31 -0
- package/.agent-src/presets/strict.yml +38 -0
- package/.agent-src/profiles/README.md +29 -0
- package/.agent-src/profiles/agency.yml +27 -0
- package/.agent-src/profiles/content_creator.yml +25 -0
- package/.agent-src/profiles/developer.yml +26 -0
- package/.agent-src/profiles/finance.yml +24 -0
- package/.agent-src/profiles/founder.yml +25 -0
- package/.agent-src/profiles/ops.yml +25 -0
- package/.agent-src/rules/no-cheap-questions.md +25 -17
- package/.agent-src/skills/adr-create/SKILL.md +78 -68
- package/.agent-src/skills/refine-ticket/SKILL.md +3 -0
- package/.agent-src/skills/subagent-orchestration/SKILL.md +33 -0
- package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/.agent-src/templates/skill-archive-note.md +101 -0
- package/.agent-src/user-types/README.md +124 -0
- package/.agent-src/user-types/_template/user-type.md +95 -0
- package/.agent-src/user-types/galabau-field-crew.md +100 -0
- package/.agent-src/user-types/metalworking-shop.md +105 -0
- package/.agent-src/user-types/truck-driver.md +113 -0
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +91 -30
- package/README.md +68 -72
- package/config/agent-settings.template.yml +22 -0
- package/docs/adrs/caveman/0001-default-off-until-bench.md +93 -0
- package/docs/adrs/caveman/README.md +9 -0
- package/docs/adrs/cost/0001-hard-stop-hook.md +114 -0
- package/docs/adrs/cost/README.md +9 -0
- package/docs/adrs/memory/0001-consumer-side-snapshot.md +111 -0
- package/docs/adrs/memory/README.md +9 -0
- package/docs/adrs/router/0001-three-tier-routing.md +119 -0
- package/docs/adrs/router/README.md +9 -0
- package/docs/adrs/schema/0001-json-schema-frontmatter.md +102 -0
- package/docs/adrs/schema/README.md +9 -0
- package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +99 -0
- package/docs/adrs/smoke/README.md +9 -0
- package/docs/architecture/current-onboard-baseline.md +126 -0
- package/docs/architecture/current-safety-behavior.md +137 -0
- package/docs/archive/CHANGELOG-pre-2.16.0.md +48 -0
- package/docs/contracts/adr-layout.md +108 -0
- package/docs/contracts/adr-mcp-runtime.md +128 -0
- package/docs/contracts/adr-user-types-axis.md +127 -0
- package/docs/contracts/benchmark-corpus-spec.md +97 -0
- package/docs/contracts/benchmark-report-schema.md +111 -0
- package/docs/contracts/command-clusters.md +1 -0
- package/docs/contracts/command-taxonomy.md +137 -0
- package/docs/contracts/compression-default-kill-criterion.md +69 -0
- package/docs/contracts/config-presets.md +144 -0
- package/docs/contracts/cost-dashboard.md +143 -0
- package/docs/contracts/cost-enforcement.md +134 -0
- package/docs/contracts/file-ownership-matrix.json +0 -7
- package/docs/contracts/mcp-tool-inventory.md +53 -0
- package/docs/contracts/measurement-baseline.md +102 -0
- package/docs/contracts/namespace.md +125 -0
- package/docs/contracts/profile-system.md +142 -0
- package/docs/contracts/safety-model.md +129 -0
- package/docs/contracts/smoke-contracts.md +144 -0
- package/docs/contracts/user-type-schema.md +146 -0
- package/docs/contracts/workflow-packs.md +121 -0
- package/docs/decisions/ADR-010-profile-pack-preset-boundary.md +132 -0
- package/docs/decisions/INDEX.md +1 -0
- package/docs/featured-commands.md +27 -0
- package/docs/parity/bench-ruflo.json +58 -0
- package/docs/parity/bench.json +41 -0
- package/docs/parity/ruflo.md +46 -0
- package/docs/profiles.md +91 -0
- package/docs/recruits/_template.md +81 -0
- package/package.json +1 -1
- package/scripts/_cli/cmd_explain.py +250 -0
- package/scripts/_lib/bench_cost.py +138 -0
- package/scripts/_lib/bench_quality.py +118 -0
- package/scripts/_lib/bench_report.py +150 -0
- package/scripts/agent-config +13 -0
- package/scripts/audit_adr_coverage.py +175 -0
- package/scripts/audit_mcp_tools.py +146 -0
- package/scripts/bench_baseline_ready.py +108 -0
- package/scripts/bench_drift_check.py +151 -0
- package/scripts/bench_per_tool.py +216 -0
- package/scripts/bench_run.py +155 -0
- package/scripts/compress.py +48 -2
- package/scripts/config/__init__.py +9 -0
- package/scripts/config/presets.py +206 -0
- package/scripts/config/profiles.py +173 -0
- package/scripts/cost/budget.mjs +73 -12
- package/scripts/cost/preflight.mjs +89 -0
- package/scripts/lint_archived_skills.py +143 -0
- package/scripts/lint_bench_corpus.py +161 -0
- package/scripts/lint_namespace.py +135 -0
- package/scripts/schemas/user-type.schema.json +35 -0
- package/scripts/skill_linter.py +139 -4
- package/scripts/skill_overlap.py +204 -0
- package/scripts/skill_tools/audit_user_type_coverage.py +148 -0
- package/scripts/skill_usage_collect.py +191 -0
- package/scripts/skill_usage_report.py +162 -0
- package/scripts/smoke/kernel.sh +101 -0
- package/scripts/smoke/router.sh +129 -0
- package/scripts/smoke/schema.sh +71 -0
- package/scripts/smoke/skills.sh +101 -0
|
@@ -240,6 +240,9 @@ open questions surfaced>
|
|
|
240
240
|
- **Critical Challenger** — <one paragraph>
|
|
241
241
|
- **AI Agent** — <one paragraph>
|
|
242
242
|
- **[qa]** — *(only when `--personas=+qa`)* <one paragraph>
|
|
243
|
+
- **User: <label>** — *(only when `--user-type=<id>`)* <one paragraph
|
|
244
|
+
citing Daily Workflow / Vocabulary / Operational Constraints /
|
|
245
|
+
Ticket Red Flags from the loaded user-type>
|
|
243
246
|
|
|
244
247
|
## Orchestration notes
|
|
245
248
|
|
|
@@ -51,6 +51,39 @@ Each mode has a decision row: when to use, when not, and the expected
|
|
|
51
51
|
model pairing. Defaults come from
|
|
52
52
|
[`subagent-configuration`](../../contexts/subagent-configuration.md).
|
|
53
53
|
|
|
54
|
+
### Topology hints — per-mode communication shape
|
|
55
|
+
|
|
56
|
+
Descriptive, not enforced. Documents the **expected agent-to-agent
|
|
57
|
+
communication topology** so consumers can predict latency, failure
|
|
58
|
+
modes, and where consensus is required. Cited from
|
|
59
|
+
[`external-findings.md § 2`](../../../agents/audit-2026-05-14-north-star/external-findings.md)
|
|
60
|
+
row 7 (Ruflo's `hierarchical, 6–8 agents, raft consensus` anti-drift
|
|
61
|
+
default).
|
|
62
|
+
|
|
63
|
+
| Mode | Topology | Anti-drift default | Notes |
|
|
64
|
+
|---|---|---|---|
|
|
65
|
+
| do-and-judge | `hierarchical` | 1 implementer · 1 judge · session-orchestrated | Two-node hub-and-spoke; orchestrator owns the loop. |
|
|
66
|
+
| do-and-judge-two-stage | `hierarchical` | 1 implementer · 2 sequential judges | Stages are serialized; spec-judge gates quality-judge. |
|
|
67
|
+
| do-in-steps | `ring` | N steps · 1 judge between each | Step N output → judge → step N+1 input; cycle on revise. |
|
|
68
|
+
| do-in-parallel | `star` | 6–8 implementers · 1 judge · session-hub | Capped by `subagents.max_parallel`; judge runs once on union. |
|
|
69
|
+
| do-competitively | `mesh` | 2–4 implementers · 1 judge | Implementers do not see each other; judge sees all candidates. |
|
|
70
|
+
| judge-with-debate | `hierarchical-mesh` | 2 judges · 1 meta-judge | Judges debate (mesh edge); meta-judge reconciles (hierarchical). |
|
|
71
|
+
| do-in-worktrees | `adaptive` | per-step topology of the underlying mode | Each worktree picks its own shape; chain is hierarchical. |
|
|
72
|
+
|
|
73
|
+
**Anti-drift default** (Ruflo convention, descriptive only):
|
|
74
|
+
`hierarchical, 6–8 agents, raft consensus`. Consumers free to
|
|
75
|
+
override per orchestration — table is **starting point**, not a
|
|
76
|
+
constraint. Topology is metadata for capacity planning, not
|
|
77
|
+
runtime-enforced.
|
|
78
|
+
|
|
79
|
+
**Glossary:**
|
|
80
|
+
- `hierarchical` — orchestrator hub; agents reply to hub only.
|
|
81
|
+
- `mesh` — agents see each other's outputs (e.g. competing diffs).
|
|
82
|
+
- `hierarchical-mesh` — peer debate followed by hub reconciliation.
|
|
83
|
+
- `ring` — output of step N feeds input of step N+1 in order.
|
|
84
|
+
- `star` — N agents fan out from single hub; no peer comms.
|
|
85
|
+
- `adaptive` — topology shifts per step; outer chain remains hub.
|
|
86
|
+
|
|
54
87
|
### 1. do-and-judge
|
|
55
88
|
|
|
56
89
|
Implementer produces a diff; judge reviews; loop applies, revises, or
|
|
@@ -39,7 +39,7 @@ schema_version: 1
|
|
|
39
39
|
# CI guard: a release bump of `package.json` must update this value
|
|
40
40
|
# in lockstep — see scripts/check_template_pin_drift.py (road-to-
|
|
41
41
|
# portable-runtime-and-update-check P3.3).
|
|
42
|
-
agent_config_version: "2.
|
|
42
|
+
agent_config_version: "2.19.0"
|
|
43
43
|
|
|
44
44
|
# --- Project identity ---
|
|
45
45
|
project:
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Skill Archive Note Template
|
|
2
|
+
|
|
3
|
+
> Template for `agents/archived-skills/<slug>.md`. Created during
|
|
4
|
+
> `step-2-skill-inventory-rationalization.md`
|
|
5
|
+
> Phase 4 execution. Every skill removed from
|
|
6
|
+
> `.agent-src.uncompressed/skills/` MUST have a matching archive note
|
|
7
|
+
> here — enforced by `scripts/lint_archived_skills.py`.
|
|
8
|
+
|
|
9
|
+
## Instructions
|
|
10
|
+
|
|
11
|
+
1. Create the file: `agents/archived-skills/{slug}.md`.
|
|
12
|
+
2. Copy the template body below and fill every required field.
|
|
13
|
+
3. Commit alongside the SKILL.md removal in the same PR (the linter
|
|
14
|
+
refuses to pass if the pair drifts).
|
|
15
|
+
|
|
16
|
+
## Required frontmatter
|
|
17
|
+
|
|
18
|
+
```yaml
|
|
19
|
+
---
|
|
20
|
+
slug: {skill-slug} # the directory name that was removed
|
|
21
|
+
archived_on: 2026-MM-DD # UTC date of the removal commit
|
|
22
|
+
last_seen_count: 0 # mentions_30d at archival time (from skill-usage-report.md)
|
|
23
|
+
reason: unused # one of: unused, merged, superseded, deprecated
|
|
24
|
+
replacement: none # successor slug, or literal "none" if reason ∈ {unused, deprecated}
|
|
25
|
+
last_known_callers: # YAML list — files / commands / rules that cited this slug
|
|
26
|
+
- "none detected" # or e.g. ".augment/rules/foo.md", "agents/roadmaps/bar.md"
|
|
27
|
+
---
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Required body
|
|
31
|
+
|
|
32
|
+
````markdown
|
|
33
|
+
# {skill-slug}
|
|
34
|
+
|
|
35
|
+
## Why archived
|
|
36
|
+
|
|
37
|
+
{1–3 sentences. Cite the Phase 2 candidates-table row (overlap pair,
|
|
38
|
+
activation counts, or both) that justified removal. Link the row.}
|
|
39
|
+
|
|
40
|
+
## What replaces it
|
|
41
|
+
|
|
42
|
+
{If `replacement: <successor>`: one paragraph on how the successor
|
|
43
|
+
covers the source's triggers, and which trigger phrases it absorbed.
|
|
44
|
+
Link the successor's SKILL.md.}
|
|
45
|
+
|
|
46
|
+
{If `replacement: none`: one paragraph on why the capability is gone —
|
|
47
|
+
no successor needed because the workflow itself was retired / merged
|
|
48
|
+
into a router decision tree / handled inline by another rule.}
|
|
49
|
+
|
|
50
|
+
## Last-known callers
|
|
51
|
+
|
|
52
|
+
{If `last_known_callers:` is non-empty, one bullet per caller with a
|
|
53
|
+
short note on whether the caller was updated, redirected, or left
|
|
54
|
+
referencing the archive note. The lint gate fails if a caller still
|
|
55
|
+
references the removed slug without pointing at this note.}
|
|
56
|
+
|
|
57
|
+
## References
|
|
58
|
+
|
|
59
|
+
- Candidates table row: [`skill-rationalization-candidates.md`](../metrics/skill-rationalization-candidates.md#{anchor})
|
|
60
|
+
- Activation baseline: [`skill-usage-report.md`](../metrics/skill-usage-report.md)
|
|
61
|
+
- Overlap pair (if applicable): [`skill-overlap.md`](../metrics/skill-overlap.md)
|
|
62
|
+
````
|
|
63
|
+
|
|
64
|
+
## Field semantics
|
|
65
|
+
|
|
66
|
+
- **`slug`** — must match the removed directory name exactly. The
|
|
67
|
+
linter keys on this.
|
|
68
|
+
- **`archived_on`** — UTC date string `YYYY-MM-DD`. Used for cohort
|
|
69
|
+
reporting (e.g. "skills archived in the May 2026 rationalization").
|
|
70
|
+
- **`last_seen_count`** — `mentions_30d` value from the activation
|
|
71
|
+
report at the moment of archival. `0` is the dominant case; non-zero
|
|
72
|
+
values demand extra justification in *Why archived*.
|
|
73
|
+
- **`reason`** — exactly one of:
|
|
74
|
+
- `unused` — `mentions_30d == 0` over the soak window.
|
|
75
|
+
- `merged` — content folded into another skill; trigger phrases
|
|
76
|
+
transferred.
|
|
77
|
+
- `superseded` — thin-redirect successor exists (`replaced_by`
|
|
78
|
+
relationship documented in the successor's frontmatter).
|
|
79
|
+
- `deprecated` — capability retired; no successor needed.
|
|
80
|
+
- **`replacement`** — successor slug (must exist under
|
|
81
|
+
`.agent-src.uncompressed/skills/`) or literal `none`. The linter
|
|
82
|
+
validates the successor's existence.
|
|
83
|
+
- **`last_known_callers`** — references found by
|
|
84
|
+
`scripts/check_references.py` at archival time. Empty list is valid
|
|
85
|
+
only when the check truly returned zero hits.
|
|
86
|
+
|
|
87
|
+
## Lint contract
|
|
88
|
+
|
|
89
|
+
`scripts/lint_archived_skills.py` enforces:
|
|
90
|
+
|
|
91
|
+
1. Every file under `agents/archived-skills/*.md` (except the README)
|
|
92
|
+
has a frontmatter block with the six required fields.
|
|
93
|
+
2. `reason` is one of the four allowed values.
|
|
94
|
+
3. When `reason ∈ {merged, superseded}`, the `replacement` slug exists
|
|
95
|
+
under `.agent-src.uncompressed/skills/`.
|
|
96
|
+
4. Every slug under `agents/archived-skills/` is *absent* from
|
|
97
|
+
`.agent-src.uncompressed/skills/` (no zombies).
|
|
98
|
+
5. No SKILL.md present under `.agent-src.uncompressed/skills/`
|
|
99
|
+
references an archived slug as a router target.
|
|
100
|
+
|
|
101
|
+
Run via `task lint-archived-skills`. Included in `task ci`.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# User-types
|
|
2
|
+
|
|
3
|
+
> Reusable **end-user simulation lenses** as a first-class primitive,
|
|
4
|
+
> parallel to `personas/`. A user-type declares a *who*: a real
|
|
5
|
+
> end-user of the software under review (a galabau field crew, a
|
|
6
|
+
> truck driver, a metalworking shop). Skills consume them via
|
|
7
|
+
> `--user-type=<id>` on the CLI.
|
|
8
|
+
|
|
9
|
+
## Why this directory exists
|
|
10
|
+
|
|
11
|
+
`personas/` answered one question well: *how* we review (qa,
|
|
12
|
+
senior-engineer, critical-challenger, product-owner). It collapsed
|
|
13
|
+
when "personas" like `galabau-field-crew` or `truck-driver` started
|
|
14
|
+
landing — those are not review methodologies, they are the end-user
|
|
15
|
+
viewpoint a methodology reviewer should adopt while reviewing.
|
|
16
|
+
|
|
17
|
+
The two axes compose orthogonally:
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
/refine-ticket --personas=qa --user-type=truck-driver PROJ-123
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
QA methodology applied through a truck-driver end-user lens. The
|
|
24
|
+
split is locked in [`../../docs/contracts/adr-user-types-axis.md`](../../docs/contracts/adr-user-types-axis.md).
|
|
25
|
+
|
|
26
|
+
## What a user-type is — and is NOT
|
|
27
|
+
|
|
28
|
+
- **Is**: a small Markdown file declaring an end-user simulation —
|
|
29
|
+
workflow, vocabulary, operational constraints, the questions only
|
|
30
|
+
this viewpoint would ask.
|
|
31
|
+
- **Is NOT**: a persona. Personas describe review methodology, never
|
|
32
|
+
an end-user viewpoint.
|
|
33
|
+
- **Is NOT**: an operational manual. User-types are review lenses
|
|
34
|
+
only — they flag ticket gaps, they never instruct a trade. No
|
|
35
|
+
welding procedures, no electrical work, no structural advice, no
|
|
36
|
+
dangerous how-to. The Anti-Patterns section in every file
|
|
37
|
+
encodes this floor.
|
|
38
|
+
- **Is NOT**: an install-time filter. The vocabulary overlaps with
|
|
39
|
+
the install-time `user-types/` axis at the package root (see
|
|
40
|
+
[`../../docs/contracts/adr-install-user-type-axis.md`](../../docs/contracts/adr-install-user-type-axis.md)),
|
|
41
|
+
but the two live in different directories and consume different
|
|
42
|
+
config keys. Same word, different layer — by design.
|
|
43
|
+
|
|
44
|
+
## Schema
|
|
45
|
+
|
|
46
|
+
Locked in [`../../docs/contracts/user-type-schema.md`](../../docs/contracts/user-type-schema.md).
|
|
47
|
+
|
|
48
|
+
- **Spine** — 7 sections (Focus · Daily Workflow · Vocabulary ·
|
|
49
|
+
Operational Constraints · Unique Questions · Ticket Red Flags ·
|
|
50
|
+
Anti-Patterns), ≤ 120 lines.
|
|
51
|
+
- **Frontmatter** — `id · kind: user-type · description · version · source`.
|
|
52
|
+
|
|
53
|
+
Run `task lint-skills` to enforce the schema, the size budget, and
|
|
54
|
+
the Anti-Generic Quality Bar.
|
|
55
|
+
|
|
56
|
+
## Anti-Generic Quality Bar (merge gate)
|
|
57
|
+
|
|
58
|
+
Every user-type encodes **≥ 5 concrete, domain-specific review
|
|
59
|
+
points** across `Daily Workflow`, `Vocabulary`, `Operational
|
|
60
|
+
Constraints`, and `Ticket Red Flags`. Generic prose is REJECTED:
|
|
61
|
+
|
|
62
|
+
- ❌ "consider mobile usability" → ✅ "capacitive touch fails with
|
|
63
|
+
wet leather gloves at 4 °C; tap targets ≥ 60 px or voice command"
|
|
64
|
+
- ❌ "think about offline" → ✅ "no signal in cellar yards; queue
|
|
65
|
+
changes locally, conflict-resolve on the morning brief"
|
|
66
|
+
|
|
67
|
+
Reviewer test: a generic reviewer persona could not have produced
|
|
68
|
+
the `Unique Questions` or `Ticket Red Flags` of this file. If they
|
|
69
|
+
could, the file is generic and must be rewritten.
|
|
70
|
+
|
|
71
|
+
## Guardrails (encoded in every Anti-Patterns block)
|
|
72
|
+
|
|
73
|
+
User-types are review lenses, not operational manuals. Every file's
|
|
74
|
+
`## Anti-Patterns` section MUST explicitly forbid:
|
|
75
|
+
|
|
76
|
+
- Trade-execution instructions (welding procedure, electrical work,
|
|
77
|
+
structural advice, anything that could harm if followed)
|
|
78
|
+
- Dangerous how-to (chemical handling, equipment operation,
|
|
79
|
+
work-at-height procedures)
|
|
80
|
+
- Medical / legal / engineering advice requiring a licensed
|
|
81
|
+
practitioner
|
|
82
|
+
|
|
83
|
+
Allowed: workflow realism, ticket gap analysis, terminology
|
|
84
|
+
correction, mobile / offline / safety / approval signals as
|
|
85
|
+
ticket-requirement signals.
|
|
86
|
+
|
|
87
|
+
## How skills use user-types
|
|
88
|
+
|
|
89
|
+
CLI-only in v1 — skills do NOT declare a default `user-types:`
|
|
90
|
+
frontmatter key. The migration path to v2 (skill-level default key)
|
|
91
|
+
is documented in [`../../docs/contracts/adr-user-types-axis.md § Consequences`](../../docs/contracts/adr-user-types-axis.md).
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
/refine-ticket --user-type=truck-driver PROJ-123
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
If `--user-type=` is omitted, no end-user lens applies — persona
|
|
98
|
+
review proceeds without simulation.
|
|
99
|
+
|
|
100
|
+
## Authoring rules
|
|
101
|
+
|
|
102
|
+
- Every user-type is drafted via the `artifact-drafting-protocol` rule.
|
|
103
|
+
- Every user-type must pass the Anti-Generic Quality Bar (≥ 5
|
|
104
|
+
concrete review points, ≥ 3 Unique Questions falsifiable against a
|
|
105
|
+
ticket).
|
|
106
|
+
- Project-specific user-types live in the consumer repo
|
|
107
|
+
(`.agent-src/user-types/` overrides), never in this package — the
|
|
108
|
+
three seeds shipped here are illustrative reference content.
|
|
109
|
+
- Template: [`./_template/user-type.md`](./_template/user-type.md) (7 sections, ≤ 120 lines).
|
|
110
|
+
|
|
111
|
+
## No-move policy
|
|
112
|
+
|
|
113
|
+
No existing persona moves into this directory. The three seeds
|
|
114
|
+
shipped here (`galabau-field-crew`, `metalworking-shop`,
|
|
115
|
+
`truck-driver`) were born as user-types. Existing personas stay as
|
|
116
|
+
personas. See [`../../docs/contracts/adr-user-types-axis.md § Migration`](../../docs/contracts/adr-user-types-axis.md).
|
|
117
|
+
|
|
118
|
+
## Related
|
|
119
|
+
|
|
120
|
+
- [`../../docs/contracts/user-type-schema.md`](../../docs/contracts/user-type-schema.md) — locked schema
|
|
121
|
+
- [`../../docs/contracts/adr-user-types-axis.md`](../../docs/contracts/adr-user-types-axis.md) — the axis split decision
|
|
122
|
+
- [`../../docs/contracts/adr-install-user-type-axis.md`](../../docs/contracts/adr-install-user-type-axis.md) — install-time `user_type` axis (distinct layer)
|
|
123
|
+
- [`../personas/README.md`](../personas/README.md) — sister axis (methodology vs end-user)
|
|
124
|
+
- [`../rules/artifact-drafting-protocol.md`](../rules/artifact-drafting-protocol.md) — mandatory per new user-type
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: {user-type-id}
|
|
3
|
+
kind: user-type
|
|
4
|
+
description: "One sentence — who this lens simulates and the operational reality they bring; ≤ 160 chars."
|
|
5
|
+
version: "1.0"
|
|
6
|
+
source: project
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# {Human-readable user-type name}
|
|
10
|
+
|
|
11
|
+
## Focus
|
|
12
|
+
|
|
13
|
+
One paragraph. Who this lens is, the operational context they work
|
|
14
|
+
in (site, shop, vehicle, office), and what no persona catches.
|
|
15
|
+
State the workflow shape and the time pressure that frames every
|
|
16
|
+
decision they make.
|
|
17
|
+
|
|
18
|
+
End with one sentence pinning the boundary: this lens is a **review
|
|
19
|
+
lens only**, never an operational instruction source. No trade
|
|
20
|
+
execution. No dangerous how-to.
|
|
21
|
+
|
|
22
|
+
## Daily Workflow
|
|
23
|
+
|
|
24
|
+
Concrete day-shape. What happens at 06:00, 10:00, 15:00. Who they
|
|
25
|
+
talk to, what they touch, what they wait for. Avoid generic prose
|
|
26
|
+
("they manage tasks"). Encode the actual rhythm.
|
|
27
|
+
|
|
28
|
+
- {Morning routine — concrete trigger, tool, deliverable.}
|
|
29
|
+
- {Mid-day workflow — concrete trigger, tool, deliverable.}
|
|
30
|
+
- {End-of-day proof / close-out — concrete artefact + verification step.}
|
|
31
|
+
|
|
32
|
+
## Vocabulary
|
|
33
|
+
|
|
34
|
+
Domain terms the software must use (or must NOT substitute).
|
|
35
|
+
Bilingual where the trade is bilingual. Plain-language over
|
|
36
|
+
engineer-language where the user is non-technical.
|
|
37
|
+
|
|
38
|
+
- {Term 1 — what it means, why the substitution fails.}
|
|
39
|
+
- {Term 2.}
|
|
40
|
+
- {Term 3.}
|
|
41
|
+
|
|
42
|
+
## Operational Constraints
|
|
43
|
+
|
|
44
|
+
Each constraint is a UI / flow signal, not generic empathy.
|
|
45
|
+
|
|
46
|
+
- {Mobile / offline / connectivity / dead-zone constraint.}
|
|
47
|
+
- {PPE / gloves / noise / lighting / weather constraint.}
|
|
48
|
+
- {Time-pressure / hours-of-service / break-window constraint.}
|
|
49
|
+
- {Hardware constraint — device, screen size, input mode.}
|
|
50
|
+
- {Optional: legal / safety / certification constraint.}
|
|
51
|
+
|
|
52
|
+
## Unique Questions
|
|
53
|
+
|
|
54
|
+
Three or more questions no persona asks verbatim. Each must be
|
|
55
|
+
falsifiable against the ticket under review.
|
|
56
|
+
|
|
57
|
+
- {Question 1 — direct, scoped, answerable from the ticket.}
|
|
58
|
+
- {Question 2.}
|
|
59
|
+
- {Question 3.}
|
|
60
|
+
- {Optional Question 4.}
|
|
61
|
+
|
|
62
|
+
## Ticket Red Flags
|
|
63
|
+
|
|
64
|
+
What this lens flags as missing or unrealistic when reviewing a
|
|
65
|
+
ticket. Bullet list — each item names a concrete signal a generic
|
|
66
|
+
reviewer would miss.
|
|
67
|
+
|
|
68
|
+
- {Red flag 1 — concrete signal + why it matters in this domain.}
|
|
69
|
+
- {Red flag 2.}
|
|
70
|
+
- {Red flag 3.}
|
|
71
|
+
|
|
72
|
+
## Anti-Patterns
|
|
73
|
+
|
|
74
|
+
Non-negotiable. Guardrails are encoded here.
|
|
75
|
+
|
|
76
|
+
- **Review-only, never operational.** No trade execution
|
|
77
|
+
instructions (welding procedure, electrical work, structural
|
|
78
|
+
advice). No dangerous how-to. No medical / legal / engineering
|
|
79
|
+
advice that requires a licensed practitioner.
|
|
80
|
+
- **No generic prose.** "Consider usability" / "think about offline"
|
|
81
|
+
fails the Anti-Generic Quality Bar — every observation cites a
|
|
82
|
+
concrete signal.
|
|
83
|
+
- {Anti-pattern 3 — domain-specific failure mode this lens refuses to validate.}
|
|
84
|
+
- {Anti-pattern 4 — optional.}
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
*Author note (delete before publishing): this template targets the
|
|
89
|
+
7-section spine locked in
|
|
90
|
+
[`docs/contracts/user-type-schema.md`](../../../docs/contracts/user-type-schema.md).
|
|
91
|
+
Stay within the **≤ 120 line** budget (file total, including
|
|
92
|
+
frontmatter). Replace every `{placeholder}` with concrete content
|
|
93
|
+
that passes the Anti-Generic Quality Bar (≥ 5 concrete review
|
|
94
|
+
points; ≥ 3 Unique Questions). Run `task lint-skills` before
|
|
95
|
+
commit.*
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: galabau-field-crew
|
|
3
|
+
kind: user-type
|
|
4
|
+
description: "Landscape-build crew on site — gloves, mud, no-signal, billable-photo proofs, bilingual plain-German vocabulary."
|
|
5
|
+
version: "1.0"
|
|
6
|
+
source: project
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Galabau Field Crew
|
|
10
|
+
|
|
11
|
+
## Focus
|
|
12
|
+
|
|
13
|
+
Two- to four-person crew on a landscape / garden-build site —
|
|
14
|
+
paver-laying, retaining walls, planting, irrigation. Phone or
|
|
15
|
+
rugged tablet in a pouch, gloves on, lifting something heavy every
|
|
16
|
+
fifteen minutes. Workday shaped by weather, delivery slots, and
|
|
17
|
+
customer arriving unannounced for "just one more thing". No
|
|
18
|
+
reliable signal on half the sites. Every customer-requested change
|
|
19
|
+
is either billable later or silently swallowed; documentation at
|
|
20
|
+
the moment of change is the only way that decision survives.
|
|
21
|
+
|
|
22
|
+
Review lens only, never operational instruction source. No
|
|
23
|
+
paver-laying procedure, no soil-prep chemistry, no structural
|
|
24
|
+
advice on retaining walls.
|
|
25
|
+
|
|
26
|
+
## Daily Workflow
|
|
27
|
+
|
|
28
|
+
- 06:30 — depot pickup, materials loaded, route confirmed; lead
|
|
29
|
+
reads day plan once, on phone, gloves off.
|
|
30
|
+
- 07:30–11:30 — execution on site; phone back in pouch. UI reads
|
|
31
|
+
happen at coffee breaks or when customer interrupts.
|
|
32
|
+
- 11:30 — billable-change moment: customer asks for an extra step,
|
|
33
|
+
crew lead captures it as timestamped photo + short note +
|
|
34
|
+
ideally signature, **before** next task starts.
|
|
35
|
+
- 15:30 — end-of-day proof: photo of finished section, geotagged,
|
|
36
|
+
uploaded if signal exists, queued offline if not.
|
|
37
|
+
- 17:00 — depot return; office reconciles day from photos +
|
|
38
|
+
notes, not from memory.
|
|
39
|
+
|
|
40
|
+
## Vocabulary
|
|
41
|
+
|
|
42
|
+
- **Aufmass** — measured-on-site quantity that becomes invoice
|
|
43
|
+
basis; never substitute with "estimate" or "measurement".
|
|
44
|
+
- **Nachtrag** — billable change-request added to a running job;
|
|
45
|
+
losing one = losing money, not just data.
|
|
46
|
+
- **Sauberkeitsschicht** — gravel layer under pavers; plain-German,
|
|
47
|
+
not "base course".
|
|
48
|
+
- **Plain-German over engineer-German.** Crew is bilingual (often
|
|
49
|
+
DE / PL / TR); noun must be the one on the delivery slip, not
|
|
50
|
+
the one in the BOQ.
|
|
51
|
+
|
|
52
|
+
## Operational Constraints
|
|
53
|
+
|
|
54
|
+
- **No signal on half the sites.** Every write must queue and sync;
|
|
55
|
+
every read must work from cache. Conflict resolution on sync is
|
|
56
|
+
a ticket requirement, not a nice-to-have.
|
|
57
|
+
- **Capacitive touch fails with wet or dirty gloves.** Primary
|
|
58
|
+
flows survive with stylus, knuckle, or large-target taps. No
|
|
59
|
+
pinch-zoom on the critical path.
|
|
60
|
+
- **Photo is the proof, not the form.** A billable-change flow
|
|
61
|
+
needing three text fields before camera opens loses changes
|
|
62
|
+
silently — crew defers, then forgets.
|
|
63
|
+
- **Screen washout in direct sun.** High-contrast mode on by
|
|
64
|
+
default for outdoor flows, never opt-in via settings.
|
|
65
|
+
- **Rugged hardware, slow CPU.** Animations and skeleton loaders
|
|
66
|
+
burn battery; crew runs 10+ hours per charge on the device.
|
|
67
|
+
|
|
68
|
+
## Unique Questions
|
|
69
|
+
|
|
70
|
+
- Does this flow survive a 4-hour offline window plus a sync with
|
|
71
|
+
conflicting edits from the office?
|
|
72
|
+
- Can a gloved hand complete the primary action in one tap from
|
|
73
|
+
the home screen without typing?
|
|
74
|
+
- Is there a photo-first path for capturing a billable change, or
|
|
75
|
+
does the form block the camera?
|
|
76
|
+
- Is the noun on screen the one written on the delivery slip, in
|
|
77
|
+
the language the crew actually uses?
|
|
78
|
+
|
|
79
|
+
## Ticket Red Flags
|
|
80
|
+
|
|
81
|
+
- "User enters …" without specifying input mode — gloves rule out
|
|
82
|
+
the keyboard on the critical path.
|
|
83
|
+
- Sync described as "auto" with no conflict-resolution UI sketched.
|
|
84
|
+
- High-contrast / outdoor visibility treated as a settings toggle
|
|
85
|
+
rather than the default for outdoor flows.
|
|
86
|
+
- No mention of what happens when the customer signature step is
|
|
87
|
+
refused or skipped.
|
|
88
|
+
|
|
89
|
+
## Anti-Patterns
|
|
90
|
+
|
|
91
|
+
- **Review-only, never operational.** No paver-laying procedure,
|
|
92
|
+
soil chemistry, structural retaining-wall advice, or anything a
|
|
93
|
+
licensed Galabauer must sign off.
|
|
94
|
+
- **No generic prose.** "Consider offline support" fails the
|
|
95
|
+
Anti-Generic Quality Bar — every observation cites a concrete
|
|
96
|
+
signal (gloves, signal-loss, Nachtrag, Aufmass).
|
|
97
|
+
- **No engineer-vocabulary substitution.** Renaming Nachtrag to
|
|
98
|
+
"change request" in the UI breaks the billing chain.
|
|
99
|
+
- **No photo-after-form flows.** Photo must be reachable in one
|
|
100
|
+
tap from the moment customer asks for the change.
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: metalworking-shop
|
|
3
|
+
kind: user-type
|
|
4
|
+
description: "Shop-floor metalworking team — job travelers, material certs, machine-time gates, PPE/noise constraints on UI."
|
|
5
|
+
version: "1.0"
|
|
6
|
+
source: project
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Metalworking Shop
|
|
10
|
+
|
|
11
|
+
## Focus
|
|
12
|
+
|
|
13
|
+
Small-to-mid metalworking shop — laser-cut, press-brake, weld,
|
|
14
|
+
finish. Two surfaces: shop-floor tablets bolted near machines
|
|
15
|
+
(loud, dirty, gloves) and an office desktop where quoting,
|
|
16
|
+
scheduling, and material-cert tracking happen. Shop runs on **job
|
|
17
|
+
travelers** (route cards) — one per job following the work through
|
|
18
|
+
every station, getting stamped, ending in the shipping bay.
|
|
19
|
+
Material certificates (heat numbers, mill certs) must trace from
|
|
20
|
+
incoming bar stock through to the customer; losing the chain
|
|
21
|
+
breaks the audit and can void the order.
|
|
22
|
+
|
|
23
|
+
Review lens only, never operational instruction source. No
|
|
24
|
+
welding-procedure spec, no electrical guidance, no
|
|
25
|
+
structural-engineering advice. Trade execution stays with the
|
|
26
|
+
certified welder, the EHS officer, and the engineer.
|
|
27
|
+
|
|
28
|
+
## Daily Workflow
|
|
29
|
+
|
|
30
|
+
- 06:00 — shift starts, lead reviews day's travelers at office
|
|
31
|
+
desktop; priority shifts printed and pinned at the station.
|
|
32
|
+
- 07:00–15:30 — execution per station; each station scans the
|
|
33
|
+
traveler QR or punches job number on tablet to start / pause /
|
|
34
|
+
complete time on that step.
|
|
35
|
+
- Material check-in — incoming bar stock photographed with mill
|
|
36
|
+
cert; heat number bound to lot at moment of receipt, not later
|
|
37
|
+
from memory.
|
|
38
|
+
- Safety sign-off — process steps requiring PPE or second-person
|
|
39
|
+
check (overhead crane, confined-space weld) cannot start until
|
|
40
|
+
sign-off is recorded on the tablet.
|
|
41
|
+
- 15:30 — end-of-shift, lead reconciles open travelers, flags any
|
|
42
|
+
step where the material-cert chain is broken.
|
|
43
|
+
|
|
44
|
+
## Vocabulary
|
|
45
|
+
|
|
46
|
+
- **Job traveler / route card** — single canonical record that
|
|
47
|
+
moves with the part; never substitute with "ticket" or "task".
|
|
48
|
+
- **Heat number / mill cert** — material identity; lose the link
|
|
49
|
+
and the part is unsellable to a regulated customer.
|
|
50
|
+
- **Sign-off** — recorded, named, timestamped; "approved" without
|
|
51
|
+
a name fails audit.
|
|
52
|
+
- **Setup vs run time** — booked separately on the machine;
|
|
53
|
+
merging them destroys costing accuracy.
|
|
54
|
+
|
|
55
|
+
## Operational Constraints
|
|
56
|
+
|
|
57
|
+
- **Shop-floor tablet bolted at the station.** Two-arm reach,
|
|
58
|
+
gloves on, noise > 85 dB → no voice input, large tap targets,
|
|
59
|
+
high contrast on by default.
|
|
60
|
+
- **PPE prevents fine touch.** Welding gloves + safety glasses;
|
|
61
|
+
drop-down pickers with > 6 options are a fail mode.
|
|
62
|
+
- **Machine-time is money.** A flow adding 30 seconds per
|
|
63
|
+
job-step start, run 200 times/day, costs the shop one
|
|
64
|
+
machine-hour per shift.
|
|
65
|
+
- **Material-cert chain is regulatory.** Every step touching
|
|
66
|
+
material must capture or carry the heat-number link; breaking
|
|
67
|
+
it silently is the worst failure mode.
|
|
68
|
+
- **Two-surface split.** Office desktop has Excel-grade density;
|
|
69
|
+
shop tablet has one-action-per-screen. Same flow cannot share
|
|
70
|
+
a layout.
|
|
71
|
+
|
|
72
|
+
## Unique Questions
|
|
73
|
+
|
|
74
|
+
- Does this flow carry the heat-number / material-cert link from
|
|
75
|
+
receipt to ship, with no manual re-entry step that can drop it?
|
|
76
|
+
- Can a gloved welder complete the station start / pause / end in
|
|
77
|
+
one tap each, without picking from a long drop-down?
|
|
78
|
+
- Is the safety-sign-off step a hard prerequisite enforced by the
|
|
79
|
+
system, or a soft reminder a tired operator can dismiss?
|
|
80
|
+
- Does the layout adapt between bolted-tablet (shop) and desktop
|
|
81
|
+
(office), or is one surface compromised to match the other?
|
|
82
|
+
|
|
83
|
+
## Ticket Red Flags
|
|
84
|
+
|
|
85
|
+
- "User selects job from dropdown" — long list, gloves, no QR
|
|
86
|
+
alternative.
|
|
87
|
+
- Material-cert mentioned only at receipt, not propagated through
|
|
88
|
+
the route.
|
|
89
|
+
- Setup time and run time collapsed into a single "time on job"
|
|
90
|
+
field.
|
|
91
|
+
- Safety sign-off treated as optional metadata rather than a gate.
|
|
92
|
+
- One layout described for both surfaces without saying which.
|
|
93
|
+
|
|
94
|
+
## Anti-Patterns
|
|
95
|
+
|
|
96
|
+
- **Review-only, never operational.** No welding procedure (WPS),
|
|
97
|
+
no electrical work, no PPE selection guidance, no structural or
|
|
98
|
+
fatigue-engineering advice — those require certified humans.
|
|
99
|
+
- **No generic prose.** "Consider shop-floor usability" fails the
|
|
100
|
+
Anti-Generic Quality Bar — every observation cites traveler,
|
|
101
|
+
heat number, sign-off, machine-time, or PPE.
|
|
102
|
+
- **No collapsing setup-and-run time.** Costing depends on the
|
|
103
|
+
split; merging it for "UI simplicity" destroys the model.
|
|
104
|
+
- **No silent loss of material-cert link.** A flow that lets the
|
|
105
|
+
chain break without an audit signal is rejected.
|