Skip to content

feat(audit): classify scripted gameplay telemetry - #222

Draft
zoeyrose wants to merge 25 commits into
mainfrom
feat/160-scripted-audit-events
Draft

feat(audit): classify scripted gameplay telemetry#222
zoeyrose wants to merge 25 commits into
mainfrom
feat/160-scripted-audit-events

Conversation

@zoeyrose

@zoeyrose zoeyrose commented Aug 14, 2026

Copy link
Copy Markdown
Member

Summary

  • add an exact AST occurrence inventory for every directly authored Python gameplay metric and audit-like logging site
  • classify all 26 metric calls across 21 unique identities and all 21 current logging/print/dynamic-execution/sink sites under the gameplay-journal noise and privacy policy
  • bind each review to its exact AST location, lexical scope, and normalized surrounding-source fingerprint, while prohibiting reserved reflection, dynamic execution, and callable aliases
  • keep free-form operational text out of proposed structured records and keep the review-only contract out of Classic runtime artifacts
  • align the quest rows with the released QuestManager lifecycle producers from feat(quests): journal lifecycle milestones #223 and the authoritative reason taxonomy from feat(server): audit meaningful quest, progression, and survival milestones classic#161
  • document the remaining unsafe pre-commit economy metric boundaries without claiming transaction safety

This draft will add the remaining executable integrations after the server-owned recovery contracts stabilize.

Tracks #160. The closing reference will be restored only after the executable draft gates below are complete.

Dependencies and branch disposition

Coordinates

  • Base: main@02f30929ca1e9514127986133c0658a513654eef
  • Head branch: feat/160-scripted-audit-events
  • Current head: a94358f4534041db51e8c2c0b29d08abdbc22431
  • Worktree: /workspaces/atrinik/workspace/worktrees/content/issue-160-scripted-audit
  • Current-base alignment: a891847d5 and 2dba16002 merge main; afb95d1ce aligns the quest inventory; af8c3b2dc aligns the Jail inventory after status publishing
  • Audit implementation commits: 89efbb2a2, aa691bcbd, 0b993dfbb, a571e83b3, f6e10c22e, df1aa8479, 0e43b814e, 7f7e8eab6
  • Latest recovery/review fixes: 88b7442b5, 42c73945a, 2d7cf68b3, a0e14034d, f62650086, cba4601a2, 23ebacd93, 4783dd365, 82f013fd3, fee21a733, efe55177f, bcf0387f1, a94358f45

Validation

  • python3 -m unittest tools.tests.test_scripted_gameplay_audit -v — 59 passed
  • python3 tools/validate.py — 226 tests plus release-line parity, 1,355-archetype/3,651-map lossless audit, lighting, schema, catalog, contracts, syntax, isolated generic/Classic runtime collection, licensing, and provenance gates passed
  • python3 -m compileall -q tools maps/python/QuestManager.py maps/python/tests/QuestManager.py — passed
  • git diff main..HEAD --check — passed

Review fixes

  • replaced grouped call counts with exact occurrence and surrounding-context review
  • expanded discovery from maps/python to every authored maps/**/*.py script outside fixtures
  • made audit-like logging a discovered, exact inventory instead of unenforced prose
  • bounded proposed identifiers to the server's 255-character ASCII contract
  • corrected unique metric identity reporting and classified unsafe legacy economy commit boundaries explicitly
  • moved the governance contract out of the runtime map tree and added an aggregate absence gate
  • inventoried all five direct Python print producers routed to the operational log
  • rejected metric/log/print aliases and reflective access while preserving innocent strings and unrelated methods
  • bound the Guild.log_add persistence sink, qualified/module aliases, factory-derived guild receivers, and reserved-name shadow/rebinding rules
  • prohibited raw audit facilities from claiming gameplay-journal disposition without a typed producer contract
  • re-reviewed and rebound the quest metric sites after the released lifecycle integration changed their authoritative context
  • inventoried privileged eval/exec/interactive-console boundaries, module-qualified prints, built-in/operator reflection, namespace lookup, and ambiguous telemetry-receiver rebinding
  • rejected a content-local quest retry approach after review proved partial multi-stack cleanup and mixed terminal outcomes require the server-owned atomic disposition contract; feat(server): reconcile scripted quest transitions classic#321 now includes objective progress and metric projection

Draft gates

The clean content aggregate validation and all latest-head hosted checks pass. Exact Classic server/runtime verification remains pending the two server recovery contracts above; the current isolated wrapper retry also encountered the unrelated incomplete shared source-generation bug tracked by atrinik/atrinik#427. Replacement runtime adapters remain unavailable under atrinik/atrinik#266, atrinik/atrinik#269, and atrinik/atrinik#270; Classic is the declared target of this shared authored source.

@zoeyrose zoeyrose moved this to Review in Atrinik work Aug 14, 2026
@zoeyrose zoeyrose changed the title feat(audit): journal scripted quest and economy events feat(audit): classify scripted gameplay telemetry Aug 14, 2026
zoeyrose added a commit that referenced this pull request Aug 14, 2026
## Summary

- centralize durable top-level and nested quest lifecycle milestones in
the shared `QuestManager`
- use stable qualified quest and nested-part identities with exact
before/after status
- journal repeat reset and objective removal while preserving kept
objective items without false removal records
- suppress duplicate start/completion/failure hooks and retain uncertain
intents for reconciliation

## Relationship

Supports atrinik/classic#161. The Classic PR
is the sole issue-closing path.

Depends on the trusted gameplay-journal Python API delivered by
atrinik/classic#159 and consumed by the
companion Classic branch `feat/161-milestone-journal`.

The scripted telemetry inventory in #222 does not overlap these files
and remains independently mergeable.

## Validation

- `python3 tools/validate.py` — passed: 167 tests plus full catalog,
schema, authored syntax, runtime collection, licensing, and provenance
validation
- composed Classic server suite — passed before the independent
current-base scoped-source regression: 51/51 CMake tests, including 441
Python plugin tests
- final owner-native Classic suite — passed at companion Classic head:
51/51, including the Python plugin suite
- `git diff --check` — passed

## Review

Two complete base-to-head review rounds found and fixed intent ordering,
repeat-reset coverage, and dead local-state issues. The post-fix review
has zero known actionable findings.

Tracked independent workspace/runtime limitations:
atrinik/atrinik#418,
atrinik/atrinik#420,
atrinik/atrinik#424,
atrinik/atrinik#425, and
atrinik/classic#318.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Review

Development

Successfully merging this pull request may close these issues.

1 participant