diff --git a/app/.htaccess b/.htaccess similarity index 100% rename from app/.htaccess rename to .htaccess diff --git a/app/CHANGES_130722072026.txt b/CHANGES_130722072026.txt similarity index 100% rename from app/CHANGES_130722072026.txt rename to CHANGES_130722072026.txt diff --git a/app/DEPLOYMENT_MANIFEST.json b/DEPLOYMENT_MANIFEST.json similarity index 97% rename from app/DEPLOYMENT_MANIFEST.json rename to DEPLOYMENT_MANIFEST.json index 9108b26..977bc3e 100644 --- a/app/DEPLOYMENT_MANIFEST.json +++ b/DEPLOYMENT_MANIFEST.json @@ -1,6 +1,6 @@ { "application": "GLMChat", - "file_count": 80, + "file_count": 81, "files": { ".htaccess": { "sha256": "ccb4e5e56e820d756cf17c60704179c37d0622dad652649b94ccfd4ce7679f61", @@ -10,6 +10,10 @@ "sha256": "033f1b24cd2f0ad288a8a1ac7e24ec375d6b41fc1af7145a61d77a54be8f3e10", "size": 10706 }, + "THIRD_PARTY_NOTICES_22072026125600.txt": { + "sha256": "b246d42f66d4020d6371f52080557dacd6fbd9ae08c9940a3074c0b71b535a04", + "size": 1279 + }, "VERSION": { "sha256": "fe650098093fad42070e8a2cacfb216a6c416af57bd26dd6ff479fef69f8bc71", "size": 6 @@ -83,8 +87,8 @@ "size": 534 }, "sbom.cdx.json": { - "sha256": "be150a9bdd8fcc177a165dd0a8576f86d90d4be2ccf6731bfa1b965168da0035", - "size": 34472 + "sha256": "5d198709520a7ae7ca4428e53306a3a12c2ac84e9f7bb86fc38ccd3c4e312c34", + "size": 34930 }, "server/.htaccess": { "sha256": "564a1d9c2ce7748072c292d709b85d0e30118cf41ae77c4824b8fc5fe791d1bc", @@ -327,6 +331,6 @@ "DEPLOYMENT_MANIFEST.json", "CHANGES_hhmmddmmyyyy.txt" ], - "profile": "deployment-only", + "profile": "server-direct-deploy", "version": "2.2.1" } diff --git a/app/README.md b/README.md similarity index 100% rename from app/README.md rename to README.md diff --git a/README_BUNDLE_22072026124256.txt b/mnt/data/glmchat_direct_deploy_work/source/README_BUNDLE_22072026124256.txt deleted file mode 100644 index f546166..0000000 --- a/README_BUNDLE_22072026124256.txt +++ /dev/null @@ -1,14 +0,0 @@ -GLMChat V2.2.1 — App and Documentation Bundle -Updated: 22 July 2026 - -- Upload only the contents of app/ to the intended HTTPS application directory. -- Keep documentation/ outside the public application root for reference. -- Read documentation/INSTALLATION_AND_ACCEPTANCE_GUIDE_22072026124256.md before deployment or upgrade. -- Preserve the existing production storage/ directory during upgrades. -- Physical Android, live LiteSpeed and live Together checks must still be completed on the target environment. - - -V2.2.1 HARDENING UPDATE -The app/ directory is the direct-deployment tree. Authoritative guides remain in documentation/ rather than being duplicated inside the public web root. -The V2.2.1 completion report, third-party notices and the timestamped CHANGES file describe the exact hardening work and validation limitations. -Production acceptance still requires the target LiteSpeed host, live Together credentials and physical Android browser/device checks. diff --git a/app/VERSION b/VERSION similarity index 100% rename from app/VERSION rename to VERSION diff --git a/app/assets/index-12db1e757e12.css b/assets/index-12db1e757e12.css similarity index 100% rename from app/assets/index-12db1e757e12.css rename to assets/index-12db1e757e12.css diff --git a/app/assets/index-5aa4ab81f41a.js b/assets/index-5aa4ab81f41a.js similarity index 100% rename from app/assets/index-5aa4ab81f41a.js rename to assets/index-5aa4ab81f41a.js diff --git a/app/assets/native-android.js b/assets/native-android.js similarity index 100% rename from app/assets/native-android.js rename to assets/native-android.js diff --git a/app/assets/offline-runtime.js b/assets/offline-runtime.js similarity index 100% rename from app/assets/offline-runtime.js rename to assets/offline-runtime.js diff --git a/app/assets/platform-enhancements.js b/assets/platform-enhancements.js similarity index 100% rename from app/assets/platform-enhancements.js rename to assets/platform-enhancements.js diff --git a/app/assets/react-de59b0d4504a.js b/assets/react-de59b0d4504a.js similarity index 100% rename from app/assets/react-de59b0d4504a.js rename to assets/react-de59b0d4504a.js diff --git a/app/assets/react-dom-c7a65157caeb.js b/assets/react-dom-c7a65157caeb.js similarity index 100% rename from app/assets/react-dom-c7a65157caeb.js rename to assets/react-dom-c7a65157caeb.js diff --git a/documentation/ADMIN_OPERATIONS_GUIDE_22072026124256.md b/mnt/data/glmchat_direct_deploy_work/source/documentation/ADMIN_OPERATIONS_GUIDE_22072026124256.md deleted file mode 100644 index bc03bea..0000000 --- a/documentation/ADMIN_OPERATIONS_GUIDE_22072026124256.md +++ /dev/null @@ -1,99 +0,0 @@ -# GLMChat V2.2 Administration and Operations Guide - -Updated: 22 July 2026 - -## 1. Feature-locked architecture - -- React PWA frontend using local vendored runtime assets. -- PHP 8.2+ backend. -- SQLite server persistence. -- IndexedDB client persistence and ordered offline mutation queues. -- LiteSpeed or Apache-compatible shared hosting. -- No production Node.js, Python, Composer, WebSocket daemon or alternate database. - -## 2. Storage and permissions - -`storage/` must be writable by PHP and denied to web requests. It contains server state, databases, logs and project data. Do not make it world-writable when a more restrictive hosting-specific ownership or ACL arrangement is available. - -Preserve `storage/.htaccess`. Confirm directory listing is disabled and direct access to database, log, key and backup extensions is rejected. - -## 3. Database operations - -- SQLite uses foreign keys, busy timeout and WAL where available. -- Migrations are checksummed and forward-only. -- Take a complete storage backup before every application upgrade. -- Do not replace the production database with the empty packaged storage directory. -- Do not edit migration files after deployment. -- Investigate a checksum mismatch rather than bypassing it. - -## 4. Security operations - -- Keep the site HTTPS-only. -- Configure trusted proxy TLS only through the server environment, never a client-controlled header. -- Preserve the restrictive CSP and no-store API headers. -- Do not expose `source/`, `tests/`, `scripts/`, `handover/`, `evidence/`, `implementation-prompts/`, `server/` or `storage/`. -- Rotate the Together API key if credential exposure is suspected. -- Review rate-limit, lockout and recent-PIN behaviour after host or session configuration changes. -- Keep diagnostics disabled unless required, and export only secret-safe diagnostic records. - -## 5. Tool administration - -The PHP server is authoritative for the tool allowlist. A UI entry alone does not grant execution. - -For each tool, review: - -- stable identifier and JSON schema; -- read-only, mutating or destructive risk class; -- project path confinement; -- timeout and output limits; -- approval and recent-PIN policy; -- idempotency and retry rules; -- redaction of logs and returned errors. - -Never add arbitrary shell execution, unrestricted filesystem access or dynamically supplied PHP code. - -## 6. Cost governance - -Configure daily and workflow-level limits before enabling wider use. Verify provider pricing assumptions in the current environment. The server, not only the interface, must enforce hard limits. Review cost events by project, run, worker and model when investigating unexpected use. - -## 7. Service-worker and cache operations - -- Publish fingerprinted immutable assets first. -- Publish mutable metadata and `sw.js` next. -- Publish `index.html` last. -- Never reuse a fingerprinted URL for changed bytes. -- Keep API, setup and authentication responses out of Cache Storage. -- Clear only obsolete GLMChat shell caches during recovery. -- Do not clear IndexedDB or pending queues as part of a normal update. - -## 8. Routine maintenance - -- Review application health and controlled bootstrap status. -- Check available disk space and SQLite growth. -- Review logs for repeated authentication failures, retry exhaustion or tool rejection without retaining secrets. -- Test backups by restoring into a non-production environment. -- Verify PWA update behaviour after every release. -- Re-run the live acceptance checklist after PHP, LiteSpeed, TLS, proxy or directory-permission changes. - -## 9. Incident response - -1. Preserve logs and storage safely without publishing them. -2. Record the release hash and environment details. -3. Revoke or rotate exposed provider credentials. -4. Disable destructive tools if tool execution is implicated. -5. Preserve queued mutations before clearing any browser data. -6. Use the stable user-facing error code and sanitised diagnostics for investigation. -7. Restore application files as a coherent release; do not mix immutable assets between releases. - -## 10. Release verification - -A production release is acceptable only when: - -- source and deployment archives pass clean extraction; -- manifests and asset fingerprints match; -- PHP and JavaScript syntax checks pass; -- feature-lock contracts pass; -- migration scenarios pass; -- PWA/offline/accessibility suites pass; -- no high-confidence secrets are present; -- live host, physical Android and live Together checks are recorded truthfully. diff --git a/documentation/DOCUMENTATION_INDEX_22072026124256.md b/mnt/data/glmchat_direct_deploy_work/source/documentation/DOCUMENTATION_INDEX_22072026124256.md deleted file mode 100644 index f93c069..0000000 --- a/documentation/DOCUMENTATION_INDEX_22072026124256.md +++ /dev/null @@ -1,41 +0,0 @@ -# GLMChat V2.2.1 Documentation Index - -Updated: 22 July 2026 - -This documentation accompanies the GLMChat V2.2.1 hardened agentic automation release. The application remains feature-locked to a React Progressive Web App with a PHP 8.2+ and SQLite backend for LiteSpeed or Apache-compatible shared hosting. - -## Start here - -1. `app/README.md` — release summary, architecture and source commands. -2. `documentation/INSTALLATION_AND_ACCEPTANCE_GUIDE_22072026124256.md` — deployment, upgrade, rollback and live acceptance. -3. `documentation/USER_GUIDE_22072026124256.md` — setup, chat, projects, agents, workflows, teams and tools. -4. `documentation/ADMIN_OPERATIONS_GUIDE_22072026124256.md` — hosting, storage, security, diagnostics and maintenance. -5. `documentation/RELEASE_NOTES_22072026124256.md` — V2.2 capability summary, verification and known external checks. -6. `documentation/ROUTE_TO_UI_MATRIX.md` — API-to-interface coverage and authentication requirements. -7. `documentation/FEATURE_AND_FUNCTION_MAP.txt` — authoritative feature, persistence, offline and verification map. -8. `documentation/VERIFICATION_REPORT.txt` — classified local, static and external verification results. -9. `documentation/UI_UX_REMEDIATION_REPORT.txt` — implemented mobile interface and accessibility work. -10. `documentation/RELEASE_HARDENING_REPORT_22072026125600.txt` — V2.2.1 repairs and remaining acceptance gates. - -## Release profiles - -- **Direct deployment:** production runtime only. Upload the contents of the `app/` directory from the documented bundle, or use the standalone direct-deployment ZIP. -- **Complete source:** a separate release profile required to reproduce source-level builds and tests; it is not included in this bundle. -- **Documented bundle:** `app/` contains the deployment-ready application and `documentation/` contains the operator and user documentation. Do not upload the `documentation/` directory into the public application root. - -## Verification terminology - -- **EXECUTED PASS:** the check ran and passed. -- **STATIC PASS:** deterministic inspection passed where runtime execution was not possible. -- **EXTERNAL NOT EXECUTED:** requires the target host, physical device or live Together account. - -External checks are never represented as passes. - - -## V2.2.1 hardening additions - -- `RELEASE_HARDENING_REPORT_22072026125600.txt` — implemented security, PWA and packaging repairs plus explicit unexecuted gates. -- `../THIRD_PARTY_NOTICES_22072026125600.txt` — redistributed third-party licence notices. -- `../app/CHANGES_hhmmddmmyyyy.txt` — exact task diff and evidence-based verification section; use the actual timestamped filename in the release. -- `FINAL_VALIDATION_22072026130658.txt` — exact checks executed against the final V2.2.1 deployment tree and explicit checks not run. -- `OUTSTANDING_PRODUCTION_GATES_22072026130300.txt` — remaining live-host, provider, source and physical-device acceptance work. diff --git a/documentation/FEATURE_AND_FUNCTION_MAP.txt b/mnt/data/glmchat_direct_deploy_work/source/documentation/FEATURE_AND_FUNCTION_MAP.txt deleted file mode 100644 index c5035d5..0000000 --- a/documentation/FEATURE_AND_FUNCTION_MAP.txt +++ /dev/null @@ -1,83 +0,0 @@ -GLMChat V2.2 — AUTHORITATIVE FEATURE AND FUNCTION MAP -===================================================== - -ARCHITECTURE -- Maintainable React source: source/frontend/react/*.js -- Deterministic build: scripts/build.mjs; scripts/verify.mjs -- PHP 8.2+ backend: server/bootstrap.php; server/index.php; server/routes/*.php -- SQLite persistence/migrations: server/lib/Database.php; server/lib/Migrations.php; server/migrations/*.sql -- LiteSpeed/Apache security/deployment: .htaccess; server/.htaccess; storage/.htaccess -- Offline PWA: source/frontend/offline-runtime.js; source/frontend/sw.js; manifest.webmanifest - -SETUP, AUTHENTICATION AND SECURITY -- Install gate and standalone transitions: React bootstrap/components; install-gate browser suite. -- First-use six-digit PIN and Together key validation: auth routes, Auth.php, Crypto.php, setup screens. -- Session, CSRF, lockout and recent-PIN reauthentication: Auth.php; auth/data/project/template/tool routes. -- Authenticated encryption and secret-safe failure/logging: Crypto.php; Logger.php; Api.php; bootstrap preflight tests. - -CHAT AND MULTIMODAL -- Conversations/history/pinning/export: conversations routes and Chat/History screens. -- Streaming chat, stop, retry/regenerate, copy/share: chat routes, Together.php and ChatScreen. -- Visible project/file context and project instructions: Projects.php; ContextBudget.php; chat route/UI selectors. -- Image attachments and separate vision model: chat route; Together vision request; message_attachments persistence. -- Per-turn reasoning, preserved reasoning and JSON-Schema output: AgenticDefinition.php; Together.php; chat UI. -- Cost preflight and conversion to prompt/agent/workflow: cost/chat/prompt/automation APIs and ChatScreen. -- TTS voices/generation/playback: tts routes and TTS screen. - -PROJECT WORKSPACES -- Project CRUD, ZIP import/export and path-safe file handling: Projects.php; projects routes. -- Overview/Chat/Files/Automations/Activity tabs: ProjectDetailScreen. -- Metadata, instructions, budget, permissions, retention and revision: migration 012; Projects::updateMetadata. -- Linked runs, outputs and activity: workflow/automation APIs and project screens. - -TYPED AGENTIC DEFINITIONS -- Versioned agent/team/workflow validation: AgenticDefinition.php. -- Server CRUD and typed request payloads: automation.php; templates.php; frontend wizards. -- Immutable execution snapshots: workflow_snapshots and WorkflowEngine::start. -- IndexedDB wizard drafts/local records: 00-core.js and WizardShell/BaseWizard. - -WORKERS, TEAMS AND ORCHESTRATION -- Persistent workers, assignments, events, outputs and telemetry: migration 011; WorkflowEngine.php. -- Manager-led, sequential, parallel and consensus policies: typed team definitions and execution engine. -- Delegation, memory guidance, checkpoints and worker-scoped controls: WorkflowEngine events/checkpoints/interventions. -- Custom stages, dependencies, optional stages and parallel groups: workflow definition schema and instantiation. -- Pause/resume/cancel, retry/skip, reassignment, tool revoke and branch checkpoint: workflow routes/engine and RunDetailScreen. - -FUNCTION CALLING AND PHP TOOLS -- Authoritative allowlisted registry and JSON schemas: ToolRegistry.php. -- Schema validation, project confinement, timeout/output limits and secret redaction: ToolExecutor.php. -- Together tool-call request/continuation loop and structured responses: Together.php; WorkflowEngine.php. -- Read/write/destructive approval policy and recent-PIN controls: tool_calls/tool_approvals tables and routes. -- Tool catalogue, exact scope review, approvals and audit timeline: Tools/Run screens. - -TEMPLATES, PROMPTS AND LIBRARY -- Server automation templates: migration 012; templates.php. -- Search, pin, duplicate, import/export, edit and protected delete: LibraryScreen and template API. -- Prompt CRUD/reset and save-from-chat: Prompts.php; prompts routes; library/chat UI. - -OFFLINE, SYNC AND CONFLICTS -- Encrypted IndexedDB state and ordered mutation queue: offline-runtime.js. -- UUID idempotency, request hashes, retries, auth pause and conflicts: sync route/runtime. -- Offline drafts never silently submitted: chat and wizard persistence. -- Pending/conflict/exhausted/auth-required inspection and manual recovery: OfflineScreen. -- Conflict resolution through sync API: OfflineScreen and sync route. -- Shell-only Cache Storage and safe updates preserving IndexedDB/queues: sw.js; platform-enhancements.js. - -COST, SETTINGS, PRIVACY AND DIAGNOSTICS -- Provider/model/reasoning/output/vision settings: settings route and SettingsScreen. -- Daily/workflow/agent/stage limits and currency-aware display: Cost.php; settings/cost APIs and screens. -- Export, selected delete, full reset and offline revoke: DataManagement.php; privacy screen. -- Safe diagnostics and stable error recovery: platform-enhancements.js; ErrorBoundary. - -ACCESSIBILITY AND ANDROID -- 320–600px, short landscape, 200% text, 48px targets and reduced motion: app.css and browser suites. -- Focus trap/restoration, logical headings, restrained live regions and keyboard navigation: components/screens. -- Safe areas, Android Back overlays and standalone PWA install/update: native-android.js; app shell; install tests. - -VERIFICATION OWNERS -- Node contracts: tests/node/*.test.mjs -- PHP portable/static: tests/php/static.php and bootstrap_preflight.php -- Migrations: tests/python/test_migrations.py -- Browser: tests/browser/run_*_test.py -- Build/cache: scripts/build.mjs; scripts/verify.mjs; scripts/adversarial_build_check.py -- Feature lock: FEATURE_LOCK.json; scripts/feature-lock.mjs diff --git a/documentation/FINAL_VALIDATION_22072026130658.txt b/mnt/data/glmchat_direct_deploy_work/source/documentation/FINAL_VALIDATION_22072026130658.txt deleted file mode 100644 index 8946d7a..0000000 --- a/documentation/FINAL_VALIDATION_22072026130658.txt +++ /dev/null @@ -1,59 +0,0 @@ -# GLMChat V2.2.1 final validation -UTC 2026-07-22T13:06:58Z - -## Baseline/final structure -baseline_files=87 -final_files=81 -final_unexpected_runtime_outputs: - -## PHP syntax -php_files=44 failures=0 - -## JavaScript syntax -js_files=7 failures=0 - -## JSON, manifest, SBOM, references and archive path safety -json_files 4 parse_failures 0 -[] -manifest_entries 80 set_match True failures [] -sbom_components 81 file_inventory_match True missing [] extra [] -precache_assets 15 missing [] -html_refs 10 missing [] -manifest_scope ./ start_url ./ display standalone -manifest_new_chat True - -## Fresh and upgrade migration scenarios -baseline-fresh migrations 12 integrity ok foreign_key_violations 0 tables 29 -final-fresh migrations 13 integrity ok foreign_key_violations 0 tables 29 -upgrade-12-to-13 integrity ok foreign_key_violations 0 app_version 2.2.1 offline_max_age_days 7 - -## Targeted hardening assertions -PASS preview bypass removed -PASS mock provider test-only -PASS install does not force update activation -PASS explicit update action retained -PASS fetch fallback always resolves Response -PASS normal update notice present -PASS service-worker failure visible -PASS sensitive records use AES-GCM -PASS plaintext migration implemented -PASS PIN rekey does not silently overwrite retained data -PASS offline maximum credential age enforced -PASS lock clears decryption key -PASS closed-app sync claim removed -PASS unhashed helpers no-cache -PASS workbox asset removed -PASS light-only declarations -PASS duplicate public docs removed - -## Obvious secret scan -potential_secret_hits 0 - -## Available-runtime backend preflight (isolated copy) -{"ok":false,"error":{"code":"ENVIRONMENT_INVALID","message":"The server does not meet GLMChat runtime requirements.","request_id":"b7056ecd70c340ea7a8f518b","failures":["Missing PHP extension: sqlite3.","Missing PHP extension: curl.","Missing PHP extension: mbstring.","Missing PHP extension: zip."]}} -## Checks unavailable -Build: Not run — deployment-only bundle contains no package.json, lockfile or build scripts. -Type-check: Not run — source and type-check configuration are absent. -Automated tests: Not run — claimed Node/PHP/browser suites are absent. -Browser runtime: Not run — installed Chromium hung even on a data URL in this container; no page result was claimed. -Live host/provider/device: Not run — requires target LiteSpeed host, Together credentials and physical Android devices. diff --git a/documentation/INSTALLATION_AND_ACCEPTANCE_GUIDE_22072026124256.md b/mnt/data/glmchat_direct_deploy_work/source/documentation/INSTALLATION_AND_ACCEPTANCE_GUIDE_22072026124256.md deleted file mode 100644 index 551eeda..0000000 --- a/documentation/INSTALLATION_AND_ACCEPTANCE_GUIDE_22072026124256.md +++ /dev/null @@ -1,99 +0,0 @@ -# GLMChat V2.2 Installation and Acceptance Guide - -Updated: 22 July 2026 - -## 1. Hosting requirements - -- HTTPS-enabled LiteSpeed or Apache-compatible shared hosting. -- PHP 8.2 or later. -- PHP extensions: `sqlite3`, `curl`, `json`, `openssl`, `mbstring`, `fileinfo` and `zip`. -- Writable private `storage/` directory. -- `.htaccess` support for rewrite and header rules. -- No Node.js, Python, Composer, container or background daemon is required on the production host. - -## 2. New installation - -1. Create an empty HTTPS directory at the domain root or intended nested path. -2. Upload the contents of the supplied `app/` directory, or extract the standalone direct-deployment ZIP in that directory. -3. Confirm `.htaccess`, `server/.htaccess` and `storage/.htaccess` remain present. -4. Make `storage/` writable by PHP without making it publicly browsable. -5. Open `/api/status` and confirm it returns a controlled success response. A controlled `ENVIRONMENT_INVALID` response identifies missing extensions without exposing stack traces or private paths. -6. Open the application in Chrome for Android or Samsung Internet. -7. Complete first-use setup: create the six-digit PIN, enter and test the Together API key, then review optional recovery guidance. -8. Install the PWA from the browser when prompted. - -## 3. Upgrade procedure - -1. Export any required user data through the application. -2. Back up the complete existing `storage/` directory outside the public web root. -3. Record the current release ZIP and SHA-256 for rollback. -4. Put the application into a maintenance window if users are active. -5. Upload new immutable `assets/` files first. -6. Upload server files and mutable coordination files next. -7. Upload `index.html` last. -8. Preserve the existing `storage/` directory; do not replace it with an empty packaged directory. -9. Open `/api/status`, log in, and allow forward-only migrations to complete. -10. Confirm existing projects, conversations, queues and settings remain available. -11. Trigger the service-worker update and verify the application reloads without clearing IndexedDB or pending mutations. - -## 4. Rollback - -1. Preserve the current `storage/` directory and take another backup before rollback. -2. Restore the previous application files without restoring an older database over a migrated database unless a separately tested database rollback plan exists. -3. Restore the previous immutable assets and coordination files as one coherent release. -4. Clear only obsolete GLMChat shell caches through the recovery interface; do not clear IndexedDB or queued mutations. -5. Verify login, projects, conversations and offline queues. - -Database migrations are forward-only. A code rollback after a schema upgrade must be assessed against the migration compatibility notes rather than assumed safe. - -## 5. Post-installation acceptance - -### Server and security - -- [ ] `/api/status` reports a healthy environment. -- [ ] HTTP requests are rejected rather than redirected using an untrusted Host header. -- [ ] Root and nested-subdirectory routes work. -- [ ] `storage/`, `server/`, `source/`, `tests/`, `scripts/`, `handover/`, `evidence/` and `implementation-prompts/` are not publicly accessible. -- [ ] PHP, database, log, key and evidence files cannot be downloaded. -- [ ] CSP contains no `unsafe-eval` and no uncontrolled remote script source. -- [ ] API, setup and authentication responses use `Cache-Control: no-store`. -- [ ] Session cookies are Secure, HttpOnly and SameSite where HTTPS is active. - -### Application and PWA - -- [ ] Welcome, setup and PIN login work. -- [ ] Together API-key validation succeeds. -- [ ] Chat streams a response and Stop works. -- [ ] A project can be created and its selected files are visibly included in chat context. -- [ ] An agent, workflow and team can be saved and launched. -- [ ] A run shows real stages, workers, approvals and events. -- [ ] Pause, resume, cancel and retry operate only in valid states. -- [ ] A read-only tool executes; a destructive tool requires approval and recent PIN. -- [ ] Offline launch works after an initial online load. -- [ ] Offline chat remains a draft and is not silently submitted. -- [ ] Pending mutations resume in order after reconnection. -- [ ] Conflicts can be reviewed and resolved. -- [ ] A service-worker update preserves IndexedDB and queued work. - -### Android and accessibility - -- [ ] Chrome for Android installation and update work. -- [ ] Samsung Internet installation and update work. -- [ ] Android Back closes overlays before navigating away. -- [ ] The keyboard does not obscure the composer. -- [ ] Portrait, short landscape and display cut-outs are usable. -- [ ] 200% text and Android large text do not clip controls. -- [ ] TalkBack announces controls, stages and approval states correctly. -- [ ] Reduced-motion mode removes nonessential animation. - -### Live provider acceptance - -- [ ] GLM-5.2 text and coding requests succeed. -- [ ] Streaming and cancellation succeed. -- [ ] Structured JSON output validates. -- [ ] Function calling executes through the PHP allowlist. -- [ ] Images route to the configured vision-capable model. -- [ ] TTS voice listing and playback succeed. -- [ ] Provider errors, timeouts, rate limits and cost limits are handled safely. - -The physical-device, live-host and live-provider checks above remain external until performed on the target environment. diff --git a/documentation/OUTSTANDING_PRODUCTION_GATES_22072026130300.txt b/mnt/data/glmchat_direct_deploy_work/source/documentation/OUTSTANDING_PRODUCTION_GATES_22072026130300.txt deleted file mode 100644 index 1fa3dfa..0000000 --- a/documentation/OUTSTANDING_PRODUCTION_GATES_22072026130300.txt +++ /dev/null @@ -1,22 +0,0 @@ -GLMChat V2.2.1 Outstanding Production Gates -Generated: 22 July 2026 13:03 UTC - -The V2.2.1 deployment package is hardened but is not represented as production-approved until these gates are completed: - -1. Deploy at the intended LiteSpeed domain root and a representative nested path. -2. Confirm PHP 8.2+ extensions sqlite3, curl, mbstring, zip, fileinfo, openssl and json. -3. Verify .htaccess rewrites, private-path denials and every mandatory security header. -4. Perform an upgrade against a cloned real pre-V2.2.1 storage directory and verify all user data. -5. Test application and storage rollback after an intentionally failed upgrade. -6. Run live Together API text, vision, function/tool and TTS requests, including timeout, rate-limit and invalid-key paths. -7. Test streaming and cancellation through the production LiteSpeed/proxy stack. -8. Test concurrent and long-running workflows, leases, interruption recovery and SQLite contention. -9. Test storage quota pressure, IndexedDB transaction failure and browser eviction behaviour. -10. Test large project uploads, ZIP guards, downloads and interruption on the target host. -11. Test installation, offline restart, queued replay and controlled updates on physical Android Chrome and Samsung Internet. -12. Complete TalkBack, keyboard, reduced-motion and responsive acceptance on physical devices. -13. Obtain the matching complete-source release and reproduce its build, type-check, lint and automated test suites. -14. Review the retained React 16.0.0/ReactDOM 16.0.1 dependency risk and plan a source-level upgrade. -15. Decide whether a six-digit PIN plus PBKDF2 and a seven-day offline lifetime is sufficient for the intended threat model. Stronger device-bound WebAuthn/passkey protection requires source/UI work and remains recommended for high-sensitivity deployments. - -Until these checks are evidenced, release status remains: CONDITIONAL STAGING CANDIDATE — NOT PRODUCTION-PROVEN. diff --git a/documentation/RELEASE_HARDENING_REPORT_22072026125600.txt b/mnt/data/glmchat_direct_deploy_work/source/documentation/RELEASE_HARDENING_REPORT_22072026125600.txt deleted file mode 100644 index 0fdde43..0000000 --- a/documentation/RELEASE_HARDENING_REPORT_22072026125600.txt +++ /dev/null @@ -1,26 +0,0 @@ -GLMChat V2.2.1 Release Hardening Report -Generated: 22 July 2026 12:56 UTC - -Implemented: -- AES-GCM protection for sensitive IndexedDB cache records, drafts, conflict payloads and queued mutation payloads after PIN unlock. -- Automatic migration of existing plaintext V2.2 offline records after the next successful PIN unlock. -- Seven-day maximum age for offline credentials before online sign-in is required. -- Offline lock now clears both the in-memory session and local data-decryption key. -- Service-worker updates wait for explicit user installation rather than activating over a live tab. -- Normal update-ready and service-worker-failure user notices. -- Fixed the non-navigation service-worker fallback to always return a Response. -- No-cache headers for non-fingerprinted runtime helper scripts. -- Production preview-query bypass removed. -- Mock Together provider restricted to APP_ENV=test. -- New-chat manifest shortcut added. -- Unused Workbox Window asset removed. -- Light-only production palette applied. -- Public-root duplicate documentation removed; external documentation remains authoritative. -- SBOM and deployment manifest regenerated for the final V2.2.1 tree. -- Third-party licence notices added to the distribution. - -Not claimed as completed: -- Live LiteSpeed root and nested-path acceptance. -- Live Together text, vision, tools or TTS calls. -- Physical Android Chrome, Samsung Internet or TalkBack acceptance. -- Reproduction of the original source-level Node/PHP/browser suites, because their source and test files are absent from this deployment-only bundle. diff --git a/documentation/RELEASE_NOTES_22072026124256.md b/mnt/data/glmchat_direct_deploy_work/source/documentation/RELEASE_NOTES_22072026124256.md deleted file mode 100644 index aa11258..0000000 --- a/documentation/RELEASE_NOTES_22072026124256.md +++ /dev/null @@ -1,49 +0,0 @@ -# GLMChat V2.2 Release Notes - -Updated: 22 July 2026 - -## Release summary - -GLMChat V2.2 converts the agentic automation prototype into a maintainable, typed and server-enforced React/PHP production implementation. The interface uses mobile tiles and guided animated wizards while preserving the offline-first PWA, PHP 8.2+, SQLite and LiteSpeed shared-hosting architecture. - -## Major capabilities - -- Typed agents, teams, workflows and templates. -- Immutable execution snapshots. -- Separate workers, delegation, coordination, scoped memory, consensus and checkpoints. -- Custom workflow stages with dependencies, retries, limits, approvals and expected outputs. -- Genuine pause, resume, cancel, retry, optional-stage skip, reassignment, tool revocation and checkpoint branching. -- Server-owned PHP tool registry with JSON-schema validation, project confinement and risk-based approvals. -- Together tool-call continuation and structured output. -- Separate vision-model routing and TTS playback. -- Project workspaces, searchable history, prompts and typed templates. -- IndexedDB-first drafts, definitions, runs and explicit offline recovery. -- Conflict review and resolution. -- Provider, model, cost, privacy and diagnostics controls. -- Accessible Android-first wizard and run interfaces. - -## Security and release hardening - -- Restrictive same-origin CSP without `unsafe-eval`. -- Direct-access denial for private source, storage, tests, handovers and evidence. -- Explicit denial for `evidence/` and `implementation-prompts/` if accidentally uploaded. -- Shell-only service-worker caching. -- Content-addressed immutable assets and collision rejection. -- Secret-safe bootstrap errors, logs, diagnostics and exports. -- ZIP traversal, symlink and decompression protections. - -## Local and emulated verification - -The completed release passed the feature lock, Node contracts, PHP static/portable checks, migration scenarios, bootstrap preflight, offline/PWA browser tests, accessibility, deferred reopen synchronisation, required responsive widths, full-spec interface evidence, deterministic builds and adversarial asset checks. - -## External acceptance - -The following remain environment-specific and must be completed after deployment: - -- physical Android Chrome and TalkBack; -- physical Samsung Internet; -- live LiteSpeed root and subdirectory deployment; -- live PHP extension, permission, rewrite and header validation; -- live Together GLM-5.2, tool calling, vision and TTS. - -These checks are classified as external, not as completed passes. diff --git a/documentation/ROUTE_TO_UI_MATRIX.md b/mnt/data/glmchat_direct_deploy_work/source/documentation/ROUTE_TO_UI_MATRIX.md deleted file mode 100644 index a26dc8e..0000000 --- a/documentation/ROUTE_TO_UI_MATRIX.md +++ /dev/null @@ -1,27 +0,0 @@ -# GLMChat V2.2 Route-to-UI Matrix - -| API contract | Primary UI | Authentication / approval | Offline behaviour | Verification | -|---|---|---|---|---| -| `GET /api/status` | boot, install gate, setup recovery | public, secret-free | cached shell may render; response never cached | bootstrap/browser/install tests | -| `POST /api/setup` | first-use setup wizard | setup-only, CSRF/bootstrap controls | online only | PHP/browser setup contracts | -| `POST /api/login`, `/api/logout`, `GET /api/session` | PIN login, lock/logout | six-digit PIN/session | encrypted local-only unlock where supported; server auth online | auth/static/browser tests | -| `GET/PATCH /api/settings`, API-key/test-provider routes | Settings | authenticated; current PIN for key replacement | settings retain local presentation state; provider changes online | Node/PHP contracts | -| conversation collection/item routes | Chat history and active chat | authenticated; recent PIN for protected delete | drafts local; supported metadata mutations queued | browser/offline/Node tests | -| `POST /api/chat`, generation cancellation | Chat | authenticated, CSRF, cost preflight | chat remains explicit draft; never auto-submitted | Node contracts/browser UI | -| `GET /api/projects`, upload, item/file/download routes | Projects and Project workspace | authenticated; recent PIN for protected metadata/delete | selected supported changes use ordered queue; provider work pauses | migration/PHP/UI tests | -| `/api/automation-definitions` collection/items | Agent, Team and Workflow wizards; Library | authenticated, CSRF | typed definitions/drafts persist in IndexedDB and sync explicitly | agentic Node tests | -| `/api/templates` collection/items | Automation Library | authenticated; recent PIN for delete | local defaults remain usable; server templates refresh online | Node/migration/UI tests | -| `/api/workflows` collection/start/detail | Runs and Run inspector | authenticated, CSRF, budget enforcement | definitions/runs saved locally as waiting for connection | agentic/migration/UI tests | -| workflow pause/resume/cancel routes | Run controls | authenticated, CSRF | local waiting runs launch only after explicit Resume online | Node/PHP/browser evidence | -| workflow approval decision route | Approval cards | authenticated; recent PIN for destructive tools | waits safely; no offline execution | agentic contracts/UI evidence | -| workflow intervention route | Run intervention panel | authenticated; recent PIN for sensitive interventions | online only; state remains inspectable offline | agentic contracts/UI evidence | -| `GET /api/tools`, `POST /api/tools/execute` | Tool wizard and run approvals | authenticated; schema/risk policy; recent PIN when destructive | no silent tool execution offline | ToolRegistry/ToolExecutor tests | -| prompt routes | Library and save-from-chat | authenticated | local edits remain visible; persistence online/queued where supported | Node/UI contracts | -| cost summary/events/preflight | Home badges, Chat estimate, Costs | authenticated | last known display only; hard enforcement remains server-side | Node/PHP/UI tests | -| sync snapshot/batch/conflicts/resolve | Offline & Sync | authenticated, CSRF for mutations | authoritative queue/conflict recovery surface | browser deferred reopen synchronisation/offline tests | -| TTS voices/generation | Voice screen and Speak action | authenticated, provider limits | online only; temporary audio URL revoked | Node/static/UI evidence | -| data privacy/export/reauth/delete/reset/revoke | Privacy & Data | authenticated; recent PIN/confirmation as mapped | local clear is separate; server actions online | PHP/Node/UI evidence | -| `GET /api/health` | Diagnostics | authenticated, secret-safe | last loaded state only | PHP/static/UI evidence | -| `POST /api/audit` | project/workflow compatibility entry | authenticated, CSRF, budget limits | definition may be saved; inference online | workflow contracts | - -Dynamic resource identifiers are UUID-validated. No retained production route is intentionally exposed without a corresponding UI or compatibility entry point. diff --git a/documentation/UI_UX_REMEDIATION_REPORT.txt b/mnt/data/glmchat_direct_deploy_work/source/documentation/UI_UX_REMEDIATION_REPORT.txt deleted file mode 100644 index 20d0113..0000000 --- a/documentation/UI_UX_REMEDIATION_REPORT.txt +++ /dev/null @@ -1,38 +0,0 @@ -GLMChat V2.2 — UI/UX AND AGENTIC IMPLEMENTATION REPORT -Date: 2026-07-22 -Status: PASS - -IMPLEMENTED PRODUCT MODEL -- Android-first tile home with progressive disclosure. -- Seven-step Agent wizard plus Workflow, Agent Team and Tool wizards. -- Resumable IndexedDB drafts, explicit Save draft/Save template and final typed review. -- Four-item primary navigation: Home, Runs, Projects, Settings; specialist screens under More. - -REAL EXECUTION SURFACES -- Run inspector uses server workers, stages, events, checkpoints and approvals. -- Agent map exposes actual worker status, output, tokens and cost. -- Safe controls: pause/resume, cancel, guidance, retry, optional skip, reassignment, tool revoke, budget change and checkpoint branch. -- Custom stages, specialists, coordination, memory, tools and limits are represented in immutable snapshots. - -COMPLETE WORKSPACES -- Projects: Overview, Chat, Files, Automations and Activity. -- Chat: visible context, images, reasoning/JSON options, cost preflight, streaming controls, export and automation conversion. -- Library: definitions, templates, prompts, search, pin, duplicate, import/export and protected delete. -- Offline: pending work, conflicts, explicit resolution and drafts. -- Settings/Costs/Voice/Privacy/Diagnostics are reachable and operationally wired. - -ACCESSIBILITY AND MOTION -- Safe-area/cutout padding and Android keyboard-aware layout. -- 48 CSS-pixel controls, visible focus, focus trap/restoration and logical headings. -- One controlled polite live region. -- 200% text, large-text preference, short landscape and 320–600px resilience. -- Tile, wizard, stage and agent activity motion with reduced-motion alternatives. - -EXECUTED EVIDENCE -- 6 required portrait widths plus short landscape and reduced motion. -- Accessibility and install transitions in Chromium. -- 10 responsive screenshots. -- 21 full-spec production UI screenshots covering welcome/setup, home, all four wizards, runs/run detail, projects/workspace, history/chat, library, conflicts, costs, settings, voice, privacy, diagnostics and More. - -LIMITATIONS -Physical Android Chrome, Samsung Internet, TalkBack and provider-backed visual states require external target-environment acceptance. No internal UI control is knowingly left as a decorative substitute for an absent operation. diff --git a/documentation/USER_GUIDE_22072026124256.md b/mnt/data/glmchat_direct_deploy_work/source/documentation/USER_GUIDE_22072026124256.md deleted file mode 100644 index 5c53c39..0000000 --- a/documentation/USER_GUIDE_22072026124256.md +++ /dev/null @@ -1,119 +0,0 @@ -# GLMChat V2.2 User Guide - -Updated: 22 July 2026 - -## 1. First use - -1. Open GLMChat on the HTTPS site. -2. Create and confirm a six-digit PIN. -3. Enter the Together API key and use the validation action. -4. Review the privacy and offline explanation. -5. Install the PWA when the browser offers installation. - -The API key is encrypted at rest and decrypted only when required. Protected destructive actions may request the PIN again. - -## 2. Home tiles - -- **Build an Agent:** create a specialist with instructions, memory, tools, approval policy and limits. -- **Run Automation:** create a typed multi-stage workflow. -- **Create Agent Team:** combine specialists using manager-led, sequential, parallel or consensus coordination. -- **Tool Actions:** run approved project and verification actions. -- **Projects:** organise files, instructions, chats, automations and activity. -- **Templates & Prompts:** save and reuse prompts and typed automation definitions. -- **Offline & Sync:** inspect drafts, queued actions, conflicts and retries. -- **Usage & Costs:** review estimates, limits and execution telemetry. - -Status badges show running work, offline queues, conflicts or cost warnings without opening each section. - -## 3. Guided wizards - -Every automation wizard uses the same pattern: - -1. Choose the goal or task type. -2. Select the project and visible context. -3. Configure roles, stages or tools. -4. Configure approvals, memory and limits. -5. Review the exact typed configuration. -6. Save as a draft or template, or launch. - -Drafts are stored in IndexedDB and can be resumed. Unsupported values prevent launch rather than being silently ignored. - -## 4. Chat - -- Select a project and only the files that should be included. -- Attach supported images and files visibly before submission. -- Select reasoning and structured-output options when needed. -- Review the estimated maximum cost before sending. -- Use Stop during streaming, then retry or regenerate where appropriate. -- Copy, share or export a conversation as plain text. -- Save a useful response as a prompt or convert it into a preseeded agent or workflow. -- Use Speak to generate TTS playback when the provider is available. - -When offline, chat text remains a local draft. GLMChat does not silently submit it after reconnection. - -## 5. Projects - -Each project provides: - -- **Overview:** name, instructions, permissions, budget and retention. -- **Chat:** project-aware conversation with visible selected context. -- **Files:** upload, inspect, select, edit or remove supported files. -- **Automations:** project agents, teams, workflows and run history. -- **Activity:** project changes, outputs and audit information. - -ZIP imports are validated for traversal, symlinks, size and decompression limits. - -## 6. Agents and teams - -An agent definition controls its role, instructions, model behaviour, memory, allowed tools, approvals and execution limits. - -A team contains separate workers. Coordination options determine real execution behaviour: - -- **Manager-led:** a manager delegates work to specialists. -- **Sequential:** each worker hands its output to the next. -- **Parallel:** specialists work concurrently and results are combined. -- **Consensus:** proposals and reviews are compared before a decision. - -The live run screen shows actual workers, assignments, outputs, costs and approval states. - -## 7. Workflows and run controls - -Workflow stages can define dependencies, assigned agents, tools, expected outputs, retries, cost/token limits, timeouts and checkpoints. - -Available controls depend on the current state: - -- **Pause:** requests a checkpoint-safe pause. -- **Resume:** resumes from the persisted checkpoint without duplicating completed actions. -- **Cancel:** stops the run. -- **Retry:** retries a permitted failed stage within its limit. -- **Skip:** skips an optional stage. -- **Intervene:** provide guidance, revoke a tool, reassign a worker, approve a budget change or branch from a checkpoint where permitted. - -## 8. Tool approvals - -Tools are classified as read-only, mutating or destructive. Before approval, GLMChat shows: - -- the exact tool; -- validated arguments; -- affected project/files; -- whether the operation is reversible; -- the required approval level. - -Destructive operations require recent-PIN reauthentication. Approved arguments cannot be altered afterwards. - -## 9. Offline and synchronisation - -The Offline & Sync screen shows: - -- local drafts; -- pending mutations; -- authentication-paused operations; -- exhausted retries; -- conflicts; -- recently synchronised actions. - -Conflicts can retain the local version, retain the server version, or use a supported manual merge. Queued operations preserve identifiers, request hashes and ordering. - -## 10. Privacy and recovery - -Privacy controls allow supported export, selective deletion, full reset and offline-access revocation. The error-recovery surface can retry, install a waiting update or clear only stale application-shell caches. It does not clear IndexedDB, projects or queued mutations unless a separate destructive action is explicitly confirmed. diff --git a/documentation/VERIFICATION_REPORT.txt b/mnt/data/glmchat_direct_deploy_work/source/documentation/VERIFICATION_REPORT.txt deleted file mode 100644 index 1d9ac57..0000000 --- a/documentation/VERIFICATION_REPORT.txt +++ /dev/null @@ -1,82 +0,0 @@ -IMPORTANT: This report was supplied with V2.2.0 and is retained as historical evidence. Its test suites are not included in the deployment-only bundle and were not independently rerun during V2.2.1 hardening. - -GLMChat V2.2.0 — HISTORICAL SUPPLIED VERIFICATION REPORT -Date: 2026-07-22 -Verdict: HISTORICAL SUPPLIED LOCAL/EMULATED EVIDENCE — PRODUCTION ACCEPTANCE REMAINS REQUIRED - -CLASSIFICATIONS -- EXECUTED PASS: the command or browser check ran successfully. -- STATIC PASS: source/configuration inspection met the requirement. -- EXTERNAL NOT EXECUTED: requires the target host, device or provider. - -1. SOURCE, ARCHITECTURE AND FEATURE LOCK -EXECUTED PASS Maintainable React/PHP/Python syntax checks. -EXECUTED PASS Feature lock: 85 protected files and 26 capability contracts. -STATIC PASS Active frontend is source/frontend/react/*.js with local React/ReactDOM; the historical bundle is provenance only. -STATIC PASS PHP 8.2+/SQLite/LiteSpeed remains the sole production backend/deployment architecture. -STATIC PASS Versioned agents, teams, workflows, templates, immutable snapshots, workers, stages, events, checkpoints, approvals and interventions are mapped. -STATIC PASS Tool execution remains server-allowlisted, schema-validated and project-confined. - -2. AUTOMATED CONTRACT AND MIGRATION TESTS -EXECUTED PASS Node contract tests: 24 passed, 0 failed. -EXECUTED PASS PHP portable/static checks: 50 passed. -EXECUTED PASS SQLite migration scenarios: 4 passed, including fresh, upgrade, concurrency and conflict/idempotency paths. -EXECUTED PASS Bootstrap preflight/logger fallback under php -n. -STATIC PASS Migrations 011 and 012 add typed orchestration, templates, project metadata and branch lineage without destructive downgrade behaviour. - -3. BROWSER AND OFFLINE ACCEPTANCE -EXECUTED PASS Offline-first runtime: unlock, persistence, sync, replay, conflict, service worker and credential scan. -EXECUTED PASS PWA install gate: native prompt, dismissal, appinstalled, standalone bypass, display-mode transition and embedded-browser recovery. -EXECUTED PASS Accessibility: four Android layouts, 200% text, named controls, minimum targets, visible focus, one controlled live region and modal restoration. -SUPPLIED PASS Deferred reopen synchronisation: durable registration/fallback, exact attempts, auth pause, conflict, exhaustion, ordering, reload, profile restart, worker update, idempotency and private-cache exclusion. -EXECUTED PASS Responsive UI: 320, 360, 390, 412, 480 and 600 CSS-pixel portrait widths, team wizard, short landscape, reduced motion and dominant chat viewport. -EXECUTED PASS Full-spec UI evidence: 21 production screens/wizards at 390x844 with no horizontal overflow. -STATIC PASS Offline chat and AI/tool actions are never silently submitted. - -4. AGENTIC AND USER-FACING INTEGRATION -STATIC PASS Wizard fields serialize as typed server-validated definitions rather than prompt-only prose. -STATIC PASS Custom stages instantiate from the immutable workflow definition. -STATIC PASS Workers, delegation, coordination, checkpoints and approval/intervention events are persistent execution records. -STATIC PASS Pause/resume, cancellation, retry, optional-stage skip, reassignment, tool revocation and checkpoint branching have server routes/state transitions. -STATIC PASS Together integration includes bounded function calls, structured output, preserved reasoning and separate vision routing. -STATIC PASS Chat exposes visible file context, image attachments, preflight, Stop, regenerate, export, prompt saving and conversion to agent/workflow. -STATIC PASS Projects, templates, history, prompts, costs, provider settings, TTS, privacy and conflict resolution are reachable. - -5. BUILD, CACHE AND ADVERSARIAL CHECKS -EXECUTED PASS Two clean builds produced an identical tree SHA-256 recorded in evidence/BUILD_ADVERSARIAL_RESULTS.txt. -EXECUTED PASS A semantic source mutation changed the application asset filename. -EXECUTED PASS A falsified content fingerprint was rejected. -EXECUTED PASS Cross-release immutable-URL reuse with changed bytes was rejected. -STATIC PASS HTML, precache metadata, service-worker cache version, build manifest and SBOM are coordinated by one build. -STATIC PASS Private API/auth/setup responses are excluded before all Cache Storage branches. - -6. SECURITY AND DATA INTEGRITY -STATIC PASS CSP contains no unsafe-eval or inline event-handler allowance. -STATIC PASS Direct access to server/storage/source/tests/scripts/logs/databases/keys/evidence/implementation-prompts is denied. -STATIC PASS Session, CSRF, regeneration, rate limiting, PIN lockout and recent-PIN controls remain mapped. -STATIC PASS Together credentials retain authenticated encryption and secret-free logging/export/error handling. -STATIC PASS ZIP traversal, symlink, size and decompression protections remain mapped. -STATIC PASS Tool arguments reject unknown fields/types; unregistered tools and path escapes are rejected; loops and retries are bounded. -STATIC PASS IndexedDB and queued mutations survive shell-cache updates. - -7. PACKAGING -STATIC PASS Full-source profile excludes node_modules, nested release ZIPs, __pycache__, bytecode and transient build caches. -STATIC PASS Deployment-only profile excludes source, tests, scripts, handovers, evidence, logs, databases, keys and temporary files. -STATIC PASS ZIP member safety, manifest hashes, references, PHP/JavaScript syntax, JSON, CSP, protected storage and secret scans are mandatory clean-extraction gates. - -8. EXTERNAL ACCEPTANCE -EXTERNAL NOT EXECUTED Physical ARM64 Android Chrome and TalkBack. -EXTERNAL NOT EXECUTED Physical Samsung Internet. -EXTERNAL NOT EXECUTED Live LiteSpeed root and nested-subdirectory deployment, rewrites, headers and permissions. -EXTERNAL NOT EXECUTED Live PHP SQLite/cURL/mbstring/ZIP success path in this container because those extensions are absent. -EXTERNAL NOT EXECUTED Live Together key validation, GLM-5.2 inference, function calling, vision and TTS. - -FINAL ASSESSMENT -No known source, contract, migration, browser-emulated, security-static, deterministic-build or packaging blocker remains. External checks are acceptance activities and are not represented as passes. - -9. DOCUMENTATION COMPLETENESS -STATIC PASS README, documentation index, user guide, installation/acceptance guide, administration/operations guide and release notes are present. -STATIC PASS Documentation distinguishes deployment, full-source and documented-bundle profiles. -STATIC PASS Upgrade and rollback guidance preserves storage, IndexedDB and queued mutations. -STATIC PASS External live-host, physical-device and provider acceptance remains explicitly unexecuted. - diff --git a/app/icons/apple-touch-icon-180.png b/icons/apple-touch-icon-180.png similarity index 100% rename from app/icons/apple-touch-icon-180.png rename to icons/apple-touch-icon-180.png diff --git a/app/icons/favicon-48.png b/icons/favicon-48.png similarity index 100% rename from app/icons/favicon-48.png rename to icons/favicon-48.png diff --git a/app/icons/icon-192.png b/icons/icon-192.png similarity index 100% rename from app/icons/icon-192.png rename to icons/icon-192.png diff --git a/app/icons/icon-512.png b/icons/icon-512.png similarity index 100% rename from app/icons/icon-512.png rename to icons/icon-512.png diff --git a/app/icons/maskable-512.png b/icons/maskable-512.png similarity index 100% rename from app/icons/maskable-512.png rename to icons/maskable-512.png diff --git a/app/index.html b/index.html similarity index 100% rename from app/index.html rename to index.html diff --git a/app/index.php b/index.php similarity index 100% rename from app/index.php rename to index.php diff --git a/app/manifest.webmanifest b/manifest.webmanifest similarity index 100% rename from app/manifest.webmanifest rename to manifest.webmanifest diff --git a/app/offline.html b/offline.html similarity index 100% rename from app/offline.html rename to offline.html diff --git a/app/precache-manifest.json b/precache-manifest.json similarity index 100% rename from app/precache-manifest.json rename to precache-manifest.json diff --git a/app/sbom.cdx.json b/sbom.cdx.json similarity index 97% rename from app/sbom.cdx.json rename to sbom.cdx.json index 11fe1a3..7dbc1d0 100644 --- a/app/sbom.cdx.json +++ b/sbom.cdx.json @@ -1,10 +1,10 @@ { "bomFormat": "CycloneDX", "specVersion": "1.5", - "serialNumber": "urn:uuid:b28bc7c4-0ed5-4624-8280-d96a5557e0cd", + "serialNumber": "urn:uuid:1cfe87b5-295e-4657-bdb0-d9cb74dea671", "version": 1, "metadata": { - "timestamp": "2026-07-22T13:05:37Z", + "timestamp": "2026-07-22T13:33:35Z", "component": { "type": "application", "name": "GLMChat", @@ -13,11 +13,11 @@ "properties": [ { "name": "glmchat.release_profile", - "value": "deployment-only" + "value": "server-direct-deploy" }, { "name": "glmchat.file_inventory_scope", - "value": "all app files except self-referential SBOM, deployment manifest and timestamped CHANGES report" + "value": "all server-direct-deploy files except self-referential SBOM, deployment manifest and timestamped CHANGES reports" }, { "name": "glmchat.production_acceptance", @@ -60,6 +60,23 @@ } ] }, + { + "type": "file", + "name": "THIRD_PARTY_NOTICES_22072026125600.txt", + "version": "2.2.1", + "hashes": [ + { + "alg": "SHA-256", + "content": "b246d42f66d4020d6371f52080557dacd6fbd9ae08c9940a3074c0b71b535a04" + } + ], + "properties": [ + { + "name": "glmchat.deployment_path", + "value": "THIRD_PARTY_NOTICES_22072026125600.txt" + } + ] + }, { "type": "file", "name": "VERSION", diff --git a/app/server/.htaccess b/server/.htaccess similarity index 100% rename from app/server/.htaccess rename to server/.htaccess diff --git a/app/server/bootstrap.php b/server/bootstrap.php similarity index 100% rename from app/server/bootstrap.php rename to server/bootstrap.php diff --git a/app/server/config.php b/server/config.php similarity index 100% rename from app/server/config.php rename to server/config.php diff --git a/app/server/index.php b/server/index.php similarity index 100% rename from app/server/index.php rename to server/index.php diff --git a/app/server/lib/AgenticDefinition.php b/server/lib/AgenticDefinition.php similarity index 100% rename from app/server/lib/AgenticDefinition.php rename to server/lib/AgenticDefinition.php diff --git a/app/server/lib/Api.php b/server/lib/Api.php similarity index 100% rename from app/server/lib/Api.php rename to server/lib/Api.php diff --git a/app/server/lib/Auth.php b/server/lib/Auth.php similarity index 100% rename from app/server/lib/Auth.php rename to server/lib/Auth.php diff --git a/app/server/lib/ContextBudget.php b/server/lib/ContextBudget.php similarity index 100% rename from app/server/lib/ContextBudget.php rename to server/lib/ContextBudget.php diff --git a/app/server/lib/Cost.php b/server/lib/Cost.php similarity index 100% rename from app/server/lib/Cost.php rename to server/lib/Cost.php diff --git a/app/server/lib/Crypto.php b/server/lib/Crypto.php similarity index 100% rename from app/server/lib/Crypto.php rename to server/lib/Crypto.php diff --git a/app/server/lib/DataManagement.php b/server/lib/DataManagement.php similarity index 100% rename from app/server/lib/DataManagement.php rename to server/lib/DataManagement.php diff --git a/app/server/lib/Database.php b/server/lib/Database.php similarity index 100% rename from app/server/lib/Database.php rename to server/lib/Database.php diff --git a/app/server/lib/Environment.php b/server/lib/Environment.php similarity index 100% rename from app/server/lib/Environment.php rename to server/lib/Environment.php diff --git a/app/server/lib/Errors.php b/server/lib/Errors.php similarity index 100% rename from app/server/lib/Errors.php rename to server/lib/Errors.php diff --git a/app/server/lib/Http.php b/server/lib/Http.php similarity index 100% rename from app/server/lib/Http.php rename to server/lib/Http.php diff --git a/app/server/lib/Json.php b/server/lib/Json.php similarity index 100% rename from app/server/lib/Json.php rename to server/lib/Json.php diff --git a/app/server/lib/Logger.php b/server/lib/Logger.php similarity index 100% rename from app/server/lib/Logger.php rename to server/lib/Logger.php diff --git a/app/server/lib/MessageSequence.php b/server/lib/MessageSequence.php similarity index 100% rename from app/server/lib/MessageSequence.php rename to server/lib/MessageSequence.php diff --git a/app/server/lib/Migrations.php b/server/lib/Migrations.php similarity index 100% rename from app/server/lib/Migrations.php rename to server/lib/Migrations.php diff --git a/app/server/lib/Projects.php b/server/lib/Projects.php similarity index 100% rename from app/server/lib/Projects.php rename to server/lib/Projects.php diff --git a/app/server/lib/Prompts.php b/server/lib/Prompts.php similarity index 100% rename from app/server/lib/Prompts.php rename to server/lib/Prompts.php diff --git a/app/server/lib/RateLimiter.php b/server/lib/RateLimiter.php similarity index 100% rename from app/server/lib/RateLimiter.php rename to server/lib/RateLimiter.php diff --git a/app/server/lib/Sse.php b/server/lib/Sse.php similarity index 100% rename from app/server/lib/Sse.php rename to server/lib/Sse.php diff --git a/app/server/lib/Sync.php b/server/lib/Sync.php similarity index 100% rename from app/server/lib/Sync.php rename to server/lib/Sync.php diff --git a/app/server/lib/TextFile.php b/server/lib/TextFile.php similarity index 100% rename from app/server/lib/TextFile.php rename to server/lib/TextFile.php diff --git a/app/server/lib/Together.php b/server/lib/Together.php similarity index 100% rename from app/server/lib/Together.php rename to server/lib/Together.php diff --git a/app/server/lib/ToolExecutor.php b/server/lib/ToolExecutor.php similarity index 100% rename from app/server/lib/ToolExecutor.php rename to server/lib/ToolExecutor.php diff --git a/app/server/lib/ToolRegistry.php b/server/lib/ToolRegistry.php similarity index 100% rename from app/server/lib/ToolRegistry.php rename to server/lib/ToolRegistry.php diff --git a/app/server/lib/Validator.php b/server/lib/Validator.php similarity index 100% rename from app/server/lib/Validator.php rename to server/lib/Validator.php diff --git a/app/server/lib/WorkflowEngine.php b/server/lib/WorkflowEngine.php similarity index 100% rename from app/server/lib/WorkflowEngine.php rename to server/lib/WorkflowEngine.php diff --git a/app/server/lib/ZipGuard.php b/server/lib/ZipGuard.php similarity index 100% rename from app/server/lib/ZipGuard.php rename to server/lib/ZipGuard.php diff --git a/app/server/migrations/001_initial.sql b/server/migrations/001_initial.sql similarity index 100% rename from app/server/migrations/001_initial.sql rename to server/migrations/001_initial.sql diff --git a/app/server/migrations/002_indexes.sql b/server/migrations/002_indexes.sql similarity index 100% rename from app/server/migrations/002_indexes.sql rename to server/migrations/002_indexes.sql diff --git a/app/server/migrations/003_seed.sql b/server/migrations/003_seed.sql similarity index 100% rename from app/server/migrations/003_seed.sql rename to server/migrations/003_seed.sql diff --git a/app/server/migrations/004_message_sequence.sql b/server/migrations/004_message_sequence.sql similarity index 100% rename from app/server/migrations/004_message_sequence.sql rename to server/migrations/004_message_sequence.sql diff --git a/app/server/migrations/005_workflow_recovery_and_cost.sql b/server/migrations/005_workflow_recovery_and_cost.sql similarity index 100% rename from app/server/migrations/005_workflow_recovery_and_cost.sql rename to server/migrations/005_workflow_recovery_and_cost.sql diff --git a/app/server/migrations/006_v2_0_1_settings.sql b/server/migrations/006_v2_0_1_settings.sql similarity index 100% rename from app/server/migrations/006_v2_0_1_settings.sql rename to server/migrations/006_v2_0_1_settings.sql diff --git a/app/server/migrations/007_execution_integrity.sql b/server/migrations/007_execution_integrity.sql similarity index 100% rename from app/server/migrations/007_execution_integrity.sql rename to server/migrations/007_execution_integrity.sql diff --git a/app/server/migrations/008_worker_leases.sql b/server/migrations/008_worker_leases.sql similarity index 100% rename from app/server/migrations/008_worker_leases.sql rename to server/migrations/008_worker_leases.sql diff --git a/app/server/migrations/009_offline_sync.sql b/server/migrations/009_offline_sync.sql similarity index 100% rename from app/server/migrations/009_offline_sync.sql rename to server/migrations/009_offline_sync.sql diff --git a/app/server/migrations/010_data_controls.sql b/server/migrations/010_data_controls.sql similarity index 100% rename from app/server/migrations/010_data_controls.sql rename to server/migrations/010_data_controls.sql diff --git a/app/server/migrations/011_agentic_automation.sql b/server/migrations/011_agentic_automation.sql similarity index 100% rename from app/server/migrations/011_agentic_automation.sql rename to server/migrations/011_agentic_automation.sql diff --git a/app/server/migrations/012_project_templates_and_branches.sql b/server/migrations/012_project_templates_and_branches.sql similarity index 100% rename from app/server/migrations/012_project_templates_and_branches.sql rename to server/migrations/012_project_templates_and_branches.sql diff --git a/app/server/migrations/013_release_hardening.sql b/server/migrations/013_release_hardening.sql similarity index 100% rename from app/server/migrations/013_release_hardening.sql rename to server/migrations/013_release_hardening.sql diff --git a/app/server/routes/auth.php b/server/routes/auth.php similarity index 100% rename from app/server/routes/auth.php rename to server/routes/auth.php diff --git a/app/server/routes/automation.php b/server/routes/automation.php similarity index 100% rename from app/server/routes/automation.php rename to server/routes/automation.php diff --git a/app/server/routes/chat.php b/server/routes/chat.php similarity index 100% rename from app/server/routes/chat.php rename to server/routes/chat.php diff --git a/app/server/routes/conversations.php b/server/routes/conversations.php similarity index 100% rename from app/server/routes/conversations.php rename to server/routes/conversations.php diff --git a/app/server/routes/cost.php b/server/routes/cost.php similarity index 100% rename from app/server/routes/cost.php rename to server/routes/cost.php diff --git a/app/server/routes/data.php b/server/routes/data.php similarity index 100% rename from app/server/routes/data.php rename to server/routes/data.php diff --git a/app/server/routes/projects.php b/server/routes/projects.php similarity index 100% rename from app/server/routes/projects.php rename to server/routes/projects.php diff --git a/app/server/routes/prompts.php b/server/routes/prompts.php similarity index 100% rename from app/server/routes/prompts.php rename to server/routes/prompts.php diff --git a/app/server/routes/settings.php b/server/routes/settings.php similarity index 100% rename from app/server/routes/settings.php rename to server/routes/settings.php diff --git a/app/server/routes/sync.php b/server/routes/sync.php similarity index 100% rename from app/server/routes/sync.php rename to server/routes/sync.php diff --git a/app/server/routes/templates.php b/server/routes/templates.php similarity index 100% rename from app/server/routes/templates.php rename to server/routes/templates.php diff --git a/app/server/routes/tts.php b/server/routes/tts.php similarity index 100% rename from app/server/routes/tts.php rename to server/routes/tts.php diff --git a/app/server/routes/workflow.php b/server/routes/workflow.php similarity index 100% rename from app/server/routes/workflow.php rename to server/routes/workflow.php diff --git a/app/storage/.htaccess b/storage/.htaccess similarity index 100% rename from app/storage/.htaccess rename to storage/.htaccess diff --git a/app/sw.js b/sw.js similarity index 100% rename from app/sw.js rename to sw.js # TASK VERIFICATION # Requested task: Create a corrected one-click server-extraction ZIP with the application at the archive root and non-deployment documentation excluded. # Scope matched: Yes # Build: Not run # Type-check: Not run # Lint: Not run # Automated tests: Not run # Targeted checks: Passed # PWA checks: Passed # Feature loss detected: No # Data loss detected: No # Structural changes detected: Yes # Regressions detected: No # Unrelated changes reverted: None # Checks not run: Source build, type-check, lint and original automated suites were not run because the deployment bundle does not contain the source repository, package files or test suites. Live LiteSpeed, Together provider and physical-device checks were not available in this environment. # Validation notes: The app/ wrapper was intentionally removed from the deployment archive; bundle documentation and the bundle README were excluded; the existing third-party notice was retained at the server root; runtime application files were preserved byte-for-byte except the deployment manifest and SBOM, which were regenerated for the direct-deploy inventory. All 44 PHP files and 7 JavaScript files passed syntax checks. Four JSON files parsed. All 13 migrations applied to a fresh SQLite database, the latest migration repeated successfully, SQLite integrity was OK and no foreign-key violations were detected. Archive-level checks are recorded in the accompanying final verification report.