Wave 3 OpenSpec changes: the assistant, what it may read, and what is kept - #872
Merged
Merged
Conversation
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.
Contributor
Quality Report — ConductionNL/hermiq @
|
| 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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.mdin 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
competitor-parity-2026-09skip_specsa-provider-and-a-place-per-ai-featurewhat-the-model-reads-and-what-is-keptthe-declared-tool-surface-and-the-prompt-librarya-conversational-intake-that-files-for-the-citizenidentical-reports-collapse-into-oneThe first nine are cluster 46, "AI, and what it is allowed to read".
C-intake-30is 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-policyalready constrains{provider, models[]}per organisation; the gap is that nothing joins it toai-feature-governance, so a policy allowing two providers allows every feature to use either.run-audit-logalready records every run on openregister's tamper-evident chain; the gap is that nothing expires.agent-tool-governancealready holds per-agent grants with default-deny on writes; the gap is the outbound direction.woo-llm-anonymisationalready runs a tool-free PII detection turn; the gap is that a detection is not a redaction and must never satisfy one.case-assistant-surfaceis untouched, and itstools: ['__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
mustresting on one vendor page, and C-intake-30 is amustresting 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.phpscores 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-38sits 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 --strictpasses on all six new changes.No
check:strictand no PHPUnit: this PR changes no PHP and no JavaScript.🤖 Generated with Claude Code