chore: finalize integrated release baseline

This commit is contained in:
inman committed 2026-09-07 21:24:15 +08:00
1 parent fd39347603
commit d5465e9c0d
36 files changed
+324 -92

No files matched your search

+8 -8
View File
@@ -6,16 +6,16 @@
- Manual and AgentBus tasks share the same 18 machine routes, task-scoped parser mode snapshot, and organization automation rules. AgentBus intake evaluates the bound employee account's route grants rather than an administrator or whichever browser is online.
- The platform exposes one fixed deployment scope, not an organization-management product. Accounts use `admin`, `team_lead`, and `user` roles.
- Passwords must be non-empty but have no application-level length restriction. First login and administrator password reset do not force a subsequent password change; users may still change passwords voluntarily, administrators may reset them, and password changes revoke existing sessions according to the account lifecycle contract.
- Administrators always hold all 18 manual business routes. Team leads and ordinary users start with no task grants, require explicit administrator allowlists, and may use normal task APIs only for their own manual tasks.
- A known ungranted route or a non-unique/unresolved route for a non-administrator fails before parsing, plugin dispatch, or ERP execution. Authorization is rechecked for supplemental input, attachments, confirmation, automatic confirmation, and browser claim.
- Team leads may read all manual account work only through the platform-operations dashboard. The dashboard is aggregate-first across task, person, original input, final output, time, task type, and completion state, with business-facing drill-through. Its five summary cards are display-only; the explicit task-result filter defaults to all results. Internal attention or waiting-for-input states remain unchanged in task storage but are presented and filtered as “进行中”; the leadership view exposes no separate “待跟进” category. It is not an audit log and never renders technical payloads, internal identifiers, machine-shaped historical input, or technical failure text; this visibility does not grant cross-user task mutation, artifacts, SSE, global settings, audit administration, or AgentBus access.
- Administrators are management-plane-only identities. They manage accounts, roles, passwords, sessions, employee route grants, AgentBus channels, parser routing, automation settings, and audit, but hold no business routes and cannot create, inspect, mutate, stream, claim, reconcile, archive, restore, force-delete, or submit results for tasks.
- Team leads and ordinary users start with no task grants, require explicit administrator allowlists, and may use normal task APIs only for manual or AgentBus tasks immutably assigned to themselves. A known ungranted route or a non-unique/unresolved employee route fails before parsing, plugin dispatch, or ERP execution. Authorization is rechecked for supplemental input, attachments, confirmation, automatic confirmation, and browser claim.
- Team leads may read all durably assigned manual and AgentBus work only through the platform-operations dashboard; administrators cannot access it. The dashboard uses immutable `assigned_user_id` as the employee dimension, excludes historical AgentBus rows without a reliable assignee, and is aggregate-first across task, person, original input, final output, time, task type, and completion state with business-facing drill-through. Its five summary cards are display-only; the explicit task-result filter defaults to all results. Internal attention or waiting-for-input states remain unchanged in task storage but are presented and filtered as “进行中”; the leadership view exposes no separate “待跟进” category. It is not an audit log and never renders technical payloads, internal identifiers, machine-shaped historical input, or technical failure text; this visibility does not grant cross-user task mutation, artifacts, SSE, global settings, audit administration, or AgentBus access.
- Separately, every active team lead with an enabled owned AgentBus channel and a usable current-owner route automatically receives an organization-wide task-summary projection for future manual and AgentBus tasks assigned to other non-admin employees. Only stable completed, failed, cancelled, uncertain, and uncertain-then-resolved outcomes qualify. The route and summary payload are encrypted, history is not backfilled, role/channel/routing invalidation cancels unsent rows, employee replies retain priority, and the message never includes raw instructions, attachments, customer/traveller data, URLs, or technical errors. This notification grants no task mutation, executable event, confirmation, browser, reconciliation, or ERP authority.
- Creator and input-turn attribution are durable, business inputs remain encrypted at rest, and denial audit excludes plaintext. Archive/restore is the reversible routine removal path. Explicit force delete is a separate irreversible operation that may physically remove an authorized task in any lifecycle state, retains only a minimal non-content deletion audit marker, and cannot undo ERP effects already written or retract a task summary already accepted by AgentBus/WeChat.
- Each non-admin employee may carry one case-insensitively unique expected ERP account and one AgentBus channel. New manual and AgentBus tasks persist an immutable assignee; only that account may confirm, claim, reconcile, resume, or submit ERP execution results. Administrators manage and inspect but do not execute another assignee's work.
- A browser is execution-ready only when it is the account's sole fresh worker and the active ERP session matches the expected account. Concurrent fresh workers, identity mismatch, unbound channels, and historical unassigned AgentBus tasks fail closed; stale failover waits 90 seconds. Claim locking, active-execution detection, confirmed FIFO, and queue position are scoped to immutable `assigned_user_id`: the same account stays serialized while different accounts execute independently.
- Administrator-wide task visibility never grants execution routing. Executable SSE history/live events, browser claims, plugin-result ingestion, and force-delete browser cleanup commands are scoped to the authenticated account matching the task assignee, so an administrator page or plugin cannot receive or process an employee's task.
- Creator and input-turn attribution are durable, business inputs remain encrypted at rest, and denial audit excludes plaintext. Archive/restore is the owning employee's reversible routine removal path. Explicit owner force delete is a separate irreversible operation that may physically remove that employee's task in any lifecycle state, retains only a minimal non-content deletion audit marker, and cannot undo ERP effects already written or retract a task summary already accepted by AgentBus/WeChat. Administrators cannot invoke task removal.
- Each non-admin employee may carry one case-insensitively unique expected ERP account and one AgentBus channel. New manual and AgentBus tasks persist an immutable assignee; only that account may confirm, claim, reconcile, resume, or submit ERP execution results. Administrators manage the account and channel configuration but cannot inspect or execute the employee's tasks.
- A browser is execution-ready only when it is the account's sole fresh worker and the active ERP session proves the expected account from exactly one `#Lable_UserName` login node by Unicode/whitespace/case-normalized full equality. Missing, duplicate, blank, substring-only, or unrelated page-text matches fail closed without exposing the observed account. Concurrent fresh workers, unbound channels, and historical unassigned AgentBus tasks also fail closed; stale failover waits 90 seconds. Claim locking, active-execution detection, confirmed FIFO, and queue position are scoped to immutable `assigned_user_id`: the same account stays serialized while different accounts execute independently.
- Administrators are rejected from the task data plane at the database, service, route, and UI boundaries. Executable task reads, SSE history/live events, browser claims, plugin-result ingestion, and force-delete browser cleanup commands require a team-lead/user session matching the task assignee.
- The two passenger-list import routes are Program-only and wait for exactly one `.xls` or `.xlsx` attachment before deterministic normalization.
- Passenger workbooks must contain exactly one complete ERP-semantic header within rows 1–100. The header may be on row 1 or follow metadata, column order is arbitrary, and only the finite approved source/ERP aliases—including `NAME`, `证件号码`, `签发日`, and `身份证`—are mapped. Unknown or unheaded data columns, duplicate semantic fields, multiple candidate headers, and non-passport identity data fail closed; the internal 13-column canonical TSV contract remains unchanged.
- Passenger workbooks must contain exactly one complete ERP-semantic header within rows 1–100. The header may be on row 1 or follow metadata, column order is arbitrary, and only the finite approved aliases for the 12 required source semantics are selected. Identity-card, age, source document-type, hidden/local-formula, unheaded, and other ordinary non-import columns are ignored for row detection and selected-value validation and are never copied into the internal 13-column canonical TSV; canonical `证件类型` remains the implicit constant `护照`. Missing/duplicate required semantics, multiple candidate headers, unsafe selected formulas/results, non-contiguous selected rows, macros, external relationships, hyperlinks, and external formulas fail closed.
- A WeChat attachment card is transport placeholder text, not file content. Only a structured `payload.attachments[]` entry can resume a roster task; missing metadata fails before ingestion and leaves the original task in `awaiting_attachment` instead of creating a new task.
- The trusted internal deployment accepts credential-free HTTPS roster attachment URLs whose host is internal, private/reserved IPv4/IPv6, or localhost. DNS pinning, redirect revalidation, download timeout, byte limits, declared-size checks, and optional SHA-256 verification remain mandatory.
- AgentBus attachment diagnostics may record stage, address count/family, status, byte count, code, outcome, and duration, but never URL, hostname, IP, file name, bytes, message text, or roster values.
+3
View File
@@ -10,4 +10,7 @@
| Program-only | Route must use the deterministic parser and may not fall back to AI | Applies to both passenger-list routes |
| fresh requery | Read-only ERP verification performed after an action | Required except where an action-specific explicit-success credential is accepted |
| no ERP write | Evidence-backed result that the write boundary was not crossed | Must not be inferred from an unknown post-submit failure |
| management plane | Account, channel, parser-routing, automation-setting, and audit administration available to `admin` | Excludes every business-task API, dashboard, browser worker, and task principal |
| task data plane | Business-task creation, reads, inputs, lifecycle mutations, events, browser execution, results, artifacts, and deletion | Available only to `team_lead`/`user`; normal operations require immutable ownership |
| immutable assignee | The durable `assigned_user_id` that owns task execution and employee attribution | Drives owner-only operations, per-account FIFO, and the cross-source team-lead dashboard |
| Promotion Candidate | Task-scoped proposal for durable canonical memory | Accepted only through Integration Gate |