@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.
Files changed (108) hide show
  1. package/.agent-src/commands/agent-status.md +29 -0
  2. package/.agent-src/commands/onboard.md +221 -81
  3. package/.agent-src/commands/refine-ticket.md +3 -0
  4. package/.agent-src/packs/README.md +49 -0
  5. package/.agent-src/packs/agency-delivery.yml +63 -0
  6. package/.agent-src/packs/content-engine.yml +53 -0
  7. package/.agent-src/packs/founder-mvp.yml +51 -0
  8. package/.agent-src/personas/README.md +8 -0
  9. package/.agent-src/presets/README.md +26 -0
  10. package/.agent-src/presets/balanced.yml +34 -0
  11. package/.agent-src/presets/fast.yml +31 -0
  12. package/.agent-src/presets/strict.yml +38 -0
  13. package/.agent-src/profiles/README.md +29 -0
  14. package/.agent-src/profiles/agency.yml +27 -0
  15. package/.agent-src/profiles/content_creator.yml +25 -0
  16. package/.agent-src/profiles/developer.yml +26 -0
  17. package/.agent-src/profiles/finance.yml +24 -0
  18. package/.agent-src/profiles/founder.yml +25 -0
  19. package/.agent-src/profiles/ops.yml +25 -0
  20. package/.agent-src/rules/no-cheap-questions.md +25 -17
  21. package/.agent-src/skills/adr-create/SKILL.md +78 -68
  22. package/.agent-src/skills/refine-ticket/SKILL.md +3 -0
  23. package/.agent-src/skills/subagent-orchestration/SKILL.md +33 -0
  24. package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  25. package/.agent-src/templates/skill-archive-note.md +101 -0
  26. package/.agent-src/user-types/README.md +124 -0
  27. package/.agent-src/user-types/_template/user-type.md +95 -0
  28. package/.agent-src/user-types/galabau-field-crew.md +100 -0
  29. package/.agent-src/user-types/metalworking-shop.md +105 -0
  30. package/.agent-src/user-types/truck-driver.md +113 -0
  31. package/.claude-plugin/marketplace.json +1 -1
  32. package/CHANGELOG.md +91 -30
  33. package/README.md +68 -72
  34. package/config/agent-settings.template.yml +22 -0
  35. package/docs/adrs/caveman/0001-default-off-until-bench.md +93 -0
  36. package/docs/adrs/caveman/README.md +9 -0
  37. package/docs/adrs/cost/0001-hard-stop-hook.md +114 -0
  38. package/docs/adrs/cost/README.md +9 -0
  39. package/docs/adrs/memory/0001-consumer-side-snapshot.md +111 -0
  40. package/docs/adrs/memory/README.md +9 -0
  41. package/docs/adrs/router/0001-three-tier-routing.md +119 -0
  42. package/docs/adrs/router/README.md +9 -0
  43. package/docs/adrs/schema/0001-json-schema-frontmatter.md +102 -0
  44. package/docs/adrs/schema/README.md +9 -0
  45. package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +99 -0
  46. package/docs/adrs/smoke/README.md +9 -0
  47. package/docs/architecture/current-onboard-baseline.md +126 -0
  48. package/docs/architecture/current-safety-behavior.md +137 -0
  49. package/docs/archive/CHANGELOG-pre-2.16.0.md +48 -0
  50. package/docs/contracts/adr-layout.md +108 -0
  51. package/docs/contracts/adr-mcp-runtime.md +128 -0
  52. package/docs/contracts/adr-user-types-axis.md +127 -0
  53. package/docs/contracts/benchmark-corpus-spec.md +97 -0
  54. package/docs/contracts/benchmark-report-schema.md +111 -0
  55. package/docs/contracts/command-clusters.md +1 -0
  56. package/docs/contracts/command-taxonomy.md +137 -0
  57. package/docs/contracts/compression-default-kill-criterion.md +69 -0
  58. package/docs/contracts/config-presets.md +144 -0
  59. package/docs/contracts/cost-dashboard.md +143 -0
  60. package/docs/contracts/cost-enforcement.md +134 -0
  61. package/docs/contracts/file-ownership-matrix.json +0 -7
  62. package/docs/contracts/mcp-tool-inventory.md +53 -0
  63. package/docs/contracts/measurement-baseline.md +102 -0
  64. package/docs/contracts/namespace.md +125 -0
  65. package/docs/contracts/profile-system.md +142 -0
  66. package/docs/contracts/safety-model.md +129 -0
  67. package/docs/contracts/smoke-contracts.md +144 -0
  68. package/docs/contracts/user-type-schema.md +146 -0
  69. package/docs/contracts/workflow-packs.md +121 -0
  70. package/docs/decisions/ADR-010-profile-pack-preset-boundary.md +132 -0
  71. package/docs/decisions/INDEX.md +1 -0
  72. package/docs/featured-commands.md +27 -0
  73. package/docs/parity/bench-ruflo.json +58 -0
  74. package/docs/parity/bench.json +41 -0
  75. package/docs/parity/ruflo.md +46 -0
  76. package/docs/profiles.md +91 -0
  77. package/docs/recruits/_template.md +81 -0
  78. package/package.json +1 -1
  79. package/scripts/_cli/cmd_explain.py +250 -0
  80. package/scripts/_lib/bench_cost.py +138 -0
  81. package/scripts/_lib/bench_quality.py +118 -0
  82. package/scripts/_lib/bench_report.py +150 -0
  83. package/scripts/agent-config +13 -0
  84. package/scripts/audit_adr_coverage.py +175 -0
  85. package/scripts/audit_mcp_tools.py +146 -0
  86. package/scripts/bench_baseline_ready.py +108 -0
  87. package/scripts/bench_drift_check.py +151 -0
  88. package/scripts/bench_per_tool.py +216 -0
  89. package/scripts/bench_run.py +155 -0
  90. package/scripts/compress.py +48 -2
  91. package/scripts/config/__init__.py +9 -0
  92. package/scripts/config/presets.py +206 -0
  93. package/scripts/config/profiles.py +173 -0
  94. package/scripts/cost/budget.mjs +73 -12
  95. package/scripts/cost/preflight.mjs +89 -0
  96. package/scripts/lint_archived_skills.py +143 -0
  97. package/scripts/lint_bench_corpus.py +161 -0
  98. package/scripts/lint_namespace.py +135 -0
  99. package/scripts/schemas/user-type.schema.json +35 -0
  100. package/scripts/skill_linter.py +139 -4
  101. package/scripts/skill_overlap.py +204 -0
  102. package/scripts/skill_tools/audit_user_type_coverage.py +148 -0
  103. package/scripts/skill_usage_collect.py +191 -0
  104. package/scripts/skill_usage_report.py +162 -0
  105. package/scripts/smoke/kernel.sh +101 -0
  106. package/scripts/smoke/router.sh +129 -0
  107. package/scripts/smoke/schema.sh +71 -0
  108. 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.17.0"
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.