Skip to content

Wave 3 OpenSpec changes: the assistant, what it may read, and what is kept - #872

Merged
rubenvdlinde merged 6 commits into
developmentfrom
openspec/discovery-wave-3
Sep 14, 2026
Merged

rubenvdlinde merged 6 commits into
developmentfrom
openspec/discovery-wave-3

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

Wave 3 of the dossiq competitor parity programme. Round 4 of the sweep read 36 systems, kept 631 candidates and grouped them into 70 capability clusters (procest/_round4/discovery/build-plan.md in ConductionNL/market-intelligence, written 2026-09-14). Decision D13 puts the assistant in hermiq: dossiq declares the tools and the rights, anonymisation before a model reads is filinq's, and the run record goes to openregister's audit trail.

Specs only. No code, no schema, no migration.

What is in it

change candidates size decision
competitor-parity-2026-09 umbrella, skip_specs S D13, D6, D21, D17
a-provider-and-a-place-per-ai-feature C-integrations-38, C-configuration-75 M D13, D21
what-the-model-reads-and-what-is-kept C-access-and-privacy-3, -53 M D13, D21
the-declared-tool-surface-and-the-prompt-library C-integrations-19, C-configuration-44 M D13
a-conversational-intake-that-files-for-the-citizen C-intake-9, C-communication-64, C-integrations-1 L D13, D21
identical-reports-collapse-into-one C-intake-30 M D13, D21

The first nine are cluster 46, "AI, and what it is allowed to read". C-intake-30 is not: the sweep puts it in cluster 35, owned by dossiq. The change draws the line explicitly, hermiq decides whether two reports describe one event and dossiq decides what happens next.

Extended, not created

Four of the ten candidates land on gaps inside capabilities hermiq already ships, which is why three of the five changes are M.

tenant-model-policy already constrains {provider, models[]} per organisation; the gap is that nothing joins it to ai-feature-governance, so a policy allowing two providers allows every feature to use either. run-audit-log already records every run on openregister's tamper-evident chain; the gap is that nothing expires. agent-tool-governance already holds per-agent grants with default-deny on writes; the gap is the outbound direction. woo-llm-anonymisation already runs a tool-free PII detection turn; the gap is that a detection is not a redaction and must never satisfy one.

case-assistant-surface is untouched, and its tools: ['__none__'] sentinel stays in force. The intake surface is separate, with a create-only grant, precisely so that guarantee is not weakened.

One new capability: conversational-intake. One new spec: report-similarity.

Three points worth reading

Five of the ten candidates have no driven passer at all, a higher share than any other wave-3 cluster. C-access-and-privacy-3 is a must resting on one vendor page, and C-intake-30 is a must resting on Jira Service Management's documentation. Each requirement that rests on a vendor claim says so on its face, per D21.

C-communication-64 already passes, and dossiq has the better shape. SentimentService.php scores Dutch contactmoment text for klacht, advocaat and wethouder deterministically. The intake change requires hermiq to use a deterministic signal where the owning app supplies one, to record that it did, and to label a model score as a model output wherever it is shown. It does not replace the working thing with a model.

Q9.15, the command language, is not here, and that is deliberate. The brief asked to place it in hermiq if the plan does. It does not: C-search-38 sits in cluster 65, "search quality", owned by openregister, with the parked question revived under D5 on four passers. The umbrella records that so nobody re-derives it.

One thing the grouping change writes down because it would otherwise break quietly: collapsing two hundred reports into one item never reduces the confirmations of receipt owed. Awb 4:3a owes each of those two hundred people one.

Verification

openspec validate <change> --type change --strict passes on all six new changes.

No check:strict and no PHPUnit: this PR changes no PHP and no JavaScript.

🤖 Generated with Claude Code

Records where the five wave-3 changes come from: cluster 46 of the round 4 competitor
sweep plus C-intake-30, and decisions D13, D6, D21 and D17. Also records what hermiq
already ships against the cluster, and why the command language stays with
openregister. States no requirement of its own, so it carries skip_specs.
Cluster 46, C-integrations-38 (must) and C-configuration-75. Joins tenant-model-policy
to ai-feature-governance: a feature binds its own provider inside the policy ceiling, a
provider declares its residency, a run outside a required residency is refused before
the call, and the run records which model saw what and where.
Cluster 46, C-access-and-privacy-3 and -53, both must. A feature may require filinq's
redaction and fails closed without it; a detection never counts as a redaction. Every
run carries a retention, a job enforces it and reports that it ran, and deletion
removes the payload while leaving the audit chain whole.
Cluster 46, C-integrations-19 and C-configuration-44. Adds the outbound direction
beside agent-tool-governance: an outside agent calls declared tools under its own
principal's rights, with a per-registration grant and an output allowlist. Makes the
assistant prompts administered objects with a one-act kill switch.
Cluster 46, C-intake-9, C-communication-64 and C-integrations-1, none with a driven
passer. A surface separate from the tool-free case assistant, with a create-only grant,
a classification that can abstain, no dead ends, one conversation across channels, and
a deterministic escalation signal preferred over a model one.
C-intake-30, a must the sweep puts in dossiq's cluster 35. hermiq answers whether two
reports describe one event, in three bands, additively and reversibly, with readable
reasons. dossiq decides what a group means. Grouping never reduces the confirmations of
receipt owed under Awb 4:3a.
@rubenvdlinde
rubenvdlinde merged commit 79a4baa into development Sep 14, 2026
46 checks passed
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/hermiq @ 8c94a44

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-specs
check-manifest
test-l10n
format
check-l10n-js
check-schema-l10n
check-bundle-budget
composer ✅ 123/123
npm ✅ 738/738
app:check-code ⏭️
info.xml
REUSE
PHPUnit ⏭️ not run for this diff — no file in this diff matches the code globs, and none carries a source extension — the heavy tier has nothing to decide about it.
Newman
Playwright ⏭️ deferred: E2E runs locally and on the promotion path only. This pull request targets development, so the suite is asked once per promotion into beta and main rather than once per push per open pull request. Run it on any branch from the Actions tab, or locally with npx playwright test.
Hydra gates

Quality workflow — 2026-09-14 12:48 UTC

Download the full PDF report from the workflow artifacts.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant