weichen and Cursor
92d7a3d117
feat(api): add FAV vault status stub with gated publisher
...
Expose GET /api/v1/vault/status and only wire in-process Drain when
FAV_PUBLISHER_ENABLED is explicitly true; degraded read stays off by default.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 15:40:10 +00:00
weichen and Cursor
3478a5a05a
feat(config): add FAV vault flags defaulting off
...
Gate FAV_DEGRADED_READ and FAV_PUBLISHER_ENABLED behind explicit opt-in,
and refuse VAULT_STATE_ROOT colliding with runtime data/{env}.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 15:40:10 +00:00
weichen
ebe177eec8
merge: feature/iam-route-inventory-p2
CI / go-vet-and-short-test (push) Failing after 0s
CI / backup-restore-drill (push) Failing after 0s
CI / web (push) Failing after 0s
2026-09-16 15:34:19 +00:00
weichen and Cursor
025ffe0ab3
feat(authz): full route inventory, session interrupt test, 410/R13 freeze
...
Close FEATURE-MATRIX IAM partial with v3 inventory and policy docs.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 15:33:18 +00:00
weichen
89ce3cc143
merge: fix/nightly-datadir-dev-align
CI / go-vet-and-short-test (push) Failing after 0s
CI / backup-restore-drill (push) Failing after 0s
CI / web (push) Failing after 0s
2026-09-16 15:30:39 +00:00
weichen and Cursor
a27f2cc7fb
fix(ci): align nightly DATA_DIR with dev PI on :18865
...
Host-agent-data/test mismatched shuimu-pi-agent-dev workspace mounts.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 15:30:38 +00:00
weichen
247ddcd306
merge: docs/override-nogo-full-backlog
CI / go-vet-and-short-test (push) Failing after 0s
CI / backup-restore-drill (push) Failing after 0s
CI / web (push) Failing after 0s
2026-09-16 15:30:01 +00:00
weichen and Cursor
05ae1b3ffd
docs(ops): override Wave3 no-go; authorize full backlog P0–P7
...
User scope-3 authorization; capabilities remain flag-off by default.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 15:30:01 +00:00
weichen
90ad756ce2
merge: docs/gitea-nightly-run21-status
CI / go-vet-and-short-test (push) Failing after 0s
CI / backup-restore-drill (push) Failing after 0s
CI / web (push) Failing after 0s
2026-09-16 15:18:49 +00:00
weichen and Cursor
950ce66ed8
docs(ops): record Gitea nightly run#21 product_fail after infra green
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 15:18:49 +00:00
weichen
a47cb84313
merge: fix/gitea-nightly-docker-datadir
CI / go-vet-and-short-test (push) Failing after 0s
CI / backup-restore-drill (push) Failing after 0s
CI / web (push) Failing after 0s
2026-09-16 15:17:16 +00:00
weichen and Cursor
91d21ea632
docs(ops): mark nightly docker-datadir task done
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 15:17:16 +00:00
weichen and Cursor
7df43f419e
fix(ci): mount DATA_DIR and docker for Gitea nightly host jobs
...
Avoid all-SKIP false PASS and exit-127 without receipt when image build lacks docker.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 15:17:16 +00:00
weichen
212f0974d8
merge: fix/gitea-nightly-host-tools
CI / go-vet-and-short-test (push) Failing after 0s
CI / backup-restore-drill (push) Failing after 1s
CI / web (push) Failing after 0s
2026-09-16 15:12:22 +00:00
weichen and Cursor
db85c7cab9
docs(ops): mark gitea nightly host-tools task done
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 15:12:21 +00:00
weichen and Cursor
b2bcea3cd8
ci(nightly): archive receipts without upload-artifact@v4
...
Gitea act_runner rejects artifact v4; host runner now has curl/node via brew+host net.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 15:12:03 +00:00
weichen
d48b36046d
merge: docs/gitea-nightly-runner-label-note
CI / go-vet-and-short-test (push) Failing after 1s
CI / backup-restore-drill (push) Failing after 0s
CI / web (push) Failing after 0s
2026-09-16 15:02:39 +00:00
weichen and Cursor
d07244c980
docs(ops): note Gitea runner .runner label patch for nightly:host
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 15:02:39 +00:00
weichen
fb73d404f4
merge: chore/nightly-gitea-host-runner
CI / go-vet-and-short-test (push) Failing after 1s
CI / backup-restore-drill (push) Failing after 0s
CI / web (push) Failing after 0s
2026-09-16 14:59:38 +00:00
weichen and Cursor
74d87b9e5d
ci(nightly): use local Gitea host runner label for real PI
...
Point Nightly Real PI at runs-on: nightly (host network) so the local
act_runner can reach host PI :18865 and isolated PG :5434.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 14:59:38 +00:00
weichen
f1f24dca5b
merge: docs/phase3-remediation-dod
2026-09-16 14:47:49 +00:00
weichen and Cursor
29da12d036
docs(remediation): check remaining Wave DoD after Phase 3 closeout
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 14:47:49 +00:00
weichen
e843c3c7dc
merge: fix/wave-leftovers-n7-playwright-dod
2026-09-16 14:47:44 +00:00
weichen and Cursor
f54abcab82
fix(ci): Phase 3 leftovers — nightly quality_failed retry and gated docs
...
Retry U8 product quality flakes once in nightly; formalize Playwright
dual-tab as long-term gated; closeout handoff and DoD notes.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 14:47:32 +00:00
weichen
84363b9180
merge: feature/wave3-pu6-pu8-go-no-go
2026-09-16 14:46:05 +00:00
weichen and Cursor
d1a019b9d7
docs(ops): archive Wave 3 go/no-go short-term
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 14:46:05 +00:00
weichen and Cursor
6264965267
docs(ops): Wave 3 PU6–PU8 go/no-go — all deferred with contracts
...
Record no-go decisions and independent long-term task contracts; do not
implement or raise MULTI_INTENT tier.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 14:46:05 +00:00
weichen
5d7ac1a8f9
merge: feature/wave2c-same-image-digest
...
Wave 2C: same-image digest pin for test/main promotion.
2026-09-16 14:44:45 +00:00
weichen and Cursor
f0acbb10ad
docs(ops): archive Wave 2C short-term and release integration slot
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 14:44:45 +00:00
weichen and Cursor
da15eb91b6
feat(infra): Wave 2C same-image digest pin for test/main promote
...
Build/apply candidate images once, require digests on promote, and keep
pinned env-service from rebuilding divergent images.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 14:44:26 +00:00
weichen
7c808bdcfc
merge: docs/wave2b-n7-receipt
2026-09-16 14:34:19 +00:00
weichen and Cursor
dcab3aec83
docs(test): archive Wave 2B N7 product_fail promotion receipt
...
Record classified nightly outcome for 67d7335 with image digests and
gate rejection evidence; does not claim product suite green.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 14:34:19 +00:00
weichen
49ca6cd6dc
merge: docs/wave2b-slot-release
2026-09-16 14:32:10 +00:00
weichen and Cursor
4187bcfc9e
docs(ops): release Wave 2B integration slot and archive short-term
...
Smoke passed on merge; record N7 product-fail classification evidence
from the in-flight nightly suite without claiming same-image promotion.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 14:32:10 +00:00
weichen
2498bd2a13
merge: feature/wave2b-nightly-promotion-receipt
...
Wave 2B PU5B: nightly real-PI entry, promotion receipts, promote/release gates.
2026-09-16 14:05:59 +00:00
weichen and Cursor
c75842f945
docs(ops): mark Wave 2B short-term done ahead of merge
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 14:05:59 +00:00
weichen and Cursor
67d73359fd
docs(test): Wave 2B nightly promotion-receipt report and matrix sync
...
Record gate fixtures and infra negative evidence; mark Artifact row
partial for same-commit/digest traceability without same-image claim.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 14:02:24 +00:00
weichen and Cursor
fda159c995
feat(ci): nightly real-PI workflow and promote/release receipt gates
...
Add schedule/dispatch nightly entry that classifies infra vs product
failures, and require a valid receipt (or waiver) before promote/release.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 14:02:24 +00:00
weichen and Cursor
a84778f21b
feat(ci): add immutable promotion receipt write/check with waiver
...
Nightly and promote gates need auditable pass/product_fail/infra_fail
receipts under test-reports assets, plus timed owner waivers.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 14:02:24 +00:00
weichen
8278022237
merge: docs/wave2-slot-release
2026-09-16 10:57:11 +00:00
weichen and Cursor
879f6fadef
docs(ops): release integration slot after Wave 2 merge
...
Smoke: go vet, go test -short (clean env), env-service rebuild, health/ready ok.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 10:57:11 +00:00
weichen
c360a928de
merge: feature/wave2-real-pi-evidence
2026-09-16 10:55:54 +00:00
weichen and Cursor
7461138412
docs(ops): claim integration slot for Wave 2 merge
...
Also mark PU4 DoD complete after U8/full-none real-PI evidence archive.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 10:55:51 +00:00
weichen and Cursor
422f98012e
docs(ops): mark Wave 2 short-term done in archive
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 10:42:43 +00:00
weichen and Cursor
574758a71f
docs(test): archive Wave 2 U8 and full/none real-PI evidence
...
Close FEATURE-MATRIX evidence gaps for multi-intent U8 and workflow
full/none; release the integration slot after live PASS.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 10:42:20 +00:00
weichen and Cursor
f1e87fb2e7
test(server): add Wave 2 real-PI evidence for U8 and full/none
...
Replace the U8 stop-gate with a PG+PI confirm/generate harness and add a
mixed-duty governance long chain covering cross-user approve and none
non-blocking advance.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 10:42:20 +00:00
weichen and Cursor
aac42936bc
fix(intentflow): keep plan step receipts durable under PG events
...
Normalize empty TEXT[] binds, isolate step-changed aggregates from plan
revision uniqueness, propagate AdvanceEligible errors, and emit
taskrun.completed to the registered notify consumer so finalize no longer
rolls back live receipts.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 10:42:20 +00:00
weichen
ad42f83e5b
merge: docs/wave1-pu3-slot-release
2026-09-16 09:42:34 +00:00
weichen and Cursor
3a3b31996a
docs(ops): release integration slot after PU3 merge
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 09:42:34 +00:00
weichen
c5d10aebcc
merge: fix/iam-store-fail-closed
...
Wave 1 PU3: IAM NewStores fail-closed unless explicit dev/test opt-in.
2026-09-16 09:42:27 +00:00
weichen and Cursor
a5bc317492
docs(ops): mark PU3 done and claim merge slot
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 09:42:27 +00:00
weichen and Cursor
299530bf42
docs(test): archive Wave 1 PU3 IAM fail-closed evidence
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 09:42:07 +00:00
weichen and Cursor
7fdbee6c0c
test(server): adapt fixtures to IAM dual-gate fail-closed
...
Boot memory IAM only via explicit test env opt-in; strict auth cases
disable AllowInMemory after startup.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 09:42:07 +00:00
weichen and Cursor
514db3a086
feat(auth): fail-closed IAM store unless dev/test opt-in
...
Refuse MemoryStore fallback for main/empty/unknown env or missing
ALLOW_IN_MEMORY so production cannot silently use in-memory authority.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 09:42:07 +00:00
weichen
16d1ba1d54
merge: docs/wave1-pu5a-slot-release
2026-09-16 09:34:05 +00:00
weichen
0353841a4a
merge: fix/race-tempdir-cleanup
...
Wave 1 PU5A: drain taskrun workers before TempDir cleanup under -race.
2026-09-16 09:34:05 +00:00
weichen and Cursor
24e716e661
docs(ops): release integration slot after PU5A merge
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 09:34:05 +00:00
weichen and Cursor
3400f0a7ac
docs(ops): mark PU5A done and claim merge slot
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 09:34:05 +00:00
weichen and Cursor
a453b290a7
docs(test): archive PU5A TempDir race cleanup evidence
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 09:33:41 +00:00
weichen and Cursor
73ae4b8f5b
fix(server): drain taskrun workers before TempDir cleanup
...
Register newTestServer cleanup and Shutdown WaitIdle so race detector
no longer hits RemoveAll on a live DataDir.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 09:33:41 +00:00
weichen and Cursor
ea2b9f121e
feat(taskrun): add WaitRunDone and WaitIdle for async workers
...
Allow tests and shutdown to drain in-memory workers before TempDir cleanup.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 09:33:41 +00:00
weichen
9d929f0175
merge: docs/wave0-matrix-merge-closeout
2026-09-16 08:33:27 +00:00
weichen and Cursor
99504b628e
docs(ops): release integration slot after Wave 0 matrix merge
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 08:33:27 +00:00
weichen
a88a7e3b0a
merge: feature/feature-matrix-production-readiness-plan
...
Wave 0 FEATURE-MATRIX calibration and IAM readonly verification docs.
2026-09-16 08:32:43 +00:00
weichen and Cursor
8afd37da65
docs(ops): claim integration slot for Wave 0 FEATURE-MATRIX merge
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 08:32:43 +00:00
weichen and Cursor
2fe58ca9d7
docs(remediation): mark Wave 0 DoD items complete
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 08:32:29 +00:00
weichen and Cursor
c4a7479572
docs(status): Wave 0 calibrate FEATURE-MATRIX and verify IAM deploy facts
...
Align capability maturity with frozen boundaries, record IAM readonly PASS
without flipping production_ready, and leave Wave 1+ for fail-closed code.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 08:32:29 +00:00
weichen
1ff55033f4
merge: docs/matrix-deep-test-detailed-report
2026-09-16 05:37:16 +00:00
weichen and Cursor
68455faa94
docs(test): expand matrix deep-test report with I/O analysis verdicts
...
Rewrite the promote report so each Wave case records input, system
output, analysis, and evaluation against FEATURE-MATRIX evidence.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 05:37:16 +00:00
weichen
794b1f43b7
merge: docs/matrix-deep-test-closeout
2026-09-16 05:25:31 +00:00
weichen and Cursor
9363121071
docs(test): archive matrix deep-test promote report and release slot
...
Record Wave 1–4 evidence, fix FEATURE-MATRIX schema-47 note, harden
promote-to-test against origin rebase, and mark infra task done.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 05:25:31 +00:00
weichen
50f800a409
merge: feature/matrix-deep-test-promote-test
...
Matrix deep-test evidence and CURRENT slot claim prior to test promote.
2026-09-16 05:18:52 +00:00
weichen and Cursor
0743fb90ec
docs(ops): advance integration slot to merging for test promote
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 05:18:52 +00:00
weichen and Cursor
895d5f002a
test(ops): capture matrix deep-test Wave 1–3 evidence artifacts
...
Automated short/module/governance-PG outputs plus live :8080 smoke and
PI typed-result sample for promote gate.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 05:18:52 +00:00
weichen and Cursor
4f997a9438
docs(ops): register matrix deep-test claim on CURRENT
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 05:14:00 +00:00
weichen and Cursor
ef84d1d8f7
docs(ops): claim infra slot for matrix deep test and test promote
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 05:13:38 +00:00
weichen
4298701b2a
merge: docs/archive-production-ready-gates
2026-09-16 04:16:03 +00:00
weichen and Cursor
28d1512e6e
docs(ops): archive completed production-ready gates short-term task
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 04:16:03 +00:00
weichen
4d048cc4a3
merge: docs/production-ready-flip
...
Flip SSOT production_ready=yes after release gates and main schema align.
2026-09-16 04:15:55 +00:00
weichen and Cursor
1027026e7a
docs(ops): flip production_ready=yes after B1–B4 gates and schema 47
...
Align FEATURE-MATRIX, gap-matrix, and CURRENT; main rebuilt to schema 47
with dev/test. Release blockers closed; backlog items remain partial/planned.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 04:15:55 +00:00
weichen
8dae227f8c
merge: feature/pi-three-workflow-e2e
...
Release gates B2–B4 evidence, PI E2E harness fixes, and settings conflict recovery.
2026-09-16 04:14:07 +00:00
weichen and Cursor
05a84e6677
fix(web): include nested error field in VERSION_CONFLICT unwrap typing
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 04:13:35 +00:00
weichen and Cursor
23a5f6f589
docs(ops): claim integration slot for production-ready gate merge
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 04:12:09 +00:00
weichen and Cursor
1f35593dcd
docs(test): archive B2–B4 release-gate evidence and check gap boxes
...
PI three-workflow E2E, chat refresh+restart, and frontend conflict/
termination-preview reports; mark corresponding gap-matrix gates done.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 04:11:54 +00:00
weichen and Cursor
736857a292
fix(web): unwrap nested VERSION_CONFLICT business codes for settings recovery
...
HTTP envelope wraps PLAN_FROZEN/ERR_CONCURRENT_SWITCH; reload settings on
conflict so operators refresh instead of blind retry.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 04:11:54 +00:00
weichen and Cursor
64ac437a90
fix(test): upsert project members before SavePlan in chat-refresh live
...
Duty assignees must be active members or activation path returns 400.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 04:11:54 +00:00
weichen and Cursor
3b80582123
fix(pi-agent): stabilize real PI three-workflow E2E harness
...
Use shared DATA_DIR permissions (umask/chmod) and drop obsolete sync
notify asserts so governance PG PI chains can complete on MiniMax runner.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 04:11:54 +00:00
weichen
3b56816f4e
merge: fix/ci-governance-pg-members
2026-09-16 03:20:32 +00:00
weichen and Cursor
56c85bba11
fix(ci): green governance PG on isolated TEST_DATABASE_URL
...
Add duty holders as project members, drop sync notification assert
after outbox cutover, and add an explicit CI governance PG step.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 03:20:32 +00:00
weichen
eaffe3eb31
merge: docs/demo-seed-merge-closeout
2026-09-16 03:17:37 +00:00
weichen and Cursor
c8052c8882
docs(ops): close DEMO-DB-SEED after schema 47 migrate and smoke
...
Record npm/go gates, empty project 6357 docs=0, and release the
integration slot; gap-matrix DEMO-DB-SEED → PASS.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 03:17:37 +00:00
weichen
511012cede
merge: fix/demo-chat-sessions-retire-00047
2026-09-16 03:14:59 +00:00
weichen and Cursor
c741d26eeb
fix(db): add goose 00047 to retire demo project chat sessions
...
Dev already applied 00046 (projects only) before session retirement
was folded into that file; 00047 closes the gap idempotently.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 03:14:59 +00:00
weichen
0917f39f80
merge: fix/demo-data-pollution-web
...
Gate demo seeds, retire goose demo projects/sessions, reject stub in
main/prod, and respect SEED_DEMO_USERS=false.
2026-09-16 03:13:51 +00:00
weichen and Cursor
765a418df1
docs(ops): claim integration slot for demo-data-pollution merge
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 03:13:51 +00:00
weichen and Cursor
66c56324ad
docs(ops): backlink 2026-09-15 audit and record review P0/P1 evidence
...
Cherry-picked SEED_DEMO_USERS separately; document npm test gate,
session retire in 00046, and P2 follow-ups.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 03:13:25 +00:00
weichen
53bb71adae
fix(auth): respect SEED_DEMO_USERS=false to prevent re-seeding demo users
2026-09-16 03:12:31 +00:00
weichen and Cursor
fbda195b7f
fix(db): retire demo chat sessions with projects in 00046
...
Extend unapplied migration to mark 6001–6010 sessions demo_retired
and filter them (and retired projects) out of ListChatSessions.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 03:12:25 +00:00
weichen and Cursor
a44df9280c
fix(web): rewrite demoSeedIds tests for node:test npm gate
...
Vitest-style suite was caught by tsx --test and broke npm test.
Align with storage.test.ts and narrow vitest include to chat suites.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 03:11:36 +00:00
weichen and Cursor
1e19f5c52f
docs(test): archive demo seed pollution remediation evidence
...
Record systemic audit, wave plan status, gap-matrix blockers, and unit/
bundle scan results for the demo-data pollution fix.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 02:50:34 +00:00