From 381b59ecaeb435659ea077564cd492761dc2eebe Mon Sep 17 00:00:00 2001 From: npc0-hue Date: Thu, 13 Aug 2026 12:00:46 +0800 Subject: [PATCH] Record SCUM content feature baselines --- .../design.md | 2 +- ...ce-content-features-baseline-2026-08-13.md | 72 +++++++++++++++++++ .../tasks.md | 3 +- 3 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 openspec/changes/replace-scum-projections-with-real-data-management/evidence/scum-current-service-content-features-baseline-2026-08-13.md diff --git a/openspec/changes/replace-scum-projections-with-real-data-management/design.md b/openspec/changes/replace-scum-projections-with-real-data-management/design.md index b9796aa..4b45c54 100644 --- a/openspec/changes/replace-scum-projections-with-real-data-management/design.md +++ b/openspec/changes/replace-scum-projections-with-real-data-management/design.md @@ -38,7 +38,7 @@ The first cross-repository prerequisite is to confirm or add the minimal generic Only then will the production implementation execute bounded, read-only probes through the currently bound Run. For operator-directed discovery, a server-local diagnostic script may read the active database in place on the game server host when it is bounded, query-only, redacted, and recorded as diagnostic evidence rather than a Platform/plugin/browser data path. In both cases, the evidence must include `sqlite_master`, `PRAGMA table_info`, foreign-key/index information for candidate tables, small redacted samples, relevant enum distributions, coordinate ranges/cadence, and read-lock behavior. It must confirm player/profile/entity joins, squad rank meaning, flag ownership relationships, vehicle identity fields, currency types, and whether/where a mutable profile XML payload actually exists. -Current-service schema and log structure baselines are an explicit prerequisite for further adapter or write declarations. The change stores a redacted all-table schema inventory and process-adjacent log pattern inventory under `evidence/`; capability work must consume those local baselines rather than repeatedly probing piecemeal or asking the operator for raw XML/log/database files. +Current-service schema, log structure, and content-feature baselines are an explicit prerequisite for further adapter or write declarations. The change stores a redacted all-table schema inventory, process-adjacent log pattern inventory, XML tag/attribute/value-shape summaries, and log skeleton marker sets under `evidence/`; capability work must consume those local baselines rather than repeatedly probing piecemeal or asking the operator for raw XML/log/database files. No production query or mutation asset may be merged until the probe evidence is captured in the change or an explicitly referenced test artifact. The probe is diagnostic-only, is not exposed as a browser action, and performs no write. diff --git a/openspec/changes/replace-scum-projections-with-real-data-management/evidence/scum-current-service-content-features-baseline-2026-08-13.md b/openspec/changes/replace-scum-projections-with-real-data-management/evidence/scum-current-service-content-features-baseline-2026-08-13.md new file mode 100644 index 0000000..530aabe --- /dev/null +++ b/openspec/changes/replace-scum-projections-with-real-data-management/evidence/scum-current-service-content-features-baseline-2026-08-13.md @@ -0,0 +1,72 @@ +# SCUM current-service content features baseline (redacted) + +- diagnostic: scum-current-service-content-features-v1 +- observed_utc: 2026-08-13T03:56:41Z +- target: `枣庄服务器` via server-management MCP +- redaction: type, null, range, length, hash, XML-key, and log-skeleton features only; no raw rows, raw XML, raw log lines, host paths, IPs, credentials, sockets, or player identities + +## DB content feature sources + +This file complements the full schema inventory in `scum-current-service-db-schema-baseline-2026-08-13.md` and the join/range diagnostic in `scum-current-service-sqlite-diagnostic-2026-08-12.md`. The following previously captured content features remain authoritative inputs for adapter design: + +- Identity/profile content: `user` has `74` rows, `user_profile` has `73` rows, all profiles join to `user`, and `72` profiles join to `prisoner` / `prisoner_entity` / `entity`; one profile has no current prisoner/entity. +- XML-bearing columns: `user_profile.template_xml` is non-null for `73/73` profiles with length range `2541-2673`; `prisoner_skill.xml` has `72/1656` non-null values with length `15-65`; `item_entity.xml` has `42304/62844` non-null values with length `136-4781`. +- Squad content: `squad` has `7` rows; `squad_member` has `18` rows; observed rank distribution is `1:6`, `2:2`, `3:4`, `4:6`, but rank meanings remain unknown. +- Economy content: `bank_account_registry` has `73` account rows and `bank_account_registry_currencies` has `146` rows; observed currency types are numeric `1` and `2`, but labels/units and command confirmation remain unknown. +- Coordinate content: joined prisoner positions, vehicle positions, base/base-element positions, and spawn-location coordinates have verified numeric ranges, but DB cadence did not prove sub-10s realtime updates. + +## XML content structure + +The XML diagnostic sampled only tag names, attribute names, parser success counts, and value-shape digests. It did not emit XML documents or attribute values. + +| table | column | sampled | parse_ok | root_tags | element_tags | attribute_names | value_shape_digest | +|---|---|---:|---:|---|---|---|---| +| user_profile | template_xml | 73 | 73 | CharacterTemplate x73 | Skill x1533; CharacterTemplate x73 | Name x1606; Attribute x1533; ClassName x1533; Level x1533; Experience x1533; Strength x73; Constitution x73; Dexterity x73; Intelligence x73; Age x73; Gender x73; AppearanceIndex x73; TattooIndex x73; BodyHairIndex x73; HairStyleIndex x73; MoustacheStyleIndex x73; BeardStyleIndex x73; BreastSize x73; PenisSize x73; GrowOverTime x73; BirthDate x73; ArrestDate x73; FaceType x73; SkinTone x73; HairColor x73 | sha256:9f839093a598edf3 | +| prisoner_skill | xml | 72 | 0 | - | - | - | sha256:e3b0c44298fc1c14 | +| item_entity | xml | 100 | 100 | Item x100 | Item x100; ContinuousFuelConsumption x25; Component x17; Stacks x15; ContainedItemsMetadata x15; ItemComponents x11; Locks x6; ContinuousFuelConsumptions x5; HeatSource_0 x5; HeatSource_1 x5; HeatSource_2 x5; HeatSource_3 x5; HeatSource_4 x5 | _bloodStage x100; _dryBloodStage x100; _isCrafted x100; _uncraftTime x100; _lastAccessTime x100; _healthRatioWhenCrafted x100; UniqueId x25; CurrentEnergyConsumptionRate x25; HeatSourceID x25; DialValue x25; FuelConsumptionCreated x25; Name x17; _radiation x15; _weight x15; _weightUsed x15; _isPartOfEvent x15; WaterWeight x15; StacksCount x15; _owningUserProfileId x6; _activeAccessLevel x6; _pendingContainedItemsRadiationAmount x6; _forbiddenZoneEnterTimestamp x6; _protectingFlagId x6; _colorIndex x6; _name x6 | sha256:5a62ccfa73af3694 | + +## XML conclusions + +- `user_profile.template_xml` is the only sampled profile-level XML source that parses cleanly and exposes named character attributes plus skill entries. +- The content features support future named-field adapter design for attributes such as `Strength`, `Constitution`, `Dexterity`, `Intelligence`, and existing `Skill` attributes, but they do not by themselves prove safe write semantics, backup/offline requirements, readback behavior, or a `855` preset mapping. +- `prisoner_skill.xml` is not a valid XML document in the sampled current-service rows, so it cannot be treated as the preserving XML mutation source. +- `item_entity.xml` parses as item metadata and is not a profile attribute source. + +## Log content skeleton features + +The log diagnostic sampled bounded prefixes from process-adjacent logs, grouped by filename pattern. Skeletons replace quoted text, numbers, network-shaped tokens, long hex identifiers, and ASCII words; marker sets record structural tokens only. + +| filename_pattern | sampled_files | sampled_lines | bytes | encodings | marker_sets | skeleton_digest | top_skeletons | +|---|---:|---:|---:|---|---|---|---| +| admin_{digits}.log | 15 | 48 | 6816 | utf-16-le x15 | date x18; date,network x15; date,login-event x15 | sha256:ffaf5a692fdcf219 | date/network boilerplate x15; admin-login-event skeleton x15; admin-action skeleton x12 | +| armor_absorption_{digits}.log | 15 | 15 | 1500 | utf-16-le x15 | date,network x15 | sha256:2c509fc280f438aa | shared date/network boilerplate x15 | +| base_building_destruction_{digits}.log | 15 | 15 | 1500 | utf-16-le x15 | date,network x15 | sha256:2c509fc280f438aa | shared date/network boilerplate x15 | +| chat_{digits}.log | 15 | 24 | 2706 | utf-16-le x15 | date,network x15; date x9 | sha256:8e42f8c5ba48c29b | shared date/network boilerplate x15; redacted chat skeleton x9 | +| chest_ownership_{digits}.log | 15 | 15 | 1500 | utf-16-le x15 | date,network x15 | sha256:2c509fc280f438aa | shared date/network boilerplate x15 | +| connection_log.txt | 5 | 100 | 82695 | utf-8-sig x5 | date,time x65; date,time,login-event x35 | sha256:80153240fb51639e | service connection event skeletons x35/x35/x10 | +| connection_log_{n}.txt | 10 | 200 | 1248965 | utf-16-le x5; utf-8-sig x5 | none x100; date,time x90; date,time,network x5; date,time,login-event x5 | sha256:346312bbea656ecd | mixed encoded service connection skeletons | +| economy_{digits}.log | 15 | 15 | 1500 | utf-16-le x15 | date,network x15 | sha256:2c509fc280f438aa | shared date/network boilerplate x15 | +| event_kill_{digits}.log | 12 | 12 | 1200 | utf-16-le x12 | date,network x12 | sha256:2c509fc280f438aa | shared date/network boilerplate x12 | +| famepoints_{digits}.log | 15 | 15 | 1500 | utf-16-le x15 | date,network x15 | sha256:2c509fc280f438aa | shared date/network boilerplate x15 | +| gameplay_{digits}.log | 15 | 159 | 987486 | utf-16-le x15 | date x78; date,coordinates x66; date,network x15 | sha256:b8ae42ecfeb39fad | gameplay header skeleton x33; coordinate event skeletons x18/x18 | +| kill_{digits}.log | 12 | 12 | 1200 | utf-16-le x12 | date,network x12 | sha256:2c509fc280f438aa | shared date/network boilerplate x12 | +| login_{digits}.log | 12 | 21 | 3456 | utf-16-le x12 | date,network x12; date,login-event,coordinates,network x9 | sha256:e4f04da6e2da7470 | shared date/network boilerplate x12; login/logout coordinate skeletons x6/x3 | +| loot_{digits}.log | 15 | 186 | 49164 | utf-16-le x15 | date x171; date,network x15 | sha256:36e500f92b6c82f3 | loot interaction skeletons x108/x18; shared date/network boilerplate x15 | +| network_objects_{digits}.log | 15 | 15 | 1500 | utf-16-le x15 | date,network x15 | sha256:2c509fc280f438aa | shared date/network boilerplate x15 | +| quests_{digits}.log | 15 | 15 | 1500 | utf-16-le x15 | date,network x15 | sha256:2c509fc280f438aa | shared date/network boilerplate x15 | +| raid_protection_{digits}.log | 15 | 33 | 2868 | utf-16-le x15 | date x18; date,network x15 | sha256:80b32ec451bdbd18 | shared date/network boilerplate x15; raid protection status skeletons x9/x9 | +| sentry_{digits}.log | 15 | 15 | 1500 | utf-16-le x15 | date,network x15 | sha256:2c509fc280f438aa | shared date/network boilerplate x15 | +| server_notifications_{digits}.log | 15 | 15 | 1500 | utf-16-le x15 | date,network x15 | sha256:2c509fc280f438aa | shared date/network boilerplate x15 | +| service_log.txt | 5 | 100 | 181445 | utf-8-sig x5 | time,login-event x100 | sha256:096a96f507532516 | service login-state skeletons x35/x35/x30 | +| stats_log.txt | 5 | 100 | 769140 | utf-16-le x5 | none x100 | sha256:3eed2125dbb41774 | encoded/stat payload skeletons x95/x5 | +| vehicle_destruction_{digits}.log | 15 | 72 | 503544 | utf-16-le x15 | date,coordinates x57; date,network x15 | sha256:af9b5eb7bece3c6d | vehicle coordinate event skeletons x18/x15; shared date/network boilerplate x15 | +| violations_{digits}.log | 12 | 12 | 1200 | utf-16-le x12 | date,network x12 | sha256:2c509fc280f438aa | shared date/network boilerplate x12 | + +Additional runtime/backup logs (`SCUM.log`, backup SCUM logs, `UE{n}SS.log`, `configstore_log.txt`, `systemmanager.txt`, and empty dispatch test stdout/stderr logs) were observed as separate service/runtime families. Their sampled content either did not decode into useful event skeletons under the bounded text decoder or contained no sampled lines; they are not candidate gameplay/event parsers without a separate parser contract. + +## Log conclusions + +- `login_{digits}.log` remains the authenticated player-session parser source because it has login/logout, coordinate, date, and network-shaped content markers matching the existing sanitized fixtures. +- `gameplay_{digits}.log` and `vehicle_destruction_{digits}.log` contain coordinate-shaped events, but they are separate parser candidates and must not be conflated with login/session events. +- Many gameplay logs start with a repeated date/network boilerplate shape, so parsers must strip or reject network-shaped tokens before persistence or logical event fingerprinting. +- Service/runtime logs (`connection_log*.txt`, `service_log.txt`, `SCUM.log`, stats/config/system logs) are structurally distinct from gameplay event files and require separate declarations if used. diff --git a/openspec/changes/replace-scum-projections-with-real-data-management/tasks.md b/openspec/changes/replace-scum-projections-with-real-data-management/tasks.md index cec9524..49cc38d 100644 --- a/openspec/changes/replace-scum-projections-with-real-data-management/tasks.md +++ b/openspec/changes/replace-scum-projections-with-real-data-management/tasks.md @@ -74,8 +74,9 @@ - Per operator correction, the change now stores current-service structure baselines before attempting further capability declarations. `evidence/scum-current-service-db-schema-baseline-2026-08-13.md` records the full `161`-table compact schema inventory from a server-local read-only Python diagnostic, including row counts, columns, primary-key columns, foreign-key counts, and index counts without raw rows, SQL, XML, paths, credentials, sockets, IPs, or player identities. - `evidence/scum-current-service-log-structure-baseline-2026-08-13.md` records the process-adjacent log inventory from a successful server-local diagnostic: `1200` log/text files across hashed directories, including `login_{digits}.log`, `admin_{digits}.log`, `gameplay_{digits}.log`, `economy_{digits}.log`, `chat_{digits}.log`, `vehicle_destruction_{digits}.log`, `SCUM.log`, and service/runtime log families. Raw log lines and paths were not emitted or stored. +- `evidence/scum-current-service-content-features-baseline-2026-08-13.md` records redacted content features from the current service: XML tag/attribute/value-shape summaries, selected DB content distributions, and log skeleton marker sets. It confirms `user_profile.template_xml` parses as `CharacterTemplate` with named character attributes and `Skill` entries, confirms sampled `prisoner_skill.xml` values are not parseable XML documents, and classifies `item_entity.xml` as item metadata rather than a profile attribute source. - A broader line-shape diagnostic confirmed coordinate-shaped and network-shaped tokens exist in multiple log families, so parser assets must stay per-file-pattern and strip network material before durable storage. The authoritative file inventory remains the successful v4 evidence file. -- Task 3.10 remains unchecked: the refreshed schema baseline confirms `user_profile.template_xml`, `prisoner_skill.xml`, and `item_entity.xml` as XML-bearing sources, but it still does not prove named attribute mappings, preserving patch semantics, offline/backup/readback requirements, or an operator-confirmed `855` preset. +- Task 3.10 remains unchecked: the refreshed content-feature baseline confirms `user_profile.template_xml` is the parseable named-attribute source candidate, but it still does not prove preserving patch semantics, offline/backup/readback requirements, activation semantics, write safety, or an operator-confirmed `855` preset mapping. - [x] 3.1 Add SDK and manifest types for versioned log parsers, SQLite query assets, parameter/result schemas, capability-specific schema fingerprints, sync cadence/limits, map metadata, typed RCON templates, gift item catalogs, and guarded mutation declarations. - [x] 3.2 Extend plugin validation to require asset digests, contained package paths, unique template keys, bounded parameters/results, compatible adapter versions, and explicit permission bindings, and to reject raw caller-supplied SQL, RCON, XML, paths, or undeclared parameters.