Docs pass: refresh statuses, add resume checklist, poll and log decisions
This commit is contained in:
@@ -71,6 +71,15 @@ See [CURRENT.md](CURRENT.md) and [TODO.md](TODO.md) for the live list. The main
|
|||||||
5. MCP event delivery decision.
|
5. MCP event delivery decision.
|
||||||
6. Collector account with read-only voice membership.
|
6. Collector account with read-only voice membership.
|
||||||
|
|
||||||
|
## Resume checklist
|
||||||
|
|
||||||
|
1. Read [CURRENT.md](CURRENT.md) and [TODO.md](TODO.md).
|
||||||
|
2. Check the git remote. Work on `veskslop-t` while the original repo is broken.
|
||||||
|
3. Run `pnpm install` and `pnpm testTypes` at the repo root. Run `pnpm build` to compile.
|
||||||
|
4. In `poc/`: run `pnpm check`, `pnpm test:comm`, and `pnpm test:cache`.
|
||||||
|
5. Run the mock end-to-end: `pnpm control:mock`, `pnpm control:bridge`, `pnpm test:trigger`.
|
||||||
|
6. Follow [docs/testing.md](docs/testing.md) for the live client test.
|
||||||
|
|
||||||
## Dev commands
|
## Dev commands
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
|
|||||||
+1
-1
@@ -11,7 +11,7 @@ persistent logging. Voice, audio, and video stay deferred.
|
|||||||
|
|
||||||
## In progress
|
## In progress
|
||||||
|
|
||||||
- None. The latest text milestone is complete and verified with the mock core.
|
- None. The documentation pass is complete. The project is ready to resume.
|
||||||
|
|
||||||
## Done
|
## Done
|
||||||
|
|
||||||
|
|||||||
+3
-1
@@ -18,6 +18,8 @@ This file lists the project documents.
|
|||||||
|
|
||||||
| File | Scope |
|
| File | Scope |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| [../AGENTS.md](../AGENTS.md) | Agent entry point and guardrails |
|
| [../AGENTS.md](../AGENTS.md) | Agent entry point, guardrails, resume checklist |
|
||||||
|
| [../CURRENT.md](../CURRENT.md) | Live session state |
|
||||||
|
| [../TODO.md](../TODO.md) | Ordered backlog |
|
||||||
| [../poc/README.md](../poc/README.md) | Spike and daemon run commands |
|
| [../poc/README.md](../poc/README.md) | Spike and daemon run commands |
|
||||||
| [../README.md](../README.md) | Project introduction |
|
| [../README.md](../README.md) | Project introduction |
|
||||||
|
|||||||
@@ -55,6 +55,8 @@ when the action list changes.
|
|||||||
| Pacing | `poc/src/pacing.ts` | Implemented |
|
| Pacing | `poc/src/pacing.ts` | Implemented |
|
||||||
| Trigger log and trust list | `poc/src/communication.ts`, `poc/src/puppet.ts` | Implemented and verified live |
|
| Trigger log and trust list | `poc/src/communication.ts`, `poc/src/puppet.ts` | Implemented and verified live |
|
||||||
| Context cache and response policy | `poc/src/message-cache.ts`, `poc/src/puppet.ts` | Implemented and verified with the mock |
|
| Context cache and response policy | `poc/src/message-cache.ts`, `poc/src/puppet.ts` | Implemented and verified with the mock |
|
||||||
|
| Chat commands and polls | `poc/src/puppet.ts`, `poc/src/communication.ts` | Implemented and verified with the mock |
|
||||||
|
| Persistent action log | `poc/src/action-log.ts` | Implemented |
|
||||||
| Voice, audio, video | Not started | Not started |
|
| Voice, audio, video | Not started | Not started |
|
||||||
|
|
||||||
## Data flow
|
## Data flow
|
||||||
|
|||||||
+4
-7
@@ -53,11 +53,8 @@ can occur.
|
|||||||
|
|
||||||
| Part | Status |
|
| Part | Status |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| QR login and token file | Implemented and verified |
|
| QR login and token file | Implemented and verified live |
|
||||||
| Pinned profile directory | Implemented and verified. Currently out of the tree after the CDP pivot. |
|
| Pinned profile directory | Implemented and verified live |
|
||||||
| Token seeding | Implemented and verified. Currently out of the tree after the CDP pivot. |
|
| Token seeding | Implemented and verified live |
|
||||||
| Headless first-launch skip | Implemented and verified. Currently out of the tree after the CDP pivot. |
|
| Headless first-launch skip | Implemented and verified live |
|
||||||
| Devtools patch | Upstream Vesktop code. Keep it. |
|
| Devtools patch | Upstream Vesktop code. Keep it. |
|
||||||
|
|
||||||
The three out-of-tree parts are small. Add them again with the core bridge, at the same time as the
|
|
||||||
bridge hooks.
|
|
||||||
|
|||||||
+19
-1
@@ -30,7 +30,8 @@ the validated core bridge.
|
|||||||
**Reason.** CDP needs no Vesktop patch. However, CDP evaluates raw code in the page. It bypasses the
|
**Reason.** CDP needs no Vesktop patch. However, CDP evaluates raw code in the page. It bypasses the
|
||||||
core-side validation and rate limits. The project keeps the probe as a development tool.
|
core-side validation and rate limits. The project keeps the probe as a development tool.
|
||||||
|
|
||||||
**Status.** The daemon uses CDP at this time. The core-bridge transport is pending.
|
**Status.** The primary transport is the validated core bridge. The CDP client and the probe stay in
|
||||||
|
`poc/` as development tools.
|
||||||
|
|
||||||
## ADR-4: No bespoke client
|
## ADR-4: No bespoke client
|
||||||
|
|
||||||
@@ -79,3 +80,20 @@ more.
|
|||||||
**Decision.** The only permitted live-send target is user zzib (`177117296140091393`).
|
**Decision.** The only permitted live-send target is user zzib (`177117296140091393`).
|
||||||
|
|
||||||
**Reason.** Tests must not send messages to other users. DMs to zzib are safe and permitted.
|
**Reason.** Tests must not send messages to other users. DMs to zzib are safe and permitted.
|
||||||
|
|
||||||
|
## ADR-10: Poll command
|
||||||
|
|
||||||
|
**Decision.** The poll command accepts `|` or `//` as separators, an optional quoted question, and
|
||||||
|
many reactions per user. A bare command shows help.
|
||||||
|
|
||||||
|
**Reason.** The pipe is hard to type on some keyboards. `//` is safe in Discord markdown when it has
|
||||||
|
whitespace on both sides, so URLs stay in one piece. Many selections match how people use polls in
|
||||||
|
group chats. A bare command gives the user the syntax without a failed poll.
|
||||||
|
|
||||||
|
## ADR-11: Persistent action log
|
||||||
|
|
||||||
|
**Decision.** Write triggers, continuations, commands, replies, and errors to a rotating JSONL file.
|
||||||
|
Redact token-shaped strings before the write.
|
||||||
|
|
||||||
|
**Reason.** The in-memory trigger log resets at restart. The action log gives a durable audit trail
|
||||||
|
without storing raw credentials.
|
||||||
|
|||||||
+13
-4
@@ -5,14 +5,17 @@ This document describes the test setup, the run commands, and the known gaps.
|
|||||||
## Unit tests
|
## Unit tests
|
||||||
|
|
||||||
The pure daemon logic has unit tests. The tests cover the ring buffers, the mention helpers, the
|
The pure daemon logic has unit tests. The tests cover the ring buffers, the mention helpers, the
|
||||||
command parser, the trust check, and the pacing range.
|
command parser, the poll parser, the trust helpers, the context assembly, the redaction, and the
|
||||||
|
pacing range. The cache tests cover merge, dedupe, trimming, and eviction.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
cd poc
|
cd poc
|
||||||
pnpm test:comm
|
pnpm test:comm
|
||||||
|
pnpm test:cache
|
||||||
```
|
```
|
||||||
|
|
||||||
The file is `poc/src/test-communication.ts`. The tests do not need Discord or Vesktop.
|
The files are `poc/src/test-communication.ts` and `poc/src/test-cache.ts`. The tests do not need
|
||||||
|
Discord or Vesktop.
|
||||||
|
|
||||||
## Type checks
|
## Type checks
|
||||||
|
|
||||||
@@ -49,6 +52,10 @@ VESKSLOP_SOCKET=/tmp/vesktop-puppet-mock.sock TEST_TRIGGER_CONTENT="whitelist li
|
|||||||
Expected result: the daemon log shows one trusted entry with the parsed command. The mock log shows
|
Expected result: the daemon log shows one trusted entry with the parsed command. The mock log shows
|
||||||
the reply (`message.send`). The reply wait is inside the 500 to 2800 ms window.
|
the reply (`message.send`). The reply wait is inside the 500 to 2800 ms window.
|
||||||
|
|
||||||
|
The mock also covers tiers, continuation, polls, reactions, and the action log. Set config values
|
||||||
|
with `set_puppet_config` before a test. Inject a reaction with
|
||||||
|
`TEST_TRIGGER_REACTION=1 TEST_REACTION_MESSAGE_ID=msg-1 TEST_REACTION_EMOJI="1️⃣" pnpm test:trigger`.
|
||||||
|
|
||||||
## CDP probe
|
## CDP probe
|
||||||
|
|
||||||
The probe checks the CDP fallback transport. Start the client with
|
The probe checks the CDP fallback transport. Start the client with
|
||||||
@@ -89,7 +96,7 @@ Notes:
|
|||||||
|
|
||||||
- `VENCORD_USER_DATA_DIR` pins the Electron profile. The profile holds the client session.
|
- `VENCORD_USER_DATA_DIR` pins the Electron profile. The profile holds the client session.
|
||||||
- Write `{"firstLaunch": false}` to `<DATA_DIR>/state.json` before the first start. This step skips
|
- Write `{"firstLaunch": false}` to `<DATA_DIR>/state.json` before the first start. This step skips
|
||||||
the first-launch window. The `VESKSLOP_HEADLESS=1` flag does the same job when it is in the tree.
|
the first-launch window. The `VESKSLOP_HEADLESS=1` flag does the same job.
|
||||||
- The container needs `libasound.so.2` for Electron. Extract the library locally when the system
|
- The container needs `libasound.so.2` for Electron. Extract the library locally when the system
|
||||||
package is not available.
|
package is not available.
|
||||||
|
|
||||||
@@ -120,5 +127,7 @@ The CDP transport was verified earlier with the same checks.
|
|||||||
| Gap | Effect |
|
| Gap | Effect |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| Live trigger tests need an incoming message. | Use the mock core, or send from zzib's account. |
|
| Live trigger tests need an incoming message. | Use the mock core, or send from zzib's account. |
|
||||||
|
| `reaction.add` and the message ID return are mock-verified only. | Confirm Discord's internal `addReaction` lookup on the first live run. |
|
||||||
|
| Polls and other chat commands are mock-verified only. | Run them on the live client. |
|
||||||
| `message.read` is cache-only. | A channel that the client never opened returns zero messages. |
|
| `message.read` is cache-only. | A channel that the client never opened returns zero messages. |
|
||||||
| Voice, audio, and video are not started. | No test coverage. |
|
| Voice, audio, and video are not started. | No coverage. |
|
||||||
|
|||||||
+6
-1
@@ -20,6 +20,7 @@ pnpm install
|
|||||||
| `pnpm test:trigger` | Inject a trigger event into the mock core. |
|
| `pnpm test:trigger` | Inject a trigger event into the mock core. |
|
||||||
| `pnpm poc:dm` | Send one test DM to zzib. |
|
| `pnpm poc:dm` | Send one test DM to zzib. |
|
||||||
| `pnpm test:comm` | Run the unit tests for the pure logic. |
|
| `pnpm test:comm` | Run the unit tests for the pure logic. |
|
||||||
|
| `pnpm test:cache` | Run the unit tests for the message cache. |
|
||||||
| `pnpm cdp:probe` | Check CDP access and event delivery. |
|
| `pnpm cdp:probe` | Check CDP access and event delivery. |
|
||||||
| `pnpm cdp:dispatch` | Run one CDP expression in the client. |
|
| `pnpm cdp:dispatch` | Run one CDP expression in the client. |
|
||||||
| `pnpm check` | Type check the daemon code. |
|
| `pnpm check` | Type check the daemon code. |
|
||||||
@@ -49,9 +50,13 @@ The only permitted live-send target is user zzib. See
|
|||||||
- QR login works end-to-end. The token came from a phone scan.
|
- QR login works end-to-end. The token came from a phone scan.
|
||||||
- The core bridge works live. `get_state` returned the real account and 7 guilds. `send_dm` reached
|
- The core bridge works live. `get_state` returned the real account and 7 guilds. `send_dm` reached
|
||||||
zzib. A synthetic owner message reached the daemon log with the command parsed.
|
zzib. A synthetic owner message reached the daemon log with the command parsed.
|
||||||
- The mock path works. The daemon handles state, sends, commands, and the two log buckets.
|
- The mock path works. The daemon handles state, sends, commands, tiers, continuation, polls,
|
||||||
|
context, and the action log.
|
||||||
- Pacing stayed inside the 500 to 2800 ms window.
|
- Pacing stayed inside the 500 to 2800 ms window.
|
||||||
|
|
||||||
|
Open live item: `reaction.add` and the message ID return are mock-verified only. The first live run
|
||||||
|
must confirm Discord's internal `addReaction` lookup.
|
||||||
|
|
||||||
## Findings
|
## Findings
|
||||||
|
|
||||||
- Official `discord.js` is bot-only. It fails at login with a user token. The popular selfbot fork
|
- Official `discord.js` is bot-only. It fails at login with a user token. The popular selfbot fork
|
||||||
|
|||||||
Reference in New Issue
Block a user