@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.
- package/access/oauth.js +27 -0
- package/access/tiers.js +14 -0
- package/api-bridge.js +26 -0
- package/governance/governed-args.js +7 -2
- package/http/edge-block.js +16 -7
- package/http/rate-limit.js +69 -6
- package/package.json +3 -3
- package/security.js +167 -14
- package/server.js +35 -23
- package/server.json +2 -2
- package/skills/qa-the-card/SKILL.md +40 -4
- package/tool-annotations.js +23 -0
- package/tools/provisioning/onboarding-tools.js +730 -0
- package/tools/source-control/connection-tools.js +117 -1
- package/tools/work-board-tools.js +441 -25
- package/tools/work-hub/audit.js +74 -8
- package/tools/work-hub/criteria-quality.js +212 -0
- package/toolsets/communications.js +42 -64
- package/toolsets/spaces.js +10 -1
|
@@ -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.
|
|
33
|
-
|
|
34
|
-
|
|
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
|
package/tool-annotations.js
CHANGED
|
@@ -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
|