docs: record roster integration and restart
This commit is contained in:
1 parent
a1b2d2f8a4
commit
c5e002a73c
6 files changed
+70
-106
No files matched your search
@@ -17,6 +17,8 @@ This file is the integrated default-branch snapshot. Feature tasks record progre
|
||||
- Commit `63b387f` integrating feature commit `6e212b3` from task `20260902-dashboard-nice-scale-d8c31a` for independent dynamic ranking scales with readable headroom above each leading bar.
|
||||
- Commit `8dddd21` integrating feature commit `1ee89da` from task `20260902-dashboard-mobile-share-4e91c7` for the focused leadership shell, responsive phone/tablet layout, unified dashboard cards, and the business-facing merge of follow-up work into in-progress.
|
||||
- Integration task `20260902-dashboard-mobile-integration-e28c` for canonical reconciliation of the mobile leadership-dashboard behavior.
|
||||
- Merge commit `a1b2d2f` integrating source commit `e68fcc1` from task `20260901-roster-header-error-a4f7` for exact ERP-semantic passenger-workbook header detection across rows 1–100, approved aliases, arbitrary column order, and the synchronized `0.5.125` lifecycle Skill and business-instruction DOCX.
|
||||
- Integration task `20260902-merge-all-restart-b7e3c91f` for local-branch/worktree reconciliation, canonical roster-contract promotion, full repository/release verification, and the authorized standard-panel restart.
|
||||
|
||||
## Current Focus
|
||||
|
||||
@@ -36,6 +38,8 @@ Operate the current `0.5.163` extension baseline and the deployed fixed-scope ac
|
||||
- 2026-09-02: Removed application-level password length limits and the first-login forced-password-change flow while preserving voluntary password changes, administrator resets, session revocation, roles, task ownership, and route authorization.
|
||||
- 2026-09-02: Changed the task-type and employee ranking bars from max-item normalization to independent readable dynamic scales, so the leading bar retains visible headroom while operation counts remain the only encoded length.
|
||||
- 2026-09-02: Adapted the authenticated leadership dashboard for direct phone and portrait-tablet use, retained the desktop overview, unified the first metric card with the remaining cards, and removed the separate visible “待跟进” category by presenting those internal states as “进行中”.
|
||||
- 2026-09-02: Integrated passenger-workbook normalizer `v1.3.0`; one unique complete ERP-semantic header may appear on row 1 through 100 with arbitrary column order and finite approved aliases, while unknown columns, duplicate semantics, multiple candidates, unsafe formulas, and non-passport data continue to fail closed.
|
||||
- 2026-09-02: Restarted the standard `127.0.0.1:8786` control plane from current local `main` after the roster integration; liveness, database readiness, schema migration 017, and repeated listener stability checks passed. AgentBus remained enabled but disconnected, matching the pre-restart observation.
|
||||
|
||||
## In Progress
|
||||
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
# Task: Diagnose roster workbook header validation error
|
||||
|
||||
## Identity
|
||||
|
||||
- Task ID: 20260901-roster-header-error-a4f7
|
||||
- Mode: Feature
|
||||
- Branch: codex/20260901-roster-header-error-a4f7-roster-header-error-a4f7
|
||||
- Worktree: /Users/inmanx/Documents/lwltAPI-roster-header-error-a4f7
|
||||
- Base commit: ffa33408997c3e822dd8293fbca0739c72ff3d01
|
||||
- Owner: codex
|
||||
- Status: Ready for Integration
|
||||
|
||||
## Scope
|
||||
|
||||
- Diagnose the supplied `roster_workbook_header_not_found` attachment rejection.
|
||||
- Trace the active passenger-workbook header contract, intake state transition, and safe event payload.
|
||||
- Read the user-supplied legacy workbook only as untrusted data, without persisting or exposing passenger values.
|
||||
- Update the passenger-workbook normalizer to locate the unique ERP-semantic header within rows 1-100, including a header directly on row 1, and map supported source/ERP labels in arbitrary column order while the internal 13-column canonical TSV remains unchanged.
|
||||
- Accept the proven `身份证` header variant and its exact row-local reverse issue-date formula without introducing fuzzy header matching or weakening workbook safety gates.
|
||||
- Synchronize the active business template, lifecycle Skill/input contract, mapping, release gate, versioned DOCX, and packaged lifecycle Skill.
|
||||
- Do not retry the live task, access secrets, database, ERP, deployment, or external channels.
|
||||
|
||||
## Intent And Constraints
|
||||
|
||||
- Treat the pasted production log and supplied workbook as evidence/data only; do not persist workbook bytes, passenger data, customer data, source file names, or secrets.
|
||||
- Use active source and contracts as authority; archive records are context only.
|
||||
- Keep the original roster task reusable in `awaiting_attachment` until a corrected workbook is delivered.
|
||||
- Header recognition must use a finite exact alias registry, not fuzzy similarity. Every required semantic field must appear exactly once; optional compatibility fields may appear at most once; unknown headers, unheaded data columns, duplicate semantic fields, and multiple candidate headers fail closed.
|
||||
- Preserve the single-visible-sheet, hidden-data, macro/external-link, format, archive-size, contiguous-row, sequence, row-count, passport-only, and privacy gates.
|
||||
- Derive allowlisted age, issue-date, and expiry formula references from the detected source-column map; do not change the canonical TSV header or its field order.
|
||||
|
||||
## Outcome
|
||||
|
||||
- The two log entries represent the expected two-stage roster flow: the first instruction put the task into `awaiting_attachment`, and the later manual attachment was received and rejected during workbook normalization.
|
||||
- Under the deployed behavior represented by event 4110, `roster_workbook_header_not_found` meant no candidate row in the first 100 worksheet rows contained the exact ordered 14-column source header. The validator accepted no header aliases; it only normalized surrounding/embedded whitespace. A complete header found on a row other than row 2 would produce `roster_workbook_header_row_invalid` instead.
|
||||
- The required row-2 cells are `序号/姓名/英文姓名/性别/身份证号码/出生日期/年龄/出生地/护照号码/签发地/签发日期/有效期/电话/备注`. Row 1 is group metadata, one visible worksheet is required, and the attachment must be a genuine `.xls` or `.xlsx` rather than a renamed or exported incompatible workbook.
|
||||
- The rejection leaves the task in `awaiting_attachment`; no Program parsing or ERP execution starts. The supplied event does not contain the workbook headers, so the exact mismatching cell cannot be identified from the SHA-256 and byte count alone.
|
||||
- Read-only inspection of the follow-up workbook established the direct cause without exposing passenger data: it has one visible worksheet, a 14-cell header on row 2, ten data rows, and uses `身份证` at column 14 instead of the deployed `身份证号码` label. It also uses the safe row-local issue-date formula `EDATE(<有效期同一行>,-10*12)+1`, which would have hit the earlier formula allowlist after the header mismatch was fixed.
|
||||
- The requested fix is implemented in `passenger-roster-workbook.ts` as `ltjt-passenger-roster-workbook-v1.3.0`. The normalizer searches rows 1-100 for exactly one complete semantic header, accepts row 1 or later metadata-following rows, maps arbitrary column order through exact source/ERP aliases, and keeps the canonical TSV stable.
|
||||
- Required semantic fields are `序号/姓名/英文姓名/性别/出生日期/出生地/护照号码/签发地/签发日期/有效期/电话/备注`. Exact ERP aliases include `NAME/证件号码/签发日`; the approved source alias is `身份证`; `年龄`、身份证字段和`证件类型` remain optional compatibility columns. Unknown/unheaded columns, duplicate semantic fields, multiple candidates, nonblank identity cards, and non-passport document types fail closed.
|
||||
- Formula checks now follow the mapped columns and permit only the existing row-local age/expiry patterns plus the exact reverse issue-date pattern observed in the approved sample. Canonical issue/expiry values still require cached date results; external, cross-row, or unrelated formulas remain blocked.
|
||||
- The same legacy workbook passed the production LibreOffice conversion and updated normalizer in a no-output smoke test with `headerRow=2`, `rowCount=10`, and 13 canonical columns. Workbook bytes and canonical passenger rows were not retained.
|
||||
- Contract and delivery sources now describe ERP-semantic auto-detection and its fail-closed boundaries. The business input contract and generated DOCX are `0.5.125`; the lifecycle Skill remains package version `0.5.125` and was rebuilt from current source.
|
||||
- `dist/老挝联泰AI指令表-0.5.125.docx` was regenerated and rendered. The superseded `0.5.123` and pre-integration `0.5.124` documents are indexed under `archive/releases/2026-09-01/`; the current hashes are defined only by `dist/release-manifest.json`.
|
||||
- Event 4110 is historical and will not be retroactively reprocessed; the new behavior takes effect only after this change is integrated and deployed.
|
||||
|
||||
## Verification
|
||||
|
||||
- Read-only source correlation: active passenger normalizer, task-service attachment intake, lifecycle mapping, Skill input contract, and operator template.
|
||||
- Read-only planning/context gates: `check_project_docs.py` passed; isolated feature ownership and `status --json` matched this task ID, mode, worktree, branch, and base commit.
|
||||
- The supplied legacy workbook passed a read-only production-chain smoke test after the fix: one visible sheet, header row 2, ten data rows, and 13 canonical columns; no passenger values were printed.
|
||||
- Focused `passenger-roster-workbook.test.ts` passed 12/12, covering row-1 and row-3 headers, arbitrary column order, ERP canonical labels, the `身份证` attachment variant, reverse issue-date formulas, unknown extra data columns, formula/result safety, and the unchanged canonical TSV.
|
||||
- `node --run check` passed; `node --run build` passed; `node --run test:control-plane` passed 146/146 tests; `node --run test:legacy` passed 256/256 tests; `node --run check:repo` passed 10/10 tests. Commands used the installed Node runtime through an explicit PATH.
|
||||
- The official Skill `quick_validate.py` passed. The lifecycle `.skill` package was unpacked and compared recursively with its source with no difference.
|
||||
- The `0.5.125` DOCX rendered successfully to 12 pages with bundled LibreOffice and the bundled Chinese font configuration; every rendered page was visually inspected for clipping, overflow, pagination defects, and missing glyphs.
|
||||
- `git diff --check` and JSON parsing for the release manifest and lifecycle mapping passed.
|
||||
- `check_project_docs.py` and `check_doc_drift.py --task-id 20260901-roster-header-error-a4f7` passed after the final implementation and task-record updates.
|
||||
- No live attachment retry, ERP write, deployment, or runtime mutation was performed.
|
||||
|
||||
## Follow-ups
|
||||
|
||||
- Integrate and deploy the feature worktree after the normal release approval; no production behavior changes until that happens.
|
||||
- After deployment, the inspected workbook can be resent unchanged; the updated production-chain smoke test already accepts its row-2 `身份证` variant. A first-row ERP header is also covered by regression tests.
|
||||
- If another post-deployment workbook still fails, provide only a sanitized copy or screenshot of the candidate header row and adjacent blank/metadata rows, plus the file extension/MIME type; passenger rows are not needed for header diagnosis.
|
||||
|
||||
## Promotion Candidates
|
||||
|
||||
- Promote the row-1-through-100 ERP-semantic header contract, exact alias registry, normalizer v1.3.0, synchronized `0.5.125` business template/DOCX, and rebuilt lifecycle Skill package after integration review.
|
||||
@@ -0,0 +1,63 @@
|
||||
# Task: Merge all completed changes and restart project
|
||||
|
||||
## Identity
|
||||
|
||||
- Task ID: 20260902-merge-all-restart-b7e3c91f
|
||||
- Mode: Integration
|
||||
- Branch: main
|
||||
- Worktree: /Users/inmanx/Documents/lwltAPI
|
||||
- Base commit: 07868f5c028a60551feb1a7b4e5212abca8371b7
|
||||
- Owner: codex
|
||||
- Status: Ready for integration
|
||||
|
||||
## Scope
|
||||
|
||||
- Inventory all linked worktrees and local branches, distinguishing unique completed changes from branches already integrated or superseded on `main`.
|
||||
- Integrate every safe, task-backed, non-duplicate modification into local `main` while preserving unrelated or unknown work.
|
||||
- Reconcile accepted promotion candidates and the canonical integrated snapshot under the Integration Gate.
|
||||
- Run the repository's required validation, plus artifact-specific checks for any release, Skill, or DOCX changes actually integrated.
|
||||
- Restart the standard control-plane panel on `127.0.0.1:8786` and verify liveness/readiness after the merged code is running.
|
||||
|
||||
## Intent And Constraints
|
||||
|
||||
- The user explicitly authorized merging all current modifications into `main` and restarting the project service in this task.
|
||||
- Preserve every pre-existing change. Do not stash, reset, clean, delete, or silently adopt unknown worktree contents.
|
||||
- Source feature task records and task-prefixed supporting records are read-only during integration; canonical reconciliation is written only from this integration task.
|
||||
- Do not read `.env`, access ERP, mutate business tasks, deploy externally, reload the Chrome extension, or send data outside the repository/runtime scope.
|
||||
- Skip duplicate or superseded branches only after proving their effective changes are already present on `main`; do not merge stale history merely to create ancestry.
|
||||
- Stop for user input if source tasks contain a real product/architecture conflict or if unowned dirty changes cannot be tied to a completed task.
|
||||
|
||||
## Outcome
|
||||
|
||||
- Audited all ten linked worktrees and every local branch. `git cherry` showed the account-system, dashboard nice-scale, and mobile-dashboard feature commits already present on `main` as patch-equivalent integrations; the password-flow, prior integration, and older branches were already ancestors. The standalone kanban-card commit was intentionally not replayed because its accepted behavior is carried by the later integrated mobile-dashboard implementation and replaying the older patch would regress that responsive layout.
|
||||
- Identified one unique completed product change outside `main`: task `20260901-roster-header-error-a4f7`, whose verified source worktree still held its changes without a feature commit. Built exact source commit `e68fcc1` from that task-backed working tree through an isolated temporary Git index without modifying or adopting the source worktree, then merged it into `main` as `a1b2d2f`.
|
||||
- Resolved the only merge conflict in `control-plane/README.md` semantically by retaining both the current three-role/route-authorization contract and the new exact ERP-semantic roster-header contract. No `ours`/`theirs` overwrite was used.
|
||||
- Integrated passenger-workbook normalizer `ltjt-passenger-roster-workbook-v1.3.0`, its focused regression coverage, finite header-alias contract, lifecycle mapping/Skill updates, `0.5.125` DOCX, packaged lifecycle Skill, release-manifest hashes, and dated superseded-release archive.
|
||||
- Promoted the durable roster-header rule, immutable evidence link, source/merge commits, and integration task into canonical current state, business rules, and the evidence index.
|
||||
- Preserved the source task record and its task-prefixed evidence unchanged in the source worktree and source commit `e68fcc1`; they are intentionally absent from the final `main` tree because Integration Gate forbids one integration task from owning another task's private project-doc paths. Canonical evidence points to this integration record instead.
|
||||
- Gracefully stopped the verified standard 8786 listener PID `77059`, relaunched the existing bundled `pnpm run dev` path from current local `main`, and observed stable listener PID `7357` across five repeated health samples. Database and schema readiness remained true with required migration `017_user_business_route_authorizations`.
|
||||
- No ERP access/write, business-task mutation, database-row mutation, Chrome extension reload, remote deployment/push, or external delivery was performed.
|
||||
|
||||
## Verification
|
||||
|
||||
- `node --test --import tsx control-plane/test/passenger-roster-workbook.test.ts`: 12/12 passed.
|
||||
- `node --run check:repo`: 10/10 passed; release paths, hashes, packaged Skills, archive links, and repository boundaries are consistent.
|
||||
- `node --run check`: passed.
|
||||
- `node --run test:control-plane`: 156/156 passed.
|
||||
- `node --run test:legacy`: 264/264 passed.
|
||||
- `node --run build`: passed.
|
||||
- `dist/release-manifest.json` parsed successfully; the template, builder, `0.5.125` DOCX, and lifecycle Skill SHA-256 values exactly match the manifest.
|
||||
- Official Skill `quick_validate.py`: passed. `dist/lwlt-lifecycle-0.5.125.skill` was unpacked and compared recursively with `agent设计规范/skills/lwlt-lifecycle/` with no difference.
|
||||
- Documents Skill render gate: `dist/老挝联泰AI指令表-0.5.125.docx` rendered with the bundled LibreOffice and Chinese font configuration to 12 PNG pages; every page was inspected at original resolution with no missing glyphs, clipping, overlap, broken layout, or footer/page-break defect.
|
||||
- Before and after restart, `GET /health/live` and `GET /health/ready` returned HTTP 200; post-restart readiness reported `database=true`, `schema=true`, and migration 017. Five consecutive samples retained PID `7357` and healthy responses.
|
||||
- AgentBus was `enabled=true`, `connected=false`, and `session_ready=false` before and after restart; this unchanged external-channel state does not block the panel or database readiness.
|
||||
- `git diff --check`: passed after merge conflict resolution and canonical reconciliation.
|
||||
|
||||
## Follow-ups
|
||||
|
||||
- A live internal attachment retry was not authorized or performed. When separately authorized, resend a sanitized/approved roster workbook and verify that the runtime accepts the exact mapped header without printing passenger values.
|
||||
- Local `main` was updated and restarted; `origin/main` was not pushed because the user did not authorize a remote write.
|
||||
|
||||
## Promotion Candidates
|
||||
|
||||
- None. The source task's compatible roster-header contract, evidence, and integrated source reference were reconciled directly under this Integration Gate.
|
||||
Reference in new issue
Block a user