WeKnora deployment source with the reviewed wiki identity, summary and recovery fixes
Anydoc / anydoc parser engine (push) Canceled after 0s
App / Format, vet, test, and build (push) Canceled after 0s
CLI / test (macos-latest / go 1.26) (push) Canceled after 0s
CLI / test (ubuntu-latest / go 1.26) (push) Canceled after 0s
CLI / test (windows-latest / go 1.26) (push) Canceled after 0s
Build and Push Docker Image / build-ui (push) Canceled after 0s
Build and Push Docker Image / build-docreader (push) Canceled after 0s
Build and Push Docker Image / build-sandbox (push) Canceled after 0s
Build and Push Docker Image / build-app (amd64, linux/amd64, ubuntu-latest) (push) Canceled after 0s
Build and Push Docker Image / build-app (arm64, linux/arm64, ubuntu-24.04-arm) (push) Canceled after 0s
DocReader / Python tests and Go client tests (push) Canceled after 0s
Build & Publish (dsh-weknora) / Typecheck, test, pack (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (pinned) (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (latest, advisory) (push) Canceled after 0s
Frontend / Test, type-check, and build (push) Canceled after 0s
Go Lint Cache / warm lint cache (.) (push) Canceled after 0s
Go Lint Cache / warm lint cache (cli) (push) Canceled after 0s
Go Lint Cache / warm lint cache (client) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.10) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.11) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.12) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.13) (push) Canceled after 0s
Build and Push Docker Image / merge (push) Canceled after 0s
Build & Publish (dsh-weknora) / Publish to npm (push) Canceled after 0s
Build & Publish (mcp-server) / Build sdist + wheel (push) Canceled after 0s
Build & Publish (mcp-server) / Publish to PyPI (push) Canceled after 0s
Anydoc / anydoc parser engine (push) Canceled after 0s
App / Format, vet, test, and build (push) Canceled after 0s
CLI / test (macos-latest / go 1.26) (push) Canceled after 0s
CLI / test (ubuntu-latest / go 1.26) (push) Canceled after 0s
CLI / test (windows-latest / go 1.26) (push) Canceled after 0s
Build and Push Docker Image / build-ui (push) Canceled after 0s
Build and Push Docker Image / build-docreader (push) Canceled after 0s
Build and Push Docker Image / build-sandbox (push) Canceled after 0s
Build and Push Docker Image / build-app (amd64, linux/amd64, ubuntu-latest) (push) Canceled after 0s
Build and Push Docker Image / build-app (arm64, linux/arm64, ubuntu-24.04-arm) (push) Canceled after 0s
DocReader / Python tests and Go client tests (push) Canceled after 0s
Build & Publish (dsh-weknora) / Typecheck, test, pack (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (pinned) (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (latest, advisory) (push) Canceled after 0s
Frontend / Test, type-check, and build (push) Canceled after 0s
Go Lint Cache / warm lint cache (.) (push) Canceled after 0s
Go Lint Cache / warm lint cache (cli) (push) Canceled after 0s
Go Lint Cache / warm lint cache (client) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.10) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.11) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.12) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.13) (push) Canceled after 0s
Build and Push Docker Image / merge (push) Canceled after 0s
Build & Publish (dsh-weknora) / Publish to npm (push) Canceled after 0s
Build & Publish (mcp-server) / Build sdist + wheel (push) Canceled after 0s
Build & Publish (mcp-server) / Publish to PyPI (push) Canceled after 0s
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
# Native memory API smoke fixture
|
||||
|
||||
This script verifies the actual deployed HTTP API, workbench job leases/worker,
|
||||
database persistence, memory review and the prompt sent to a deterministic local
|
||||
fake model. It does not benchmark AI quality or invoke any existing model.
|
||||
|
||||
## Automatic disposable workspace
|
||||
|
||||
Use the wrapper to provision and clean up the required fixture:
|
||||
|
||||
```sh
|
||||
node scripts/native_memory_fixture.cjs --run
|
||||
```
|
||||
|
||||
It reads the existing private admin login file at
|
||||
`/Volumes/Extreme SSD/yawan-storage/weknora/acceptance/super-admin-login.json`.
|
||||
Override that path with `MEMORY_SMOKE_ADMIN_AUTH`. The file must have no group or
|
||||
other read permissions. The wrapper creates two uniquely named disposable users
|
||||
and an empty workspace, enables explicit-only memory with vector recall disabled,
|
||||
and gives only the fixture owner a disposable balance. The owner has workspace
|
||||
owner privileges to create the local fake model; the outsider remains an ordinary
|
||||
contributor. Neither user is a system administrator.
|
||||
|
||||
Credentials are written only into mode-0600 files within a mode-0700 run directory.
|
||||
The manifest is credential-free and is saved at each setup stage. The wrapper runs
|
||||
the smoke script, then checks no fixture workbench job remains active and removes
|
||||
only the new workspace, fixture users, auth tokens, balance, model, Agent, memory
|
||||
and workbench rows. It validates both workspace name/business marker and exact
|
||||
user identities before cleanup. A surviving smoke process, unexpected tables or foreign memberships stop
|
||||
cleanup for inspection. Administrator audit entries in the original workspace
|
||||
remain as evidence. There is no database reset, and no real provider is called.
|
||||
|
||||
If interrupted, rerun just the exact fixture cleanup:
|
||||
|
||||
```sh
|
||||
node scripts/native_memory_fixture.cjs --cleanup /absolute/path/memory-smoke-RUN/fixture.json
|
||||
```
|
||||
|
||||
The wrapper defaults to Docker context `colima-yawan`, container
|
||||
`WeKnora-postgres`, database `yawan_native_acceptance_20260915` and source tenant
|
||||
`10059`. This database is production despite its historical name. Connection
|
||||
overrides are `MEMORY_SMOKE_DOCKER`, `MEMORY_SMOKE_DOCKER_CONTEXT`,
|
||||
`MEMORY_SMOKE_DB_CONTAINER`, `MEMORY_SMOKE_DB_NAME` and
|
||||
`MEMORY_SMOKE_SOURCE_TENANT`. Cleanup requires the same recorded connection.
|
||||
`MEMORY_SMOKE_DIRECTORY` changes the parent directory for fixture reports.
|
||||
The wrapper is intended to be run after deployment by the release operator.
|
||||
|
||||
The wrapper also seeds one synthetic accepted legacy history row through a
|
||||
private child-process channel, after checking the new Agent's exact owner,
|
||||
workspace, name and memory setting. This is a new fixture record, never a real
|
||||
user's imported history. After migration 217, the actual API must require owner
|
||||
scope consent, preserve the original text/source, create exactly one linked native
|
||||
preference, include it in the next real generation request to the local stub, and
|
||||
reject access from the other user. Deleting that native preference then repeating
|
||||
confirmation must not restore it. The dedicated workspace cleanup removes this
|
||||
synthetic history too. Provenance matching during migration is tested separately
|
||||
with an isolated PostgreSQL database. Standalone existing-fixture mode does not
|
||||
seed or claim coverage of legacy reconfirmation.
|
||||
|
||||
## Existing fixture mode
|
||||
|
||||
Requirements:
|
||||
|
||||
- Node 20+ and the local backend origin after deployment.
|
||||
- A dedicated empty workspace whose name starts with `memory-smoke-`, with memory enabled.
|
||||
- Two disposable users whose usernames start with `memory-smoke-`. The owner must be able to create a model, Agent, flow and content task. The outsider must not be a system administrator. The outsider may share the fixture workspace or use another empty fixture workspace.
|
||||
- Two local mode-0600 JSON auth files with `{"token":"..."}`. Optional `tenantID` selects the active workspace through `X-Tenant-ID`. Do not put tokens in commands, source control or the result report.
|
||||
|
||||
```sh
|
||||
MEMORY_SMOKE_OWNER_AUTH=/absolute/path/owner-auth.json \
|
||||
MEMORY_SMOKE_OUTSIDER_AUTH=/absolute/path/outsider-auth.json \
|
||||
MEMORY_SMOKE_MANIFEST=/absolute/path/memory-smoke-result.json \
|
||||
node scripts/native_memory_api_smoke.cjs --run
|
||||
```
|
||||
|
||||
The default origin is `http://127.0.0.1:18080/api/v1`; override with
|
||||
`MEMORY_SMOKE_BASE`. Public hostnames are refused. The model stub listens on a
|
||||
random local host port so the backend container can reach it through
|
||||
`host.docker.internal`. Set `MEMORY_SMOKE_MODEL_HOST=127.0.0.1` for a backend
|
||||
running directly on the host. The stub receives only fixture content.
|
||||
|
||||
The script checks 135-minute task creation, 90-minute update, persistence, and
|
||||
rejection of negative/fractional/over-1440 durations without mutating saved state.
|
||||
It also checks that draft content does not become memory, adopting human
|
||||
advice creates one pending candidate, repeated adoption deduplicates it,
|
||||
another account cannot approve or delete it, explicit review writes an active
|
||||
memory, the next generation actually recalls that preference, and skip/source
|
||||
deletion invalidate only pending candidates. It also runs quality review and
|
||||
exact ordered composition, changes the duration to 225 minutes, verifies the
|
||||
original prose is retained while old review/composition results are cleared,
|
||||
and checks that composition is blocked until renewed confirmation and review.
|
||||
Reacceptance restores invalidated pending feedback without resetting explicitly
|
||||
approved memories. It refuses nonempty owner memory
|
||||
or content fixtures and does not alter workspace settings.
|
||||
|
||||
Cleanup uses exact created resource/memory IDs through APIs. It waits for every
|
||||
recorded job to be terminal first. On job timeout it deliberately retains the
|
||||
fixture and reports the IDs instead of deleting beneath a running worker. The
|
||||
manifest is written after every created object, contains no token, and supports
|
||||
manual recovery. API deletion leaves workbench review/history records and
|
||||
memory tombstones; the companion `.cleanup.sql` removes only this run's exact
|
||||
candidate/resource IDs within its tenant/owner scope. It refuses active jobs.
|
||||
Run that SQL against the matching database after reviewing the manifest. Audit
|
||||
and usage logs and the disposable accounts/workspace remain as test evidence;
|
||||
remove the dedicated fixture identities through the normal administration
|
||||
workflow when the evidence is no longer needed. No broad database reset is used.
|
||||
|
||||
This fixture tests native content feedback and recall. Chat extraction retry,
|
||||
timestamp pagination, per-session checkpoints and pending conflict rollback
|
||||
are covered by the offline Go integration suites; this script does not claim
|
||||
to simulate those asynchronous chat failures.
|
||||
Reference in New Issue
Block a user