Skip to content
This repository was archived by the owner on May 29, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions .specter-prompt.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ You are running HEADLESS. Do NOT use AskUserQuestion, interactive prompts, or sk
Write files directly using the Write tool.

## Inputs
- Change: p2-minutes-and-decisions-core-t2 (title: Minutes and Decisions — Core T2)
- Context brief: openspec/changes/p2-minutes-and-decisions-core-t2/context-brief.md
- Change: p2-minutes-and-decisions-core-t3 (title: Minutes and Decisions — Core T3)
- Context brief: openspec/changes/p2-minutes-and-decisions-core-t3/context-brief.md
- Data model ADR: openspec/architecture/adr-000-data-model.md

Governance Domains:
Expand All @@ -29,13 +29,13 @@ Project guidelines: See ../project.md for workspace-wide standards

## Step 1: Read context
Read these files COMPLETELY before writing anything:
- openspec/changes/p2-minutes-and-decisions-core-t2/context-brief.md (features, stories, stakeholders, journeys)
- openspec/changes/p2-minutes-and-decisions-core-t3/context-brief.md (features, stories, stakeholders, journeys)
- openspec/architecture/adr-000-data-model.md (entity definitions)
- All files in openspec/architecture/ (app ADRs)
- All files in .claude/openspec/architecture/ (company ADRs, if present)

## Step 2: Get artifact templates
Run: `openspec instructions proposal --change p2-minutes-and-decisions-core-t2 --json`
Run: `openspec instructions proposal --change p2-minutes-and-decisions-core-t3 --json`
This returns the template and rules for the proposal artifact.
Then do the same for: design, specs, tasks (in that order).

Expand All @@ -54,8 +54,8 @@ For each artifact (proposal → design → specs → tasks):
## Step 4: Commit
After all 4 artifacts are written:
```bash
git add openspec/changes/p2-minutes-and-decisions-core-t2/
git commit -m 'feat: Add OpenSpec change p2-minutes-and-decisions-core-t2 from Specter'
git add openspec/changes/p2-minutes-and-decisions-core-t3/
git commit -m 'feat: Add OpenSpec change p2-minutes-and-decisions-core-t3 from Specter'
```
Do NOT push — the caller handles pushing.
Do NOT create branches — stay on the current branch.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
schema: spec-driven
created: 2026-04-17
created: 2026-04-16
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ These specs were already decided/implemented. Use them as context.
**Spec:** p1-schemas-and-data-model
**Platform:** Nextcloud + OpenRegister

## Features (6 total, spec-linked, sorted by market demand)
## Features (6 total, sorted by market demand)

### Resolution Register
**demand: 206** (66 tender mentions) | Category: core
Expand Down Expand Up @@ -101,10 +101,10 @@ Managing AV infrastructure in raadzaal and commissiekamers. Discussion systems,

### Handle Complex Multi-Domain Citizen Question
A citizen has a question spanning multiple domains (e.g., housing benefit, parking permit, and social assistance). The front desk officer creates linked zaken or a combined intake and routes each to the correct department.
**Trigger:** Citizen presents with multiple interconnected serv
**Trigger:** Citizen presents with multiple interconnected service needs in
... (truncated)

## Features (16 total, spec-linked, sorted by market demand)
## Features (16 total, sorted by market demand)

### Real-Time Action Item Tracking and Multi-Meeting Analytics
**demand: 94** (21 tender mentions) | Category: core
Expand Down Expand Up @@ -825,16 +825,6 @@ All Conduction Nextcloud apps serve Dutch government users but must support mult
- `l10n/en.json` is the identity-mapped source file (key == value).
- Hardcoded Dutch strings in code MUST be converted to English keys with Dutch translations in `nl.json`.

### Sentence Case for All UI Strings
- All translation keys and user-facing strings MUST use **sentence case**: only the first word is capitalized.
- Correct: `"Add directory"`, `"No results found"`, `"Delete selected"`, `"Save configuration"`
- Wrong (title case): `"Add Directory"`, `"No Results Found"`, `"Delete Selected"`
- Wrong (all lowercase): `"add directory"`, `"no results found"`
- **Exceptions** that keep their capitalization:
- Proper nouns and product names: `"OpenRegister"`, `"Nextcloud"`, `"GitHub"`, `"DocuDesk"`
- Acronyms: `"API"`, `"URL"`, `"PDF"`, `"SOLR"`, `"JSON"`, `"RBAC"`, `"OAS"`
- Single-word strings still start with a capital: `"Delete"`, `"Search"`, `"Save"`

### Required Languages
- Minimum: English (en) + Dutch (nl) translations.
- `l10n/en.json` and `l10n/nl.json` MUST exist in every app with a UI.
Expand All @@ -855,16 +845,9 @@ All Conduction Nextcloud apps serve Dutch government users but must support mult
- Date/number formatting: respect user locale via Nextcloud core.
- Each app with OpenRegister: define `register-i18n` spec listing translatable fields.

### Shared Component Library (@conduction/nextcloud-vue)
- The shared library does NOT translate internally — it accepts pre-translated strings via props.
- Components have English defaults for all label/text props (e.g., `addLabel="Add"`, `cancelLabel="Cancel"`).
- Consumer apps are responsible for passing `t()` results as prop values.
- The library lists `@nextcloud/l10n` as a peer dependency, not a direct dependency.

## Consequences
- All apps maintain two translation files that must stay in sync.
- Dutch strings used as translation keys (e.g., `t('app', 'Besluiten')`) are a violation — the English equivalent must be the key.
- Title case in translation keys (e.g., `"Add Directory"`) is a violation — use sentence case (`"Add directory"`).
- New features must include both `en.json` and `nl.json` entries before merging.

### ADR-008-testing
Expand Down Expand Up @@ -946,34 +929,18 @@ We want to unify these into a **single priority-scheduled container pool** so th

### Container types (priority order)

| Priority | Type | Source | Container image | Model | Fallback |
|----------|------|--------|-----------------|-------|----------|
| 1 | **bugfix** | Hydra: fix iteration after review failure | `hydra-builder` | haiku | — |
| 2 | **code-review** | Hydra: PR code review | `hydra-reviewer` | sonnet | opus |
| 3 | **security-review** | Hydra: PR security review | `hydra-security` | sonnet | opus |
| 4 | **build** | Hydra: initial spec build | `hydra-builder` | haiku | — |
| 5 | **audit** | Hydra: codebase audit | `hydra-builder` | sonnet | opus |
| 6 | **spec-generation** | Specter: push_spec_pipeline | `specter-llm-worker` | sonnet | haiku |
| 7 | **schema-synthesis** | Specter: generate/dedup schemas | `specter-llm-worker` | haiku | — |
| 8 | **classification** | Specter: classify/redistribute features | `specter-llm-worker` | haiku | — |
| 9 | **translation** | Specter: translate requirements | `specter-llm-worker` | haiku | — |
| 10 | **discovery** | Specter: research, feature extraction | `specter-llm-worker` | haiku | — |

### Model strategy

**Principle:** Use the cheapest model that can do the job. Reserve expensive models for judgment work.

| Work type | Model | Rationale |
|-----------|-------|-----------|
| Build (implementation) | **Haiku** | Clear instructions (tasks.md, design.md). Pattern-following, not judgment. Faster and cheaper — 5 parallel Haiku builds burn far less quota than Sonnet. |
| Fix (quality/browser/review) | **Haiku** | "Fix this PHPCS error" or "fix this review finding" — explicit, targeted corrections. |
| Code review | **Sonnet → Opus** | Judgment work: spotting architectural issues, missed edge cases, style problems. Falls back to deeper model (Opus) when Sonnet quota is exhausted. |
| Security review | **Sonnet → Opus** | Critical: injection vectors, auth bypasses, secret leaks. Same fallback logic. |
| Audit | **Sonnet → Opus** | Full codebase analysis — needs depth. |

**Quota optimization:** Claude Max plans have separate "Sonnet only" and "all models" weekly limits. By defaulting builders to Haiku, the Sonnet quota is reserved for reviews only (~20 turns each, 2 per PR). When Sonnet runs out, reviews fall back to the **deeper** model (Opus), not the shallower one — because reviews are the last line of defense before human approval.

**Overrides:** Set `HYDRA_BUILDER_MODEL`, `HYDRA_REVIEWER_MODEL`, or `HYDRA_REVIEWER_FALLBACK_MODEL` env vars to change defaults.
| Priority | Type | Source | Container image | Model |
|----------|------|--------|-----------------|-------|
| 1 | **bugfix** | Hydra: fix iteration after review failure | `hydra-builder` | sonnet |
| 2 | **code-review** | Hydra: PR code review | `hydra-reviewer` | sonnet |
| 3 | **security-review** | Hydra: PR security review | `hydra-security` | sonnet |
| 4 | **build** | Hydra: initial spec build | `hydra-builder` | sonnet |
| 5 | **audit** | Hydra: codebase audit | `hydra-builder` | sonnet |
| 6 | **spec-generation** | Specter: push_spec_pipeline | `specter-llm-worker` | sonnet |
| 7 | **schema-synthesis** | Specter: generate/dedup schemas | `specter-llm-worker` | haiku |
| 8 | **classification** | Specter: classify/redistribute features | `specter-llm-worker` | haiku |
| 9 | **translation** | Specter: translate requirements | `specter-llm-worker` | haiku |
| 10 | **discovery** | Specter: research, feature extraction | `specter-llm-worker` | haiku |

### Architecture

Expand Down
Loading
Loading