@adrata/adrata-mcp 1.0.8 → 1.0.30

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.
@@ -13,7 +13,14 @@ The workflow semantics are fixed by
13
13
  `company/decisions/2026-08-29-two-gate-ai-qa-human-production.md`; the required
14
14
  evidence loop is fixed by
15
15
  `company/decisions/2026-08-29-recorded-staging-qa-standard.md`. This skill is
16
- their operating procedure.
16
+ their operating procedure. Read the current amendment at
17
+ `company/decisions/2026-09-04-complete-quality-gates-and-instant-interactions.md`
18
+ and the card contract at
19
+ `company/playbooks/engineering/card-readiness-and-evidence-contract.md`.
20
+ Every required criterion/configuration must pass: failed, blocked, skipped,
21
+ missing, stale, unknown, or flaky results block completion. Do not use a human
22
+ acknowledgement or legacy unknown-author exception to clear an incomplete gate.
23
+ No visible UI changes are authorized by the quality audit.
17
24
 
18
25
  ## Establish the real queue
19
26
 
@@ -29,9 +36,14 @@ their operating procedure.
29
36
  rows through the governed API. A card created directly in an old QA column
30
37
  may honestly have only one transition.
31
38
  4. Audit the criteria themselves. Each must describe an observable outcome and
32
- be executable at the current gate. Add or correct missing coverage before
33
- calling the card clean; never turn a vague criterion green by interpreting it
34
- generously.
39
+ be executable at the current gate. `list_work_item_acceptance_criteria`
40
+ returns `criteriaQuality`, naming criteria that cannot fail as written an
41
+ unfalsifiable result, a location that is not a place to stand, an unfinished
42
+ clause. It is a floor, not a ceiling: a criterion it passes can still be
43
+ untestable at this gate, and the judgement stays yours. Read `vacuous` rather
44
+ than `clean` on an empty list — a card with no criteria is a finding, not a
45
+ clean one. Add or correct missing coverage before calling the card clean;
46
+ never turn a vague criterion green by interpreting it generously.
35
47
  5. Missing independent QA evidence by itself is expected at QA1 entry and never
36
48
  justifies a bounce. Do not report a vague “missing evidence path”: name the
37
49
  allegedly missing product route, fixture, credential, artifact location, or
@@ -43,6 +55,11 @@ their operating procedure.
43
55
 
44
56
  ## Preserve independent gates
45
57
 
58
+ - Verify the actual authenticated reviewer credential before claiming or
59
+ certifying. A connector named `qa1` or `qa2` does not establish independence;
60
+ it may still resolve to the owner's shared OAuth store. Confirm the named
61
+ identity pool and dedicated credential store. If they resolve to the author
62
+ or prior gate's credential, continue useful diagnosis but do not record a pass.
46
63
  - QA1 and QA2 are separate passes over separate column-history dwells. A prior
47
64
  checkbox or receipt is evidence to inspect, not a substitute for rerunning it.
48
65
  - An agent's QA2 credential must differ from the criterion author and the agent
@@ -143,6 +160,13 @@ does not establish that the screen is visually correct.
143
160
  card's exact open QA dwell with the environment and build SHA. Until that
144
161
  surface is deployed, retain the files and record their paths or durable run
145
162
  links without pretending they were attached.
163
+ - A hardened Electron package can still be driven through its renderer CDP
164
+ endpoint. A timeout from Playwright's `electron.launch()` does not establish
165
+ that the package is untestable or that its fuses must be relaxed. On macOS,
166
+ use the existing copied-bundle isolation and renderer connection described in
167
+ [packaged QA](../../../desktop/docs/packaged-qa.md). Keep the real package,
168
+ platform, fresh reviewer identity, and native artifact provenance required by
169
+ the criterion; successful attachment is only an executable prerequisite.
146
170
  - Reopen both uploaded gate recordings before handoff. Prove each fresh
147
171
  short-lived URL loads and that each video can play, seek, and enter
148
172
  fullscreen; an upload response alone is not a media pass.
@@ -179,6 +203,18 @@ after local evidence is clean, and merge only after the applicable protected
179
203
  checks pass. Verify the cumulative staging deployment rather than treating a
180
204
  merge as deployment proof.
181
205
 
206
+ When QA1 is clean, record every criterion's fresh current-dwell evidence under
207
+ one eligible independent reviewer, verify the exact deployed build, and advance
208
+ the card to Staging QA2 using the governed transition. Hand off its card id,
209
+ build, recordings, and any boundary cases to a different eligible QA2 reviewer.
210
+ Then immediately claim another unhandled QA1 card in the user's scope. Do not
211
+ wait for QA2 or human acceptance before continuing the QA1 queue.
212
+
213
+ If a QA agent fixes the card, that agent becomes its fixer. A fresh eligible
214
+ reviewer must replay all criteria before QA1 promotion. While that replay or a
215
+ shared deployment is pending, take another unhandled QA1 card and return at the
216
+ next deployment checkpoint. Preserve the original failure on the same card.
217
+
182
218
  When QA2 is clean:
183
219
 
184
220
  1. Tick only criteria actually executed in the current dwell, with concise
@@ -38,6 +38,13 @@ const DOMAIN_OVERRIDES = {
38
38
  who_am_i: 'workspace',
39
39
  get_current_user: 'workspace',
40
40
 
41
+ // Provisioning: seating a user and minting the onboarding link that reaches
42
+ // them. Categorised 'workspace' rather than given a category of their own —
43
+ // these are workspace administration, and the profile that can administer a
44
+ // workspace is the one that should see them.
45
+ list_workspace_seats: 'workspace',
46
+ create_onboarding_link: 'workspace',
47
+
41
48
  // Governed API bridge.
42
49
  // Broad backwards-compatible escape hatches stay on the unprofiled Adrata
43
50
  // server. Product profiles use the namespace-bound capability bridge below.
@@ -241,14 +248,30 @@ const IDEMPOTENT_WRITES = new Set([
241
248
  // comment, criterion, or card.
242
249
  'move_work_item', 'transfer_work_item_between_boards', 'set_work_board_column_wip_limit', 'set_work_item_tag', 'set_work_item_kind',
243
250
  'create_work_item', 'comment_on_work_item', 'flag_work_item',
251
+ // Retiring an already-retired card is REFUSED with a 409 rather than
252
+ // replayed, so the reason of the first retirement cannot be silently
253
+ // overwritten — which makes a retry with the same key land on the same state.
254
+ // The restore is a plain clear of the same five columns.
255
+ 'archive_work_item', 'unarchive_work_item',
244
256
  // A repeat block is the same edge (the pair is unique), and a repeat
245
257
  // unblock deletes a row that is already gone. Neither compounds.
246
258
  'block_work_item', 'unblock_work_item',
247
259
  'add_work_item_acceptance_criterion',
260
+ // (delete_work_item needs no entry here either: DESTRUCTIVE_PATTERN matches
261
+ // the `delete_` prefix, so a host confirmation-gates it on its NAME. That is
262
+ // the whole reason the destructive branch is a separate tool rather than a
263
+ // `kind` argument on archive_work_item — a switch inside a safe-sounding name
264
+ // would be gated by nothing.)
248
265
  // Reclassifying is a PUT of the whole routing decision, not an append:
249
266
  // replaying the same key rewrites the criterion to the same route and the
250
267
  // server's receipt table records one change, never a second one.
251
268
  'classify_work_item_acceptance_criterion',
269
+ // Editing is a PATCH of exactly the parts named in the call, so replaying the
270
+ // same key writes the same words to the same columns. It is not additive and
271
+ // cannot compound. (delete_work_item_acceptance_criterion needs no entry here:
272
+ // DESTRUCTIVE_PATTERN matches the `delete_` prefix, so it is classified
273
+ // destructive by its NAME and a host will confirmation-gate it.)
274
+ 'edit_work_item_acceptance_criterion',
252
275
  // Ticking and un-ticking are both genuinely idempotent, and for different
253
276
  // reasons worth keeping straight: a repeat tick is a no-op because the server
254
277
  // only writes the ticker, column and note where they were empty, and a repeat