@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 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.22 update --project . --force
356
- npx @topy-ai/maggie@0.7.22 cleanup --project .
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.22 workflow adds provider-catalogue authority checks, field/variant
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.22 init --agent all
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.22 加入 provider catalogue authority check、field/variant sync report、
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.0.0
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.0.0
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`. Source/class/markup-only checks are rejected. The audit stores
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@topy-ai/maggie",
3
- "version": "0.7.22",
3
+ "version": "0.7.23",
4
4
  "description": "Install and manage Maggie Skills for AI coding agents",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -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