skill: switch 40250 parity skill to file-by-file 1:1 porting

Unit of work is a 40250 source unit; current-only logic is a defect;
unreachable code is not evidence. Adds per-function port-map schema,
priority by player-visible gameplay, parallel worktree rules, and a
corrected project map.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
shenlei
2026-09-22 17:12:16 +09:00
co-authored by Claude Opus 5
parent c5c183da37
commit ad6ea9ad7e
4 changed files with 189 additions and 123 deletions
@@ -97,12 +97,46 @@ An adaptation may change APIs or representation, never gameplay rules, branch ou
When a verified entry becomes stale, retain its previous evidence and history. Do not delete the entry or recreate it under a new ID.
## History events
A contract's `evidence.tests` and `implementation.files` must be reachable from the runtime
(loaded by `AppFlow`/`GameScene`/the native extension in a normal session). A file used only by its
own test is not an implementation and its test is not evidence.
Append one compact JSON object per meaningful state change to `audit/history.jsonl`:
## Port-map entries
One JSON file per 40250 source unit at `audit/port-map/<Lib>/<File>.json`:
```json
{"time":"2026-09-19T00:00:00Z","event":"status_changed","id":"combat.local.normal_attack","from":"MAPPED","to":"TEST_VERIFIED","reason":"call chain audited and tests passed"}
{
"reference": "UserInterface/InstanceBaseMovement.cpp",
"reference_sha256": "<sha256 of the reference file>",
"priority": "P0",
"contracts": ["movement.keyboard.motion", "movement.remote_sync_state"],
"functions": {
"CInstanceBase::SetMoveSpeed": {
"status": "PORTED",
"impl": ["project/player_controller.gd:set_server_speed", "extension/src/net/entity_store.cpp:motion_move_speed"],
"note": ""
},
"CInstanceBase::__EnableSkipCollision": {"status": "TODO"}
}
}
```
- Function keys are the reference's qualified names (`Class::Method`, or the free-function name).
- `status` is one of `TODO`, `PORTED`, `ADAPTED`, `N_A`, `DIVERGENT`, `NEEDS_LIVE` (meanings in `SKILL.md`).
- `impl` is required for `PORTED`/`ADAPTED`/`NEEDS_LIVE`; `note` is required for `ADAPTED`, `N_A`,
`DIVERGENT` and `NEEDS_LIVE`. `ADAPTED` also needs a `test` path.
- When `reference_sha256` no longer matches the file, every non-`TODO` function in the unit must be
rechecked before the hash is updated.
## History events
Append one compact JSON line per round to `audit/history.jsonl`:
```json
{"time":"2026-09-22T00:00:00Z","event":"port_round","unit":"UserInterface/InstanceBaseMovement.cpp","ported":["CInstanceBase::SetMoveSpeed"],"deleted":["player_controller.gd clampf(0.25,3.0)"],"divergent":[],"needs_live":[],"tests":["project/keyboard_motion_timeline_test.gd PASS"],"commit":"c5c183da"}
```
Contract status changes still use `{"event":"status_changed","id":...,"from":...,"to":...,"reason":...}`.
Never store credentials, packet payload secrets, binary captures, or generated screenshots in the ledger.