@topy-ai/maggie 0.7.22 → 0.7.23
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/README.md +10 -3
- package/README.zh-TW.md +4 -2
- package/bundled-contracts/maggiedash/auth-model.md +11 -0
- package/bundled-references/maggiedash-integration.md +4 -0
- package/bundled-skills/maggie-auth-reference/SKILL.md +14 -1
- package/bundled-skills/maggie-design/SKILL.md +3 -0
- package/bundled-skills/maggie-qa-workflow/SKILL.md +4 -2
- package/bundled-tools/clis/maggie_qa_workflow.py +8 -1
- package/package.json +1 -1
- package/references/maggiedash-integration.md +4 -0
package/README.md
CHANGED
|
@@ -85,6 +85,10 @@ maggie qa assertion-audit --project . \
|
|
|
85
85
|
--output docs/qa-assertion-audit.json
|
|
86
86
|
```
|
|
87
87
|
|
|
88
|
+
For a dialog or drawer, include a browser-runtime `scroll-owner-count` check
|
|
89
|
+
with `expected: 1`. This catches the fixed-shell plus inner-content double
|
|
90
|
+
scrollbar that static class checks can miss.
|
|
91
|
+
|
|
88
92
|
Dashboard and documentation audits are provider-neutral and keep host data
|
|
89
93
|
behind explicit evidence files:
|
|
90
94
|
|
|
@@ -352,8 +356,8 @@ artifact schemas.
|
|
|
352
356
|
Recommended upgrade sequence for the current release:
|
|
353
357
|
|
|
354
358
|
```bash
|
|
355
|
-
npx @topy-ai/maggie@0.7.
|
|
356
|
-
npx @topy-ai/maggie@0.7.
|
|
359
|
+
npx @topy-ai/maggie@0.7.23 update --project . --force
|
|
360
|
+
npx @topy-ai/maggie@0.7.23 cleanup --project .
|
|
357
361
|
```
|
|
358
362
|
|
|
359
363
|
Maintainers should pass npm credentials through the repository helper, never
|
|
@@ -363,7 +367,10 @@ as a command-line argument:
|
|
|
363
367
|
node scripts/publish-npm.mjs --maggie-env-file ../.env
|
|
364
368
|
```
|
|
365
369
|
|
|
366
|
-
The 0.7.
|
|
370
|
+
The 0.7.23 workflow adds the single-scroll-owner MaggieDash modal primitive,
|
|
371
|
+
server-runtime-only auth/provider configuration guidance, best-effort optional
|
|
372
|
+
identity-mirror semantics, and `scroll-owner-count` browser QA evidence. The
|
|
373
|
+
0.7.22 workflow adds provider-catalogue authority checks, field/variant
|
|
367
374
|
sync reports, separate supply/display states, site-owned slug proposals,
|
|
368
375
|
withdrawal endings, retirement evidence audits, and runtime QA assertion lint.
|
|
369
376
|
The 0.7.21 workflow adds operation-specific localization quality checks,
|
package/README.zh-TW.md
CHANGED
|
@@ -8,7 +8,7 @@ Codex、Claude Code 與相容的 coding agents。
|
|
|
8
8
|
## 安裝
|
|
9
9
|
|
|
10
10
|
```bash
|
|
11
|
-
npx @topy-ai/maggie@0.7.
|
|
11
|
+
npx @topy-ai/maggie@0.7.23 init --agent all
|
|
12
12
|
npx @topy-ai/maggie doctor --project .
|
|
13
13
|
```
|
|
14
14
|
|
|
@@ -25,7 +25,9 @@ maggie doctor --project . --require-bootstrap --strict
|
|
|
25
25
|
deployment、memory、feedback 和 MaggieDash。內容先 draft/review,外部寫入、
|
|
26
26
|
publish 與 production deployment 需要明確確認。
|
|
27
27
|
|
|
28
|
-
0.7.
|
|
28
|
+
0.7.23 加入 dashboard dialog 單一 scroll owner、server runtime-only auth/provider
|
|
29
|
+
設定規則、optional identity mirror 的 best-effort 邊界,以及 QA 的
|
|
30
|
+
`scroll-owner-count` browser evidence。0.7.22 加入 provider catalogue authority check、field/variant sync report、
|
|
29
31
|
supply/display lifecycle state、site-owned slug proposal、withdrawal ending、
|
|
30
32
|
retirement evidence audit,以及 runtime QA assertion lint。
|
|
31
33
|
0.7.21 增加 localization polish/rewrite 的 operation-specific quality checks、
|
|
@@ -19,6 +19,17 @@ and passwordless login are not supported by this contract.
|
|
|
19
19
|
- Every project request must check membership and role after session
|
|
20
20
|
validation; a valid account alone does not grant project access.
|
|
21
21
|
|
|
22
|
+
## Runtime configuration boundary
|
|
23
|
+
|
|
24
|
+
The host adapter reads database, session, and external identity-provider
|
|
25
|
+
settings from server runtime configuration. Private settings must not come
|
|
26
|
+
from browser/public environment variables, dashboard props, or client bundles.
|
|
27
|
+
The primary provider session is the source of truth for the login response.
|
|
28
|
+
An optional local identity/profile mirror may run afterward, but missing mirror
|
|
29
|
+
tables or temporary mirror failures must not reject an otherwise valid session.
|
|
30
|
+
Hosts that require the mirror must declare that requirement in their adapter
|
|
31
|
+
contract and test its failure path separately.
|
|
32
|
+
|
|
22
33
|
## Local fixture adapter
|
|
23
34
|
|
|
24
35
|
`tools/runtime/maggie_auth.py` provides a dependency-free SQLite fixture. It
|
|
@@ -29,6 +29,10 @@ in environment variables and are never copied into reports.
|
|
|
29
29
|
- Auth is traditional email/password with verified email, Argon2id production
|
|
30
30
|
hashing, server-side sessions, project membership, and audit events. Passkey,
|
|
31
31
|
WebAuthn, and passwordless login are not supported.
|
|
32
|
+
- Auth and provider configuration are server-runtime-only. An optional local
|
|
33
|
+
identity/profile mirror runs after the primary session and cannot turn a
|
|
34
|
+
successful provider login into a generic failure unless the host contract
|
|
35
|
+
explicitly declares that mirror required.
|
|
32
36
|
- API Pull, booking, analytics, email, and deployment providers expose health,
|
|
33
37
|
normalized errors, and explicit configuration schemas.
|
|
34
38
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: maggie-auth-reference
|
|
3
3
|
description: Generate and validate a provider-neutral traditional email/password auth reference with secure server sessions and production security gates.
|
|
4
4
|
metadata:
|
|
5
|
-
version: 1.
|
|
5
|
+
version: 1.1.0
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
Before and after a meaningful auth-reference run, follow the shared
|
|
@@ -26,3 +26,16 @@ HttpOnly/SameSite server-side sessions, generic failed-login responses,
|
|
|
26
26
|
throttling, lockout, revocation, and an explicit owner setup gate. Secrets,
|
|
27
27
|
hashes, and session tokens must never be emitted into browser responses,
|
|
28
28
|
logs, or project context.
|
|
29
|
+
|
|
30
|
+
## Runtime provider boundary
|
|
31
|
+
|
|
32
|
+
Read database, session, and external identity-provider settings inside the
|
|
33
|
+
server route from the deployment platform's runtime configuration. Do not use
|
|
34
|
+
browser/public environment variables for private settings, and do not pass
|
|
35
|
+
provider credentials through dashboard props or client bundles.
|
|
36
|
+
|
|
37
|
+
If a host also mirrors an authenticated identity into a local user/profile
|
|
38
|
+
table, run that mirror after the primary provider session succeeds. A missing
|
|
39
|
+
optional table or temporary mirror failure must be a safe, redacted warning and
|
|
40
|
+
must not reject a valid primary session. Make the mirror blocking only when the
|
|
41
|
+
host has explicitly documented it as part of the authentication contract.
|
|
@@ -303,6 +303,9 @@ shell is reconciled. Record:
|
|
|
303
303
|
responsive changes, comparing every value with the homepage tokens;
|
|
304
304
|
- hover, focus, open, loading, empty, error, scroll, tab, and reduced-motion
|
|
305
305
|
behavior;
|
|
306
|
+
- each modal or drawer has one intentional scroll owner. Lock the page/app
|
|
307
|
+
shell while it is open, contain the backdrop, and let only the content area
|
|
308
|
+
scroll when the dialog is taller than the viewport;
|
|
306
309
|
- required assets and their reuse/licensing notes;
|
|
307
310
|
- page metadata and whether the page is a marketing route, conversion route,
|
|
308
311
|
or actual blog content.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: maggie-qa-workflow
|
|
3
3
|
description: Run scenario-based browser QA with explicit evidence, fix/retest lifecycle, and release-gate decisions for web projects.
|
|
4
4
|
metadata:
|
|
5
|
-
version: 1.
|
|
5
|
+
version: 1.1.0
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Maggie QA Workflow
|
|
@@ -89,7 +89,9 @@ maggie qa assertion-audit --project . \
|
|
|
89
89
|
The `maggie.qa-assertions.v1` manifest requires a route, `transport: "http"`,
|
|
90
90
|
HTTP status evidence, a screenshot/reference, and boolean results for runtime
|
|
91
91
|
checks such as `text-present`, `text-absent`, `meta`, `link-absent`, or
|
|
92
|
-
`redirect`.
|
|
92
|
+
`redirect`. For dialogs and drawers, `scroll-owner-count` records the browser
|
|
93
|
+
runtime's computed number of intentional scroll owners and must use
|
|
94
|
+
`expected: 1`. Source/class/markup-only checks are rejected. The audit stores
|
|
93
95
|
assertion IDs and safe pass/fail metadata, never response bodies, credentials,
|
|
94
96
|
or cookies. A passing assertion audit complements browser evidence; it does
|
|
95
97
|
not replace the host adapter's actual HTTP and screenshot capture.
|
|
@@ -23,7 +23,7 @@ DEFAULT_SCENARIOS = Path(".maggie") / "scenario-manifest.json"
|
|
|
23
23
|
VALID_STATUSES = {"pending", "pass", "fail", "blocked", "inconclusive"}
|
|
24
24
|
VALID_PHASES = {"test", "fix", "retest"}
|
|
25
25
|
ASSERTION_SCHEMA = "maggie.qa-assertions.v1"
|
|
26
|
-
RUNTIME_ASSERTION_TYPES = {"http-status", "final-url", "text-present", "text-absent", "meta", "link-absent", "redirect"}
|
|
26
|
+
RUNTIME_ASSERTION_TYPES = {"http-status", "final-url", "text-present", "text-absent", "meta", "link-absent", "redirect", "scroll-owner-count"}
|
|
27
27
|
SOURCE_ASSERTION_TYPES = {"class-present", "class-absent", "markup-present", "markup-absent", "source-text"}
|
|
28
28
|
SECRET_RE = re.compile(
|
|
29
29
|
r"(?i)(bearer\s+|(?:api[_-]?key|token|secret|password|authorization|cookie)\s*[=:]\s*)[^\s,;]+"
|
|
@@ -377,6 +377,13 @@ def assertion_audit(args: argparse.Namespace) -> int:
|
|
|
377
377
|
item_errors.append(f"checks[{check_index}].passed must be boolean evidence")
|
|
378
378
|
if check_type == "http-status" and isinstance(evidence_data.get("httpStatus"), int) and check.get("actual") != evidence_data["httpStatus"]:
|
|
379
379
|
item_errors.append(f"checks[{check_index}] actual status does not match evidence.httpStatus")
|
|
380
|
+
if check_type == "scroll-owner-count":
|
|
381
|
+
if not isinstance(check.get("actual"), int) or isinstance(check.get("actual"), bool):
|
|
382
|
+
item_errors.append(f"checks[{check_index}].actual must be an integer scroll-owner count")
|
|
383
|
+
if check.get("expected") != 1:
|
|
384
|
+
item_errors.append(f"checks[{check_index}].expected must be 1 scroll owner")
|
|
385
|
+
if isinstance(check.get("actual"), int) and not isinstance(check.get("actual"), bool) and check.get("actual") != 1:
|
|
386
|
+
item_errors.append(f"checks[{check_index}] found more or fewer than one scroll owner")
|
|
380
387
|
if any(isinstance(check, dict) and check.get("passed") is False for check in checks):
|
|
381
388
|
item_errors.append("one or more runtime checks failed")
|
|
382
389
|
audited.append({"id": identifier, "passed": not item_errors, "errors": item_errors})
|
package/package.json
CHANGED
|
@@ -29,6 +29,10 @@ in environment variables and are never copied into reports.
|
|
|
29
29
|
- Auth is traditional email/password with verified email, Argon2id production
|
|
30
30
|
hashing, server-side sessions, project membership, and audit events. Passkey,
|
|
31
31
|
WebAuthn, and passwordless login are not supported.
|
|
32
|
+
- Auth and provider configuration are server-runtime-only. An optional local
|
|
33
|
+
identity/profile mirror runs after the primary session and cannot turn a
|
|
34
|
+
successful provider login into a generic failure unless the host contract
|
|
35
|
+
explicitly declares that mirror required.
|
|
32
36
|
- API Pull, booking, analytics, email, and deployment providers expose health,
|
|
33
37
|
normalized errors, and explicit configuration schemas.
|
|
34
38
|
|