Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
304 commits
Select commit Hold shift + click to select a range
e92f504
TEST-UNIFY-1: archive ~34 dead/stale test files (Phase 1) — moved, no…
mvalancy Jun 18, 2026
4244d93
Merge pull request #121 from GraphDone/test/phase1-archive
mvalancy Jun 18, 2026
2408c06
TEST-UNIFY-2: consolidate tests/helpers → tests/lib + import codemod …
mvalancy Jun 18, 2026
13e9834
Merge pull request #122 from GraphDone/test/phase2-lib-codemod
mvalancy Jun 18, 2026
a76f528
chore: untrack accidental .claude/ workflow worktrees + gitignore .cl…
mvalancy Jun 18, 2026
4a4ad84
Merge pull request #123 from GraphDone/fix/untrack-claude-worktrees
mvalancy Jun 18, 2026
e049dff
TEST-UNIFY-3: reorganize specs into domain folders + rewrite playwrig…
mvalancy Jun 18, 2026
b060ce1
Merge pull request #124 from GraphDone/test/phase3-domain-folders
mvalancy Jun 18, 2026
02dd101
TEST-UNIFY-4: consolidate report generators into tests/lib + relocate…
mvalancy Jun 18, 2026
28d4c8c
Merge pull request #125 from GraphDone/test/phase4-consolidate-reports
mvalancy Jun 18, 2026
ad659bd
TEST-UNIFY-5a: cloud-audit adapter — ingest GraphDone-Cloud live-audi…
mvalancy Jun 18, 2026
6a0eb0d
Merge pull request #126 from GraphDone/test/phase5-cloud-audit-adapter
mvalancy Jun 18, 2026
0b8272a
TEST-UNIFY-6: docs + final pointers for the unified harness / clean t…
mvalancy Jun 18, 2026
4d55a08
Merge pull request #127 from GraphDone/test/phase6-docs
mvalancy Jun 18, 2026
4da44ba
docs(testing): one canonical guide for the unified harness; archive 3…
mvalancy Jun 18, 2026
34cc687
Merge pull request #128 from GraphDone/docs/testing-guide-rewrite
mvalancy Jun 18, 2026
6956444
FIX-62: small-graph idle FPS — isolate the lagoon backdrop + drop dea…
mvalancy Jun 18, 2026
96afc15
Merge pull request #129 from GraphDone/fix/idle-fps-lagoon
mvalancy Jun 18, 2026
5d110fa
MOBILE-TOUCH (#29): reliable tap-to-open + 44px hit areas on the graph
mvalancy Jun 19, 2026
b8000ef
Merge pull request #130 from GraphDone/feat/mobile-touch
mvalancy Jun 19, 2026
becad8d
PERF-95: coalescing, concurrency-bounded node-position saves (avoid N…
mvalancy Jun 19, 2026
14172a1
Merge pull request #131 from GraphDone/perf/position-save-queue
mvalancy Jun 19, 2026
f8d593a
SEC: disable production source maps (no public .js.map on the live site)
mvalancy Jun 19, 2026
35b4b52
Merge pull request #132 from GraphDone/fix/no-prod-sourcemaps
mvalancy Jun 19, 2026
3e3eb18
report: hierarchical reference IDs on every section + check (citable …
mvalancy Jun 19, 2026
191f553
Merge pull request #133 from GraphDone/feat/report-refs
mvalancy Jun 19, 2026
64e70b2
report: render every check (each with its citable ref), sections coll…
mvalancy Jun 19, 2026
19343fe
Merge pull request #134 from GraphDone/feat/report-all-cases
mvalancy Jun 19, 2026
d626ed2
feat(test): live, self-updating test dashboard (the continuous guidin…
mvalancy Jun 19, 2026
ed5968c
Merge pull request #135 from GraphDone/feat/live-test-dashboard
mvalancy Jun 19, 2026
3168ee4
chore(test): cron-driven autonomous loop to keep the dashboard alive …
mvalancy Jun 19, 2026
ef9a481
Merge pull request #136 from GraphDone/chore/dashboard-autoloop
mvalancy Jun 19, 2026
84c2e1e
fix(dashboard): headline the newest available run, not a dead re-stamp
mvalancy Jun 19, 2026
71f3a80
Merge pull request #137 from GraphDone/fix/dashboard-latest-available
mvalancy Jun 19, 2026
36924ad
fix(dashboard): drop -1 not-measured sentinels from perf trends
mvalancy Jun 19, 2026
ef78c47
Merge pull request #138 from GraphDone/fix/dashboard-drop-sentinel-me…
mvalancy Jun 19, 2026
6e2987e
fix(graph): unique test id per GraphSelector mount (was duplicated 2–3×)
mvalancy Jun 19, 2026
486848f
Merge pull request #139 from GraphDone/fix/graph-selector-unique-testid
mvalancy Jun 19, 2026
24eb497
fix(dashboard): drop -1 not-measured fps sentinels from large-graph t…
mvalancy Jun 19, 2026
97823e6
Merge pull request #140 from GraphDone/fix/dashboard-largegraph-fps-s…
mvalancy Jun 19, 2026
6a38147
fix(dashboard): drop stale -1 not-measured sentinels from served metr…
mvalancy Jun 19, 2026
a7799d9
Merge pull request #141 from GraphDone/fix/dashboard-drop-stale-senti…
mvalancy Jun 19, 2026
04f083d
fix(dashboard): restart the live server when its code is newer than t…
mvalancy Jun 19, 2026
52de138
Merge pull request #142 from GraphDone/fix/dashboard-loop-restart-on-…
mvalancy Jun 19, 2026
8e95339
feat(dashboard): pure narration-script builder + unit tests
mvalancy Jun 20, 2026
024d49f
Merge pull request #143 from GraphDone/feat/dashboard-narration-builder
mvalancy Jun 20, 2026
078b991
feat(dashboard): piper-tts narrated progress report (🎧 Narrated tab)
mvalancy Jun 20, 2026
9268220
Merge pull request #144 from GraphDone/feat/dashboard-narration-playback
mvalancy Jun 20, 2026
4e84604
chore(dashboard): always-on systemd --user service + keep narration f…
mvalancy Jun 20, 2026
47a95af
Merge pull request #145 from GraphDone/chore/dashboard-always-on-service
mvalancy Jun 20, 2026
81b8b51
harden(auth): router-level role guards + hide role-gated nav (defense…
mvalancy Jun 20, 2026
de8a3fc
Merge pull request #146 from GraphDone/harden/admin-route-guards
mvalancy Jun 20, 2026
5b4a18f
fix(graph): inline node editor no longer drops r/R keystrokes (data c…
mvalancy Jun 20, 2026
9ff4b35
Merge pull request #147 from GraphDone/fix/inline-editor-key-hijack
mvalancy Jun 20, 2026
5892108
test(adaptive-quality): guard tier cost-monotonicity invariant
mvalancy Jun 20, 2026
332b4da
Merge pull request #148 from GraphDone/test/adaptive-quality-monotoni…
mvalancy Jun 20, 2026
5b3283a
fix(dashboard): scale-sweep drift chart no longer reads as permanent …
mvalancy Jun 20, 2026
51aee62
Merge pull request #149 from GraphDone/fix/dashboard-drift-chart-framing
mvalancy Jun 20, 2026
f5acb16
fix(web): Batch A live-audit user-facing fixes (offline overlay, logo…
mvalancy Jun 20, 2026
e8567a4
perf(web): Batch C live-audit perf (poll relax, idle RAF gate, code-s…
mvalancy Jun 20, 2026
e2207c2
test(e2e): live-site user journey report (desktop + mobile, video + n…
mvalancy Jun 21, 2026
bf42215
Merge pull request #150 from GraphDone/fix/live-audit-batch-a
mvalancy Jun 21, 2026
0bc6aab
fix(test,lint): deterministic grow-flow fixture + remove dead eslint-…
mvalancy Jun 21, 2026
d5147ac
Merge pull request #151 from GraphDone/fix/smoke-gate-determinism-and…
mvalancy Jun 21, 2026
164a7bc
fix(web): keep the workspace view-tab strip from clipping at ~1280px
mvalancy Jun 21, 2026
5b5960b
Merge pull request #152 from GraphDone/fix/topbar-tab-strip-fit
mvalancy Jun 21, 2026
d0e3212
fix(web): stack the Connected + Collaborators status chips vertically
mvalancy Jun 21, 2026
c29bd0c
Merge pull request #153 from GraphDone/fix/topbar-status-stack
mvalancy Jun 21, 2026
55f1fbe
fix(web): make the stacked status chips a uniform single column
mvalancy Jun 21, 2026
7d853c0
Merge pull request #154 from GraphDone/fix/topbar-status-single-column
mvalancy Jun 21, 2026
1ed342d
harden(admin): Admin page hard-redirects non-admins; robust guard test
mvalancy Jun 23, 2026
8a7de05
Merge pull request #155 from GraphDone/harden/admin-lockout
mvalancy Jun 23, 2026
3f20736
Simplify responsive work views and replace simulated progress with re…
mvalancy Sep 8, 2026
c190dac
Remove unnecessary guest-dialog scrolling and quiet shared scrollbars
mvalancy Sep 8, 2026
4bff35c
Make GraphDone a responsive human-agent collaboration workspace
mvalancy Sep 8, 2026
87d86a0
Show signup failures and submit the active sign-in flow
mvalancy Sep 8, 2026
9fe4fae
Let returning visitors use an existing sign-in code
mvalancy Sep 8, 2026
55afacd
Fix clipped account controls and compact graph layouts with real-agen…
mvalancy Sep 8, 2026
6fe343c
Show hosted allowances and preserve unconfirmed work through cloud pa…
mvalancy Sep 8, 2026
3e599f5
Explain temporary hosted rollout allowance
mvalancy Sep 8, 2026
f7e9539
Clarify protective charges for unconfirmed database work
mvalancy Sep 8, 2026
eb5d56d
Add durable offline workspaces and versioned hosted sync client
mvalancy Sep 8, 2026
40c3aaf
Keep offline controls usable and guard local sync boundaries
mvalancy Sep 8, 2026
fdcaf87
Recover cached account identity without D1 during quota pauses
mvalancy Sep 8, 2026
9e4c145
Review ambiguous old creates instead of resurrecting deleted work
mvalancy Sep 8, 2026
bf0b9d6
Add portable project JSON import/export and safe Mermaid diagrams
mvalancy Sep 8, 2026
1fcaa06
Add shared feedback and scoped operator service for self-hosted insta…
mvalancy Sep 8, 2026
b62fa3c
Validate operator authorization and protect anonymous report privacy
mvalancy Sep 8, 2026
4b02f5f
Deliver feedback operations UI, recoverable admin setup and bounded a…
mvalancy Sep 8, 2026
d2d6267
Record live operations acceptance and wait for revocation acknowledge…
mvalancy Sep 8, 2026
172f747
Prioritize mobile tasks and full-screen editing with persistent self-…
mvalancy Sep 9, 2026
d07c423
Persist task assignment changes and update vulnerable runtime depende…
mvalancy Sep 9, 2026
e318630
Link authenticated identities to graph assignments and compile portab…
mvalancy Sep 9, 2026
fb9bd6d
Cache the canonical Pages URL for offline navigation
mvalancy Sep 9, 2026
1fb63d5
Batch hosted uploads while saving edits immediately on device
mvalancy Sep 9, 2026
afc0560
Recheck personal cloud pauses as idle capacity becomes available
mvalancy Sep 9, 2026
0341135
Expose agent setup and keep workspace storage and navigation compact
mvalancy Sep 9, 2026
1c5bef3
Constrain choice fields and arrange agent setup beside activity
mvalancy Sep 9, 2026
72f1be1
Add agent handoff prompts and bounded hosted share views
mvalancy Sep 9, 2026
269ea98
Expose a discoverable agent contract and portable limits interface
mvalancy Sep 9, 2026
0a0b485
Add agent consent screen and repeat-safe task creation
mvalancy Sep 12, 2026
4a17a3a
Report scope-correct agent creation access
mvalancy Sep 12, 2026
d3dfa31
Clarify the agent discovery base path
mvalancy Sep 12, 2026
d7adf2c
Keep agent approval resilient without session storage
mvalancy Sep 12, 2026
68ce9ff
Share undo history with primary task creation
mvalancy Sep 12, 2026
3d46e7c
Represent zero-read service health honestly
mvalancy Sep 12, 2026
77f41cf
Reattach graph camera after loading
mvalancy Sep 12, 2026
13095dd
Expose graph unlock across compact layouts
mvalancy Sep 12, 2026
4fa0aea
Resume offline sync reliably after reconnect
mvalancy Sep 12, 2026
71e1bc5
Use installed Chrome for headed QC
mvalancy Sep 12, 2026
1d5d3c1
Bound reconnect recovery to the sync deadline
mvalancy Sep 12, 2026
686b1de
Test reconnect deadline without timer phase assumptions
mvalancy Sep 12, 2026
81ca6a6
Keep mobile filter menus readable
mvalancy Sep 12, 2026
835b316
Keep compact search guidance readable
mvalancy Sep 13, 2026
28498d8
Keep restored offline graph visible
mvalancy Sep 13, 2026
aef704c
fix compact filter menu reachability
mvalancy Sep 13, 2026
5422d1d
make list edits undoable
mvalancy Sep 13, 2026
9c166d9
keep fitted nodes clear of minimap
mvalancy Sep 13, 2026
374e91f
distinguish saved user camera from auto fit
mvalancy Sep 13, 2026
773c3d6
wait for graph data before restoring camera
mvalancy Sep 13, 2026
9b2eabf
Keep fitted graph cards clear of controls
mvalancy Sep 13, 2026
4f538bb
Make agent notes retry safe
mvalancy Sep 13, 2026
323f56b
Document bounded note retry window
mvalancy Sep 13, 2026
4104f5a
Honor hosted API origin for health checks
mvalancy Sep 13, 2026
89bc68e
Describe guest work as device-only
mvalancy Sep 13, 2026
751aadb
Name paused cloud sync on mobile
mvalancy Sep 13, 2026
df714de
Expose guest entry in the first mobile view
mvalancy Sep 13, 2026
6e8009d
Add enrollment review handoff
mvalancy Sep 13, 2026
787ef74
Keep enrollment handoff in view
mvalancy Sep 13, 2026
8debc9b
Fit approved enrollment on small phones
mvalancy Sep 13, 2026
dd09aaf
Keep enrollment action contrast accessible
mvalancy Sep 13, 2026
7e5d702
Make graph quick edit keyboard accessible
mvalancy Sep 13, 2026
071a08a
Make graph expansion keyboard accessible
mvalancy Sep 13, 2026
f332023
Model browser reconnect signal in offline test
mvalancy Sep 13, 2026
a5aab0d
Keep task editor actions touch sized
mvalancy Sep 13, 2026
3e11369
Make task deletion accessible and undoable
mvalancy Sep 13, 2026
efd7637
Preserve task identity across delete undo
mvalancy Sep 13, 2026
e560d4d
Make task relationships keyboard accessible
mvalancy Sep 13, 2026
9913940
Make task connections undoable
mvalancy Sep 13, 2026
1c43b11
Refresh incoming graph relationships after edits
mvalancy Sep 13, 2026
6d7474c
Keep legacy graph dependencies directional
mvalancy Sep 13, 2026
6efc025
Drop stale relationship fallbacks after edge refresh
mvalancy Sep 13, 2026
ff6bf1f
Keep graph canvas actions reachable
mvalancy Sep 13, 2026
823c43c
Make compact task fields easier to use
mvalancy Sep 13, 2026
b1afe7a
Make tag removal clear and touch friendly
mvalancy Sep 13, 2026
3bfa6a6
Always show tag removal focus
mvalancy Sep 13, 2026
ceb5edc
Enforce self-hosted graph tenant boundaries
mvalancy Sep 13, 2026
225cefd
Close remaining self-hosted GraphQL write paths
mvalancy Sep 13, 2026
eb8c5e3
Preserve drafts and enforce agent owner roles
mvalancy Sep 13, 2026
9a4a0ac
Improve task action contrast
mvalancy Sep 13, 2026
1838e82
Keep relationship menus stable on trigger clicks
mvalancy Sep 13, 2026
67747c9
Drop ineffective relationship trigger workaround
mvalancy Sep 13, 2026
c36a105
Make mobile sign-out touch sized
mvalancy Sep 13, 2026
1d2a7ab
Respect custom offline build output
mvalancy Sep 13, 2026
606f44d
Require disposable Neo4j for MCP integration
mvalancy Sep 13, 2026
d631f2d
Isolate MCP mock comparison database
mvalancy Sep 13, 2026
f8fb968
Require disposable Neo4j for contract tests
mvalancy Sep 13, 2026
437a5e0
fix: meet compact project folder touch target
mvalancy Sep 14, 2026
a6d2d41
fix: make agent disclosures touch friendly
mvalancy Sep 14, 2026
c35fc2d
fix: retain graph positions after failed saves
mvalancy Oct 23, 2026
94f4777
fix: preserve offline bulk deletion selection
mvalancy Oct 23, 2026
c36660e
fix: reject incomplete unified test evidence
mvalancy Oct 23, 2026
0c2322c
SEC-FOLDER-1: enforce folder ownership and current role access
mvalancy Oct 23, 2026
13acecc
fix: bind test evidence to the executed checkout
mvalancy Oct 23, 2026
7504d0d
Merge pull request #159 from GraphDone/audit/core-test-evidence-20261023
mvalancy Oct 23, 2026
08a323a
fix: require settled graph evidence before deletion
mvalancy Oct 23, 2026
d4f07e0
fix: retain scoped layout saves across view navigation
mvalancy Oct 23, 2026
36c02c0
Validate supported runtimes, production dependencies, and owned smoke…
mvalancy Oct 23, 2026
8258286
Merge remote-tracking branch 'origin/audit/core-validation-20261023' …
mvalancy Oct 23, 2026
f364a9c
fix: validate layout bearer ownership across session transitions
mvalancy Oct 23, 2026
8f2197f
Run harness regression discovery on supported Node versions
mvalancy Oct 23, 2026
1b02a42
Recognize the mobile workspace after browser login
mvalancy Oct 23, 2026
6b31bc8
Open the Users panel before validating its responsive dialog
mvalancy Oct 23, 2026
ec8090d
SEC-FOLDER-1: validate legacy descendants before deleting folders
mvalancy Oct 23, 2026
c5fa7ca
Propagate runtime rejection through launchers and dashboard checks
mvalancy Oct 23, 2026
c04fbac
Align the mobile workspace selector with surrounding test indicators
mvalancy Oct 23, 2026
6b2a007
Exit the top-level launcher when runtime validation fails
mvalancy Oct 23, 2026
f8ccacc
fix: bound test timeouts across owned process groups
mvalancy Oct 23, 2026
d0561bf
test: isolate MCP graph assertions from host CPU load
mvalancy Oct 23, 2026
f9d89cb
fix: clean owned workers before caller signal exits
mvalancy Oct 23, 2026
1f04f9b
Merge pull request #164 from GraphDone/audit/core-test-timeout-20261023
mvalancy Oct 23, 2026
100625e
Merge pull request #165 from GraphDone/audit/core-mcp-cpu-test-20261023
mvalancy Oct 23, 2026
a2df01f
Merge remote-tracking branch 'origin/audit/core-validation-20261023' …
mvalancy Oct 23, 2026
5f0f454
Apply strict evidence checks to the complete headed new-user gate
mvalancy Oct 23, 2026
e6cf1ac
test: verify saved state through authorized user workflows
mvalancy Oct 23, 2026
1a53279
fix: bound lint glob matching with a scoped minimatch patch
mvalancy Oct 23, 2026
c3ef921
docs: record security coverage and remaining authentication gaps
mvalancy Oct 23, 2026
5a4a8e3
test: verify layout save recovery through real view navigation
mvalancy Oct 23, 2026
4f4b782
fix: consume magic links once before returning identity
mvalancy Oct 23, 2026
b57bde8
docs: link validated magic-link follow-up evidence
mvalancy Oct 23, 2026
7e91d1a
fix: check magic-link expiry when SQLite consumes it
mvalancy Oct 23, 2026
ddb4407
docs: record final magic-link expiry boundary evidence
mvalancy Oct 23, 2026
7daa4a6
Reject missing and default production signing secrets before startup
mvalancy Oct 23, 2026
46388cb
fix: bound failed GraphQL password login attempts
mvalancy Oct 23, 2026
041fa51
test: observe responsive navigation and visible graph framing
mvalancy Oct 23, 2026
d2b6759
test: own mobile dialog fixtures and observe navigation dismissal
mvalancy Oct 23, 2026
9b0c050
Preserve newer details drafts when delayed saves complete
mvalancy Oct 23, 2026
3c648cb
test: preserve ownership paths during mobile fixture cleanup
mvalancy Oct 23, 2026
7111161
test: require owned performance and mobile gate evidence
mvalancy Oct 23, 2026
4a4a11f
fix: publish measured first and terminal graph performance
mvalancy Oct 23, 2026
1a16d4e
docs: record measured performance gate validation
mvalancy Oct 23, 2026
bc483d2
Use an explicit environment record type in the secret validator
mvalancy Oct 23, 2026
a52ab98
test: retain actionable evidence for strict browser failures
mvalancy Oct 23, 2026
a494741
test: constrain downloadable evidence to owned artifact files
mvalancy Oct 23, 2026
98c5b73
test: verify locked touch editing with owned saved work
mvalancy Oct 23, 2026
a4bc803
Merge pull request #177 from GraphDone/audit/core-mobile-touch-20261023
mvalancy Oct 23, 2026
7fec50b
Merge pull request #173 from GraphDone/audit/core-mobile-audit-20261023
mvalancy Oct 23, 2026
25838b4
Merge pull request #172 from GraphDone/audit/core-responsive-acceptan…
mvalancy Oct 23, 2026
827a854
Merge pull request #166 from GraphDone/audit/core-new-user-gate-20261023
mvalancy Oct 23, 2026
c8d634d
Merge pull request #163 from GraphDone/audit/core-mobile-test-20261023
mvalancy Oct 23, 2026
0f12b1d
Merge pull request #176 from GraphDone/audit/core-browser-diagnostics…
mvalancy Oct 23, 2026
285f462
Merge pull request #175 from GraphDone/audit/core-perf-gate-20261023
mvalancy Oct 23, 2026
eed5c6b
Merge pull request #167 from GraphDone/audit/core-layout-recovery-bro…
mvalancy Oct 23, 2026
dd447c6
Merge pull request #168 from GraphDone/audit/core-security-gaps-20261023
mvalancy Oct 23, 2026
8b93344
Merge pull request #169 from GraphDone/audit/core-magic-link-20261023
mvalancy Oct 23, 2026
dcbd5e2
Merge pull request #170: enforce production signing-secret startup
mvalancy Oct 23, 2026
69d36e3
Merge pull request #171 from GraphDone/audit/core-login-rate-limit-20…
mvalancy Oct 23, 2026
1fb39b0
Merge pull request #158 from GraphDone/audit/core-durability-20261023
mvalancy Oct 23, 2026
5de5d52
Merge pull request #160 from GraphDone/audit/core-security-20261023
mvalancy Oct 23, 2026
5f834b1
Merge pull request #174: retain newer drafts through delayed save com…
mvalancy Oct 23, 2026
84f1c0d
Merge pull request #161: integrate validated runtime and audit correc…
mvalancy Oct 23, 2026
940e2d9
Document validated Core audit outcomes and merge provenance
mvalancy Oct 23, 2026
78a90cc
Merge pull request #178 from GraphDone/audit/core-validation-ledger-p…
mvalancy Oct 23, 2026
b843a1b
fix: resolve MCP SDK validation through patched Zod 4.6.7
mvalancy Oct 23, 2026
4f7b0ef
Test bounded Zod collection parsing and real MCP SDK compatibility
mvalancy Oct 23, 2026
ea46e39
Record unchanged Zod regression fixtures passing on patched dependency
mvalancy Oct 23, 2026
26f15f0
fix(mcp): keep operational diagnostics off stdio protocol
mvalancy Oct 23, 2026
234fcc8
Keep dependency audit evidence fresh and record the Zod gate correction
mvalancy Oct 23, 2026
864ba7a
test(mcp): verify stdio fixture cleanup and shutdown output
mvalancy Oct 23, 2026
c041814
Record combined patched MCP and protocol validation
mvalancy Oct 23, 2026
98b7030
Merge pull request #179 from GraphDone/audit/core-mcp-stdio-20261023
mvalancy Oct 23, 2026
385e767
Merge pull request #180: patch MCP validation dependency and audit cache
mvalancy Oct 23, 2026
9068cd3
Merge pull request #157 from GraphDone/audit/core-validation-20261023
mvalancy Oct 23, 2026
1ea678d
Document standing dev admin integration authority and validation bar
mvalancy Oct 23, 2026
f94ca2a
Record final PR validation and authorized dev merge disposition
mvalancy Oct 23, 2026
ef495ef
Merge pull request #188 from GraphDone/audit/core-admin-integration-d…
mvalancy Oct 23, 2026
88ce10d
Merge validated dev into main promotion candidate
mvalancy Oct 23, 2026
f784eff
Record bounded main promotion blockers and clean handoff
mvalancy Oct 23, 2026
cfb7eec
Require production validation and disable unverified release writes
mvalancy Oct 23, 2026
8706a2f
Check production selection for each supported CI event
mvalancy Oct 23, 2026
c9cff8b
Bound deployment claims to the reviewed workflows
mvalancy Oct 23, 2026
2bda9dd
Persist SQLite in the API workspace and verify container recreation
mvalancy Oct 23, 2026
53c6248
Allow production stage timeouts to finish owned-resource cleanup
mvalancy Oct 23, 2026
e66565c
Date release regression evidence by its observed UTC day
mvalancy Oct 23, 2026
ad16c2d
test: require owned production stack smoke evidence
mvalancy Oct 23, 2026
83400ac
Record non-root development SQLite recreation evidence
mvalancy Oct 23, 2026
5509428
Keep disposable browser credentials out of public CI artifacts
mvalancy Oct 24, 2026
abc29d9
test: select password sign-in before production form login
mvalancy Oct 24, 2026
d9278cb
Compose reviewed main history and release gate corrections
mvalancy Oct 24, 2026
8a9c751
Patch optional Undici build dependency and guard consumer resolution
mvalancy Oct 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
74 changes: 74 additions & 0 deletions .agents/inbox/2026-10-23-browser-startup-evidence.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# Distinguish the static loading shell from a mounted application and retain failure traces

Date: 2026-10-23. Searched `tests/e2e/quality/button-content.spec.ts`, the unified
manifest/adapter, Playwright configuration, prior responsive acceptance lessons,
`packages/web/index.html`, and `App.tsx`. Public tracking: #156.

The strict combined acceptance run on frozen
`f8a11e16a593738d485547eb1dfe117438cc3ed6` reported this failure before button
inspection on one route/viewport iteration:

```text
Locator: locator('main')
Timeout: 5000ms
Error: element(s) not found
Snapshot: GraphDone Logo / GraphDone Loading...
```

The screenshot and DOM snapshot exactly match the static HTML shell in
`packages/web/index.html`: Loading text and empty placeholder cards. React's
authenticated initialization screen instead says Initializing and includes
feature text; route Suspense appears inside Layout's main element. Thus this
failure establishes that the mounted application was unavailable at the
deadline, not that a button label was clipped. It does not by itself distinguish
delayed module loading/execution from a startup error.

The screenshot timestamp was 12:53:58 America/Los_Angeles. Docker build/export
work overlapped the run and the generic image build log completed at 12:55:38.
Resource contention is a hypothesis, not a proven cause. The original artifact
did not identify the current route or exact viewport; its 375-by-1144 full-page
PNG dimensions do not establish the viewport. No trace existed because the
global setting was on-first-retry while the strict sequence used zero retries.
Artifacts remain in the candidate worktree's ignored
`test-artifacts/playwright-output/quality-button-content-*/` directory and must
be preserved before another run.

Corrective rule: keep zero retries and existing deadlines, but record
retain-on-failure traces for required browser sequences. Label every route and
viewport iteration and attach bounded browser errors when the sweep fails.
Copy trace/diagnostic files into the retained unified report before another
Playwright process can clear its shared output directory. Do not equate the
absence of API errors with successful frontend startup.

Evidence-only correction on public PR175 base `1a16d4e`: three new controlled
child-process tests first failed because the actual Playwright command lacked
failure-only tracing. A fourth failed because the adapter dropped trace and JSON
attachments. After correction, Node 22.23.4 `npm run test:unified:lib` passed
156/156 with zero skips, including bounded event capture, credential/URL
sanitization, listener cleanup, and file retention after deleting the original
Playwright output. Playwright `--list` still collected the single unchanged
button sweep. Logs: `/tmp/core-browser-diagnostics-{red,retention-red,final}.log`.

Independent review then reproduced a source-boundary defect inherited from the
image/video materializer: an attachment could name an unrelated local file or
follow a symlink, copying it into a downloadable report. Owned outside-root
sentinels established the failure without reading real secrets. Four new CLI
controls failed before correction (outside-root source, file symlink, parent
directory symlink, and directory instead of a file). New downloadable files now
require regular files under the canonical repository `test-artifacts` root with
no symlink traversal; the adapter rejects unsafe evidence and the materializer
rechecks immediately before copying. The legitimate copy/retention case still
passes. Final stdlib validation: 160/160 passed, zero skips, recorded in
`/tmp/core-browser-diagnostics-reviewed.log`.

The custom JSON diagnostic capture applies bounded credential/URL redaction;
Playwright trace ZIPs remain raw and can contain network headers and bodies.
Retain those locally with the disposable test artifacts and share measured
summaries, not raw authenticated traces. Standalone and dashboard report views
both render these new files as escaped download links rather than images.

Limits: these checks validate evidence collection and command forwarding, not
the underlying startup failure or deployed health. No browser was launched and
no application code, deadline, retry policy, or assertion threshold changed in
this correction. A serialized complete acceptance rerun is still required;
retain the earlier failed run and distinguish observations from causal claims.
17 changes: 17 additions & 0 deletions .agents/inbox/2026-10-23-core-startup-and-save-evidence.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Builds and save acknowledgements need boundary-specific validation

Date: 2026-10-23. Existing guidance searched: `docs/quality/TEST_STRATEGY.md`,
the dated runtime/durability lessons, and `.agents/issues/INDEX.md`. This pointer
keeps the detailed incident records canonical rather than duplicating them.

| Symptom / cause | Canonical dated evidence, correction and limits |
| --- | --- |
| A successful build hid API peer-resolution and launcher failures | [Runtime validation](../../docs/quality/RUNTIME_VALIDATION_2026-10-23.md): use a pinned clean install, actual startup, supported runtimes and owned browser fixtures. Container/build success alone is not deployment evidence. |
| Missing/default production secrets were accepted; `.env` loaded after key capture | [Production secrets](../../docs/quality/PRODUCTION_SECRETS_2026-10-23.md): validate configuration before authentication initializes; negative controls must stop before DB/listen, with configured positive controls. The later integrated lint check found an ambient type annotation missed by typecheck; the type-only follow-up preserves runtime behavior. |
| A delayed save/refetch erased a newer date edit or repopulated cleared undo history | [Details-save completion](../../docs/quality/DETAILS_SAVE_COMPLETION_2026-10-23.md): preserve newer fields, scope completion to the current editor, require the expected acknowledgement, and retain the undo clear generation. Real Apollo regressions preserve failing-before evidence; they do not replace the combined browser gate. |

Commands, observed outputs, source revisions and scope limits remain in those
dated records and the [Core merge-validation ledger](../../docs/quality/CORE_VALIDATION_2026-10-23.md).
Keep failed runs and synthetic execution failures distinguishable from product
cases. Carry these pointers and their regressions through public review; neither
an unpublished local note nor a pending ledger field is a release pass.
11 changes: 11 additions & 0 deletions .agents/inbox/2026-10-23-dependency-audit-scope.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Audit counts need source reachability and bounded regression evidence

On 2026-10-23, the unchanged runtime lock at `6b2a007` produced 23 full-audit package entries and eight production-only entries. An isolated lint-tool correction reduced the full count to 17, while production remained eight. The canonical [security scope](../../docs/quality/SECURITY_SCOPE_2026-10-23.md) records families, priorities, authentication probes, and limits.

Evidence: `npm audit --package-lock-only --json`, `npm audit --omit=dev --json`, a clean lockfile install, `npm run lint`, `npm run test:unified:lib` (106 passed), and `npm run test` (434 passed, 25 database-gated skips). The minimatch regression fails against 9.0.3 at its bounded two-second child deadline and passes against the scoped 9.0.7 override. A separate real in-memory SQLite probe returned two successful verifications of one magic-link token; a synthetic CAPTCHA code was also accepted. No deployed credentials or shared database were inspected.

Cause: advisory severity and dependency classification do not describe the actual call site. Conversely, a browser-only lockout and a green production dependency gate do not establish backend abuse controls. Historical documentation had described UI attempt tracking as completed brute-force protection.

Corrective rule: record the exact source/lock snapshot, distinguish package entries from distinct vulnerabilities, trace runtime inputs and deployment packaging, reproduce suspected application gaps in owned fixtures, and keep version updates narrow enough to validate. Preserve negative controls in the existing harness; do not suppress findings by relabeling dependency categories.

Limits: reachability conclusions are bounded source observations, not proof of non-exploitability. Authentication follow-ups remain open. The security-scope document is the reviewable record; local log paths alone are not published validation.
42 changes: 42 additions & 0 deletions .agents/inbox/2026-10-23-dev-admin-integration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Owner-authorized admin integration still needs independent evidence and post-merge checks

Date: 2026-10-23. Searched `CLAUDE.md`, the symptom index and the existing
live-ref/transport lesson. Earlier audit notes recorded a non-author approval
blocker. The owner then explicitly authorized leaving `dev` administrator
enforcement disabled permanently, with a high testing bar for agent integration.
This changed the operating authorization; it did not create a non-author review.

The first integration used the native admin merge for
[PR #157](https://github.com/GraphDone/GraphDone-Core/pull/157); no SSH fallback
was needed. Read-only
verification on 2026-10-23 returned:

```text
gh pr view 157 --repo GraphDone/GraphDone-Core --json state,headRefOid,mergeCommit,mergedAt
state: MERGED
head: 385e7679fabc60b80cd65cf0a1aa4cdf3d592514
merge: 9068cd31824991330c6d92196654e53e04e29063
mergedAt: 2026-10-23T22:22:22Z

git ls-remote origin refs/heads/dev
9068cd31824991330c6d92196654e53e04e29063 refs/heads/dev
```

The merge parents are `8a7de052eb60fe517f45681dc42b5b169d09c660` and the frozen
`385e767` head. Its complete tree `6bf014bcc30eb6e21c0deeae4db9c7d4effeaac2`
equals that validated source. A read-only protection query confirmed
`enforce_admins: false`, configured approval count 1, and force pushes/deletions
disabled. The owner-directed exemption is not an approval record. Post-merge
CI was still running when this lesson was prepared; issue closure remains gated
on its actual result.

Corrective rule: use the [canonical dev integration playbook](../playbooks/dev-admin-integration.md),
freeze and independently review the diff, preserve failed/passing evidence,
verify source/base/result provenance and complete post-merge checks. Keep the
standing exception scoped to `dev`; do not toggle protection or change identity.
Historical pre-authorization notes remain historical evidence.

Limits: this authorization does not cover `main`, release or deployment actions,
force pushes, history rewriting, expanded credentials or any other protection
change. The documented docs-only exception requires exhaustive non-document
byte-equivalence proof and independent review; it does not excuse final CI.
21 changes: 21 additions & 0 deletions .agents/inbox/2026-10-23-folder-delete-legacy-hierarchy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Deletion authority includes pre-existing descendant folders

On 2026-10-23, review of SEC-FOLDER-1 found that validating a folder's owner was insufficient when older records could place another user's folder below it. The new creation/reparenting checks prevent new cross-domain trees, but do not repair existing records.

## Evidence

The real in-memory SQLite fixture initializes with `PRAGMA foreign_keys=0`, matching the store's current connection defaults. Deleting an owned parent succeeds and leaves a foreign descendant with a missing ancestor. With `PRAGMA foreign_keys=1`, the declared `ON DELETE CASCADE` removes the foreign descendant. Both the standalone and Neo4j-generated GraphQL schemas reached this SQLite behavior. No shared or production database was used.

Command: `npm run test --workspace @graphdone/server -- tests/folder-authorization.test.ts` with the new tests copied onto commit `0c2322cdfb2669c7fb2c057ea62df583736aba62`.

Observed on 2026-10-23: **10 failed, 32 passed**. The failures cover nested foreign descendants with foreign keys off/on, another writable ownership domain, and destinations inside the deleted subtree. With foreign keys on, the foreign descendant query returns an empty array after deletion. A legitimate same-domain cascading deletion remains a passing control.

After correction, `npm run test --workspace @graphdone/server` reports **70 passed**, including all 42 folder cases; server typechecking passes. Local evidence: `/tmp/graphdone-folder-subtree-baseline-final.log` and `/tmp/graphdone-folder-subtree-full-green.log`. These local paths are evidence pointers, not published validation artifacts.

## Cause and corrective rule

Authorization must cover every record a destructive operation can affect, including records connected through database cascades. Before moving any graph references or deleting a folder, recursively enumerate existing descendants, require write access to each, and require the same ownership domain. Reject a graph destination that is the deleted folder or one of its descendants. Use a cycle-safe recursive query so malformed legacy trees cannot loop indefinitely.

## Limits

This change does not migrate malformed hierarchies, enable foreign-key enforcement, or redefine valid same-domain folder deletion. It tests actual SQLite and both GraphQL schemas; graph metadata and the Neo4j version probe are simulated. Live backend and browser validation remain separate release gates. The repository had no `.agents/WRITING-IT-DOWN.md` or existing lesson index when this incident was recorded; the related API guidance and regression suite carry the rule with the fix.
9 changes: 9 additions & 0 deletions .agents/inbox/2026-10-23-magic-link-consumption.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Consume single-use identity tokens with a guarded database update

On 2026-10-23, real in-memory SQLite regressions on runtime base `5f0f454` reproduced concurrent magic-link replay and inactive-account acceptance. The selected before-fix run failed two cases and passed one. A further controlled delayed-write regression failed against the first fix `4f4b782` because its expiry timestamp was captured before the statement executed. The final full server run passed 39 cases, including all eleven new magic-link cases. Commands and evidence are recorded in the [review note](../../docs/quality/MAGIC_LINK_REPLAY_2026-10-23.md).

Cause: selecting an unused token does not reserve it. The previous update neither checked unused/expiry state again nor waited for its outcome before returning identity.

Corrective rule: atomically transition unused state using the database's execution-time expiry predicate, await completion, and require exactly one affected row before returning or creating identity. Check current account activity. Exercise real concurrent requests, expiry boundaries, and actual database failures; mock success callbacks alone cannot establish single-use behavior.

Limits: this shared verifier still serves both login and reset flows. Purpose separation, other authentication controls, and deployed HTTP/email behavior remain separate work. A failure after successful consumption deliberately requires a fresh link. No shared database or deployed secrets were used.
80 changes: 80 additions & 0 deletions .agents/inbox/2026-10-23-main-promotion-release-gates.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# A validated dev tree does not validate main-only publication or persistence

## Correction and verified runtime evidence — 2026-10-24 UTC

The original findings below led to the reviewed correction in
[PR #191](https://github.com/GraphDone/GraphDone-Core/pull/191). Publishing is now
read-only build validation; unfinished Release/Deploy actions explicitly fail.
Selected production validation is part of CI Success and runs on main PRs.
SQLite uses the actual server workspace volume path with migration guidance.

On clean `abc29d9dbe0da966cbc22976feebaa2dfced21c1`, the corrected owned HTTPS
stack passed all six headed smoke cases with zero Playwright retries, all seven
persistence checks, source invariance and owned container/volume/network cleanup.
The initial production browser failure is retained; it exposed a helper that
relied on development quick login instead of selecting the existing Password tab.
[Public result and limits](https://github.com/GraphDone/GraphDone-Core/pull/191#issuecomment-6377298729).

The actual main merge and its final CI remain tracked in
[#189](https://github.com/GraphDone/GraphDone-Core/issues/189). Exact-SHA publication
and real deployment are intentionally disabled and tracked in
[#190](https://github.com/GraphDone/GraphDone-Core/issues/190). This evidence does
not claim deployment to graphdone.com. The original inspection below is preserved
as historical cause and boundary evidence, not a current list of unfixed defects.


Date: 2026-10-23. Searched the symptom index, the dev admin-integration
playbook, and the validation ledger before inspecting main promotion.
The owner requested a clean, quota-conscious finish and promotion of good work
to main. Dev validation is complete; the remaining release work is tracked in
[issue #189](https://github.com/GraphDone/GraphDone-Core/issues/189).

Dated composition evidence:

```text
main: 775362eace0723c57b7ba3c7936645c9d0d36cb4
validated dev: ef495eff15ed7aac51e72dc7a1db1bb96d2b3695
local normal merge: 88ce10dc8c39b1687c180ff22db20744c4bf2996
merge parents: main775362ea + dev ef495eff
merge conflicts: none
merge tree: 6bdd9d820f98b9882c3dcf6a110badd88bfe78bc
all 683 tracked entries equal validated dev, including modes/types/blob IDs
```

The two main-only commits were merge wrappers whose trees equal their source
parents. Independent review confirmed the candidate's complete composition,
not its release readiness. The two documentation paths added by this handoff
are separate from that original byte-identical candidate; no runtime code was
changed for the checkpoint.

Read-only source findings at `ef495eff`:

- `.github/workflows/docker-publish.yml` runs even for main-target PRs and sets
`push: true` before validation; main publication can move `latest`.
- Main-only production smoke has no matching generated admin credential, weak
HTTP readiness and retry-tolerant raw smoke; `CI Success` omits that job.
- Compose mounts SQLite at `/app/data`, while the API workspace resolves its
database under `/app/packages/server/data`; recreation persistence needs an
owned-container negative/positive test.
- Deploy uses a missing root Dockerfile, unpinned CI-completion checkout and
echo/TODO deployment steps. A successful message is not a deployment.

Cause: development browser/API validation does not exercise the different
production Compose paths, registry event conditions or deployment actions.
A mergeable tree can therefore still have release blockers.

Corrective rule: inspect event side effects before opening the promotion PR;
make PR builds nonpublishing, pin publication to validated source, repair the
owned production fixture/readiness/result propagation, and verify SQLite
persistence through container recreation. Run one deliberate production-stack
gate after the focused correction. Preserve the existing main protections
unless the owner explicitly authorizes a different admin policy. The standing
dev exemption does not silently extend to main.

Resume in the order and acceptance criteria in issue #189. Do not open a main
PR while its existing hook still publishes to GHCR. Keep the reviewed source
and this handoff committed; do not force-push or rewrite either history.

Limits: these are source findings, not newly executed production failures.
No production-stack run, registry publication, deployment or main protection
change was performed for this review. No runtime resources were started.
Loading
Loading