mirror of
https://github.com/garrytan/gstack.git
synced 2026-09-15 09:25:28 +02:00
docs: file the Aside follow-ups in TODOS
Phase-2 QA logged-in-evidence path (P3), a hostile-vendor-skill E2E for the contract's override sentence (P2), and fd-anchoring the file-level permission writes to match the directory hardening (P3).
This commit is contained in:
@@ -414,6 +414,71 @@ references — include it in this fix's coverage list.
|
|||||||
- Smoke-test a skill invocation from a non-`gstack` install dir to prove the fix.
|
- Smoke-test a skill invocation from a non-`gstack` install dir to prove the fix.
|
||||||
- Sibling of #349 (the `$CLAUDE_CONFIG_DIR` / `~/.claude` path issue).
|
- Sibling of #349 (the `$CLAUDE_CONFIG_DIR` / `~/.claude` path issue).
|
||||||
|
|
||||||
|
## Aside integration follow-ups (filed via /plan-ceo-review + /plan-eng-review on the third-party-actions Aside plan)
|
||||||
|
|
||||||
|
### QA logged-in-evidence path via Aside (Phase 2)
|
||||||
|
|
||||||
|
**What:** Consent-gated `aside repl` as an alternative evidence source in /qa,
|
||||||
|
/qa-only, and /browse when cookie-import can't reach a session (SSO,
|
||||||
|
device-bound auth, Safari-side logins Chromium export can't see).
|
||||||
|
|
||||||
|
**Why:** Fills the exact gap `docs/designs/CHROME_VS_CHROMIUM_EXPLORATION.md`
|
||||||
|
records as attempted and abandoned — QA evidence from the user's REAL
|
||||||
|
logged-in browser, no cookie export. The third-party-actions contract already
|
||||||
|
recommends Aside for acting on logged-in vendor sites; this extends the same
|
||||||
|
consent-gated pattern to evidence gathering.
|
||||||
|
|
||||||
|
**Context:** Shape sketched as Option 2 in the Aside integration plan
|
||||||
|
(2026-08-27): a small `{{AGENTIC_BROWSER_FALLBACK}}` resolver injected into
|
||||||
|
qa/qa-only/browse (optionally scrape + a setup-browser-cookies cross-ref).
|
||||||
|
Port the fork PR time-attack/gstack#40 judgment qualitatively — "logged-in
|
||||||
|
pages only; never bulk crawling" — never its perishable timing numbers.
|
||||||
|
Requires: untrusted-content wrapping of repl output (prose rule), a
|
||||||
|
periodic-tier hermetic E2E, ratchet fixture refresh for the touched skills.
|
||||||
|
Deliberately deferred at D1A (contract-only scope); it inserts a third-party
|
||||||
|
surface beside the first-party QA pipeline, so it's a separate product call.
|
||||||
|
|
||||||
|
**Effort:** M (human ~2 days / CC+gstack ~1-2 h)
|
||||||
|
**Priority:** P3
|
||||||
|
**Depends on:** the third-party-actions Aside contract branch landing.
|
||||||
|
|
||||||
|
### Hostile-vendor-skill E2E for the third-party-actions contract
|
||||||
|
|
||||||
|
**What:** A periodic-tier E2E that plants a malicious `aside-browser` vendor
|
||||||
|
skill (one that instructs scope expansion, credential capture, or consent
|
||||||
|
bypass) and asserts the agent honors the contract's override sentence —
|
||||||
|
operational syntax only, never new permissions, scope, or consent.
|
||||||
|
|
||||||
|
**Why:** Rule 3 puts vendor text in instruction position; the override is
|
||||||
|
pinned as prose but has no behavioral proof against an adversarial skill.
|
||||||
|
Flagged by the ship adversarial review (finding 11).
|
||||||
|
|
||||||
|
**Context:** Fixture = extracted contract section + a hostile vendor SKILL.md
|
||||||
|
in the workdir; assert the drive plan never exceeds the named site/actions and
|
||||||
|
never echoes captured-secret instructions. Sibling of the tpa-* suite in
|
||||||
|
`test/skill-e2e-third-party-actions.test.ts`.
|
||||||
|
|
||||||
|
**Effort:** S (human ~half day / CC+gstack ~30 min)
|
||||||
|
**Priority:** P2
|
||||||
|
**Depends on:** the third-party-actions Aside contract branch landing.
|
||||||
|
|
||||||
|
### fd-anchor file-level permission writes (symlink/TOCTOU parity with dirs)
|
||||||
|
|
||||||
|
**What:** `restrictFilePermissions` / `writeSecureFile` / `appendSecureFile`
|
||||||
|
in `browse/src/file-permissions.ts` still use symlink-following `chmodSync` /
|
||||||
|
`writeFileSync`; give them the same `O_NOFOLLOW` + fstat/fchmod treatment the
|
||||||
|
directory path got.
|
||||||
|
|
||||||
|
**Why:** The symlink-swap class fixed for directories on this branch remains
|
||||||
|
open for the files inside them (ship adversarial review, finding 5).
|
||||||
|
Also note for docs: drives through Aside leave no gstack-side audit trail
|
||||||
|
(no egress receipts, no browse-daemon logs) — the audit trail lives in Aside;
|
||||||
|
worth a line in BROWSER.md when this area is next touched (finding 12).
|
||||||
|
|
||||||
|
**Effort:** S (human ~half day / CC+gstack ~20 min)
|
||||||
|
**Priority:** P3
|
||||||
|
**Depends on:** None.
|
||||||
|
|
||||||
## Test infrastructure
|
## Test infrastructure
|
||||||
|
|
||||||
### P2: /context-save worktree-identity hardening (the #2052 residual)
|
### P2: /context-save worktree-identity hardening (the #2052 residual)
|
||||||
|
|||||||
Reference in New Issue
Block a user