From 50a8caad14311deba00ed41c77a0ccdb0add4fc8 Mon Sep 17 00:00:00 2001 From: Teakowa Date: Mon, 24 Aug 2026 13:10:48 +0800 Subject: [PATCH] fix(conformance): replace P0 test API terminology Rename the owner-controlled real-project expectation API and corpus manifest without changing case identities, hashes, or admitted gaps. Fixes #96 --- .../workshop-rs/src/catalog/data/catalog.json | 4 +- crates/workshop-rs/src/lib.rs | 2 +- .../src/{p0.rs => real_projects.rs} | 132 +++++++++--------- crates/workshop-rs/tests/common/mod.rs | 16 ++- crates/workshop-rs/tests/emitter.rs | 12 +- crates/workshop-rs/tests/fixtures/README.md | 4 +- crates/workshop-rs/tests/identity.rs | 2 +- crates/workshop-rs/tests/locale.rs | 6 +- crates/workshop-rs/tests/parser.rs | 6 +- crates/workshop-rs/tests/wir_expansion.rs | 2 +- docs/evidence/README.md | 2 +- ...son => raw-workshop-real-projects-v1.json} | 2 +- ...v1.md => raw-workshop-real-projects-v1.md} | 4 +- docs/provenance.md | 4 +- 14 files changed, 111 insertions(+), 87 deletions(-) rename crates/workshop-rs/src/{p0.rs => real_projects.rs} (65%) rename docs/evidence/{raw-workshop-p0-v1.json => raw-workshop-real-projects-v1.json} (99%) rename docs/evidence/{raw-workshop-p0-v1.md => raw-workshop-real-projects-v1.md} (89%) diff --git a/crates/workshop-rs/src/catalog/data/catalog.json b/crates/workshop-rs/src/catalog/data/catalog.json index a602237..957df9b 100644 --- a/crates/workshop-rs/src/catalog/data/catalog.json +++ b/crates/workshop-rs/src/catalog/data/catalog.json @@ -3992,7 +3992,7 @@ ] } ], - "digest": "4a4ad444069253758d1b6970f000226851c089a14d8393a7e3d9ebb23df9387a", + "digest": "174a4ebc3f1250485ea55605ebb885016d84897368f65f1ad3818f9789728060", "enums": [ { "domain": "Impulse", @@ -9882,7 +9882,7 @@ "target": { "format": "vanilla Workshop text", "game": "Overwatch 2", - "surface": "M5 P0 set, documented in docs/provenance.md (mirrors wright docs/workshop/support-matrix.md)" + "surface": "Supported Workshop set, documented in docs/provenance.md (mirrors wright docs/workshop/support-matrix.md)" }, "values": [ { diff --git a/crates/workshop-rs/src/lib.rs b/crates/workshop-rs/src/lib.rs index 6ecc1f4..0408971 100644 --- a/crates/workshop-rs/src/lib.rs +++ b/crates/workshop-rs/src/lib.rs @@ -45,8 +45,8 @@ pub mod gameplay_query; pub mod ids; pub mod lexer; pub mod live_capture; -pub mod p0; pub mod parser; +pub mod real_projects; pub mod roundtrip; pub mod semantic; pub mod settings; diff --git a/crates/workshop-rs/src/p0.rs b/crates/workshop-rs/src/real_projects.rs similarity index 65% rename from crates/workshop-rs/src/p0.rs rename to crates/workshop-rs/src/real_projects.rs index 151bbb1..8eafcaa 100644 --- a/crates/workshop-rs/src/p0.rs +++ b/crates/workshop-rs/src/real_projects.rs @@ -1,4 +1,4 @@ -//! Owner-controlled expectations for the pinned P0 Workshop corpus. +//! Owner-controlled expectations for the pinned real-project Workshop corpus. //! //! This is a test-support contract, not a conformance result or evidence //! report. It contains only the current owner-defined input identities and @@ -8,15 +8,15 @@ use crate::error::WorkshopError; use crate::semantic::{IncompletenessKind, ResidualClassification, SemanticIssue}; -/// The schema version of [`P0_EXPECTATION`]. -pub const P0_EXPECTATION_SCHEMA_VERSION: u32 = 1; +/// The schema version of [`REAL_PROJECT_EXPECTATION`]. +pub const REAL_PROJECT_EXPECTATION_SCHEMA_VERSION: u32 = 1; -/// The stable identity of the pinned P0 source corpus. -pub const P0_CORPUS_ID: &str = "raw-workshop-p0-corpus/v1"; +/// The stable identity of the pinned real-project source corpus. +pub const REAL_PROJECT_CORPUS_ID: &str = "raw-workshop-real-projects/v1"; -/// The stage at which an admitted P0 gap is observed. +/// The stage at which an admitted real-project gap is observed. #[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum P0Stage { +pub enum RealProjectStage { /// Canonical builtin references are validated after parsing. CanonicalValidation, /// Canonical WIR is emitted back to Workshop text. @@ -25,7 +25,7 @@ pub enum P0Stage { LocaleConversion, } -impl P0Stage { +impl RealProjectStage { /// Return the stable machine-readable stage name. pub const fn as_str(self) -> &'static str { match self { @@ -36,14 +36,14 @@ impl P0Stage { } } -/// The Workshop error identity admitted for a P0 stage gap. +/// The Workshop error identity admitted for a real-project stage gap. #[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum P0GapKind { +pub enum RealProjectGapKind { /// An action spelling is not present in the canonical Workshop catalog. UnknownAction, } -impl P0GapKind { +impl RealProjectGapKind { /// Return the stable machine-readable error kind name. pub const fn as_str(self) -> &'static str { match self { @@ -52,9 +52,9 @@ impl P0GapKind { } } -/// An admitted semantic residual for one P0 source case. +/// An admitted semantic residual for one real-project source case. #[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub struct P0ResidualExpectation { +pub struct RealProjectResidualExpectation { /// The semantic issue kind reported by [`crate::semantic::inspect`]. pub kind: IncompletenessKind, /// The locale-independent Workshop identity of the residual. @@ -63,22 +63,22 @@ pub struct P0ResidualExpectation { pub classification: ResidualClassification, } -/// An admitted Workshop error for one P0 processing stage. +/// An admitted Workshop error for one real-project processing stage. #[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub struct P0GapExpectation { +pub struct RealProjectGapExpectation { /// The processing stage where the error is admitted. - pub stage: P0Stage, + pub stage: RealProjectStage, /// The structured Workshop error kind. - pub kind: P0GapKind, + pub kind: RealProjectGapKind, /// The localized spelling or identity carried by the error. pub identity: &'static str, /// The owner-defined classification corresponding to this gap. pub classification: ResidualClassification, } -/// The pinned source identity and owner-defined expectation for one P0 case. +/// The pinned source identity and owner-defined expectation for one real-project case. #[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub struct P0CaseExpectation { +pub struct RealProjectCaseExpectation { /// Stable case identity. pub id: &'static str, /// Source locale of the pinned Workshop input. @@ -88,12 +88,12 @@ pub struct P0CaseExpectation { /// SHA-256 digest of [`Self::source_fixture`]. pub source_sha256: &'static str, /// Semantic residuals admitted for this case at every inspection stage. - pub residuals: &'static [P0ResidualExpectation], + pub residuals: &'static [RealProjectResidualExpectation], /// Stage-specific Workshop errors admitted for this case. - pub gaps: &'static [P0GapExpectation], + pub gaps: &'static [RealProjectGapExpectation], } -impl P0CaseExpectation { +impl RealProjectCaseExpectation { /// Whether the inspected semantic issue is admitted for this case. pub fn admits_residual(&self, issue: &SemanticIssue) -> bool { self.residuals.iter().any(|expected| { @@ -104,65 +104,66 @@ impl P0CaseExpectation { } /// Whether the error is an owner-admitted gap at the given stage. - pub fn admits_gap(&self, stage: P0Stage, error: &WorkshopError) -> bool { + pub fn admits_gap(&self, stage: RealProjectStage, error: &WorkshopError) -> bool { self.gaps.iter().any(|expected| { expected.stage == stage && match (expected.kind, error) { - (P0GapKind::UnknownAction, WorkshopError::Unknown { kind, spelling, .. }) => { - *kind == expected.kind.as_str() && spelling == expected.identity - } + ( + RealProjectGapKind::UnknownAction, + WorkshopError::Unknown { kind, spelling, .. }, + ) => *kind == expected.kind.as_str() && spelling == expected.identity, _ => false, } }) } } -/// The owner-controlled P0 expectation contract consumed by the harness and -/// downstream conformance tests. +/// The owner-controlled real-project expectation contract consumed by the +/// harness and downstream conformance tests. #[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub struct P0Expectation { +pub struct RealProjectExpectation { /// Contract schema version. pub schema_version: u32, /// Stable identity of the source corpus. pub corpus_id: &'static str, - /// The complete current P0 case inventory and expectations. - pub cases: &'static [P0CaseExpectation], + /// The complete current real-project case inventory and expectations. + pub cases: &'static [RealProjectCaseExpectation], } -const NO_RESIDUALS: &[P0ResidualExpectation] = &[]; -const NO_GAPS: &[P0GapExpectation] = &[]; -const DEFEND_RESIDUALS: &[P0ResidualExpectation] = &[P0ResidualExpectation { +const NO_RESIDUALS: &[RealProjectResidualExpectation] = &[]; +const NO_GAPS: &[RealProjectGapExpectation] = &[]; +const DEFEND_RESIDUALS: &[RealProjectResidualExpectation] = &[RealProjectResidualExpectation { kind: IncompletenessKind::OpaqueAction, identity: "rawWorkshopAction", classification: ResidualClassification::LegacyOpaque, }]; -const DEFEND_GAPS: &[P0GapExpectation] = &[ - P0GapExpectation { - stage: P0Stage::CanonicalValidation, - kind: P0GapKind::UnknownAction, +const DEFEND_GAPS: &[RealProjectGapExpectation] = &[ + RealProjectGapExpectation { + stage: RealProjectStage::CanonicalValidation, + kind: RealProjectGapKind::UnknownAction, identity: "rawWorkshopAction", classification: ResidualClassification::LegacyOpaque, }, - P0GapExpectation { - stage: P0Stage::Emission, - kind: P0GapKind::UnknownAction, + RealProjectGapExpectation { + stage: RealProjectStage::Emission, + kind: RealProjectGapKind::UnknownAction, identity: "rawWorkshopAction", classification: ResidualClassification::LegacyOpaque, }, - P0GapExpectation { - stage: P0Stage::LocaleConversion, - kind: P0GapKind::UnknownAction, + RealProjectGapExpectation { + stage: RealProjectStage::LocaleConversion, + kind: RealProjectGapKind::UnknownAction, identity: "rawWorkshopAction", classification: ResidualClassification::LegacyOpaque, }, ]; -/// The single authoritative P0 case and expectation definition. -pub const P0_EXPECTATION: P0Expectation = P0Expectation { - schema_version: P0_EXPECTATION_SCHEMA_VERSION, - corpus_id: P0_CORPUS_ID, +/// The single authoritative real-project case and expectation definition. +pub const REAL_PROJECT_EXPECTATION: RealProjectExpectation = RealProjectExpectation { + schema_version: REAL_PROJECT_EXPECTATION_SCHEMA_VERSION, + corpus_id: REAL_PROJECT_CORPUS_ID, cases: &[ - P0CaseExpectation { + RealProjectCaseExpectation { id: "ai-pve", locale: "zh-CN", source_fixture: "tests/fixtures/real-projects/ai-pve.ow", @@ -170,7 +171,7 @@ pub const P0_EXPECTATION: P0Expectation = P0Expectation { residuals: NO_RESIDUALS, gaps: NO_GAPS, }, - P0CaseExpectation { + RealProjectCaseExpectation { id: "bastion", locale: "en-US", source_fixture: "tests/fixtures/real-projects/bastion.ow", @@ -178,7 +179,7 @@ pub const P0_EXPECTATION: P0Expectation = P0Expectation { residuals: NO_RESIDUALS, gaps: NO_GAPS, }, - P0CaseExpectation { + RealProjectCaseExpectation { id: "defend", locale: "en-US", source_fixture: "tests/fixtures/real-projects/defend.ow", @@ -186,7 +187,7 @@ pub const P0_EXPECTATION: P0Expectation = P0Expectation { residuals: DEFEND_RESIDUALS, gaps: DEFEND_GAPS, }, - P0CaseExpectation { + RealProjectCaseExpectation { id: "illari", locale: "zh-CN", source_fixture: "tests/fixtures/real-projects/illari.ow", @@ -194,7 +195,7 @@ pub const P0_EXPECTATION: P0Expectation = P0Expectation { residuals: NO_RESIDUALS, gaps: NO_GAPS, }, - P0CaseExpectation { + RealProjectCaseExpectation { id: "rework", locale: "en-US", source_fixture: "tests/fixtures/real-projects/rework.ow", @@ -210,11 +211,14 @@ mod tests { use super::*; #[test] - fn p0_expectation_has_unique_pinned_case_identities() { - assert_eq!(P0_EXPECTATION.schema_version, P0_EXPECTATION_SCHEMA_VERSION); - assert_eq!(P0_EXPECTATION.corpus_id, P0_CORPUS_ID); + fn real_projects_expectation_has_unique_pinned_case_identities() { + assert_eq!( + REAL_PROJECT_EXPECTATION.schema_version, + REAL_PROJECT_EXPECTATION_SCHEMA_VERSION + ); + assert_eq!(REAL_PROJECT_EXPECTATION.corpus_id, REAL_PROJECT_CORPUS_ID); - for (index, case) in P0_EXPECTATION.cases.iter().enumerate() { + for (index, case) in REAL_PROJECT_EXPECTATION.cases.iter().enumerate() { assert!(!case.id.is_empty()); assert!(case.locale == "en-US" || case.locale == "zh-CN"); assert!( @@ -223,18 +227,18 @@ mod tests { ); assert_eq!(case.source_sha256.len(), 64); assert!( - P0_EXPECTATION.cases[index + 1..] + REAL_PROJECT_EXPECTATION.cases[index + 1..] .iter() .all(|other| other.id != case.id), - "duplicate P0 case identity: {}", + "duplicate real-project case identity: {}", case.id ); } } #[test] - fn p0_expectation_keeps_the_admitted_gap_identity_and_classification() { - let defend = P0_EXPECTATION + fn real_projects_expectation_keeps_the_admitted_gap_identity_and_classification() { + let defend = REAL_PROJECT_EXPECTATION .cases .iter() .find(|case| case.id == "defend") @@ -242,7 +246,7 @@ mod tests { assert_eq!(defend.residuals, DEFEND_RESIDUALS); assert_eq!(defend.gaps.len(), 3); assert!(defend.gaps.iter().all(|gap| { - gap.kind == P0GapKind::UnknownAction + gap.kind == RealProjectGapKind::UnknownAction && gap.identity == "rawWorkshopAction" && gap.classification == ResidualClassification::LegacyOpaque })); @@ -253,9 +257,9 @@ mod tests { locale: crate::catalog::Locale::new("en-US"), span: None, }; - assert!(defend.admits_gap(P0Stage::Emission, &error)); + assert!(defend.admits_gap(RealProjectStage::Emission, &error)); assert!(!defend.admits_gap( - P0Stage::CanonicalValidation, + RealProjectStage::CanonicalValidation, &WorkshopError::Unknown { kind: "value", spelling: "rawWorkshopAction".to_string(), diff --git a/crates/workshop-rs/tests/common/mod.rs b/crates/workshop-rs/tests/common/mod.rs index 10f6c9d..cbacabc 100644 --- a/crates/workshop-rs/tests/common/mod.rs +++ b/crates/workshop-rs/tests/common/mod.rs @@ -4,7 +4,7 @@ use sha2::{Digest, Sha256}; use workshop_rs::{ WorkshopError, catalog::{Catalog, Locale}, - p0::{P0CaseExpectation, P0Stage}, + real_projects::{RealProjectCaseExpectation, RealProjectStage}, semantic, }; @@ -17,11 +17,11 @@ struct SpanReport { end_column: u32, } -pub(crate) fn cases() -> &'static [P0CaseExpectation] { - workshop_rs::p0::P0_EXPECTATION.cases +pub(crate) fn cases() -> &'static [RealProjectCaseExpectation] { + workshop_rs::real_projects::REAL_PROJECT_EXPECTATION.cases } -pub(crate) fn source(case: &P0CaseExpectation) -> (String, Locale) { +pub(crate) fn source(case: &RealProjectCaseExpectation) -> (String, Locale) { let path = std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join(case.source_fixture); let bytes = std::fs::read(&path).unwrap_or_else(|error| panic!("{path:?}: {error}")); assert_eq!( @@ -43,7 +43,7 @@ pub(crate) fn target_locale(source_locale: &Locale) -> Locale { } pub(crate) fn assert_residual_policy( - case: &P0CaseExpectation, + case: &RealProjectCaseExpectation, stage: &str, issues: &[semantic::SemanticIssue], ) { @@ -69,7 +69,11 @@ pub(crate) fn assert_residual_policy( ); } -pub(crate) fn assert_gap(case: &P0CaseExpectation, stage: P0Stage, error: &WorkshopError) { +pub(crate) fn assert_gap( + case: &RealProjectCaseExpectation, + stage: RealProjectStage, + error: &WorkshopError, +) { assert!( case.admits_gap(stage, error), "{} {} failed outside known gaps: {error:?}", diff --git a/crates/workshop-rs/tests/emitter.rs b/crates/workshop-rs/tests/emitter.rs index 002a32f..f35f5a4 100644 --- a/crates/workshop-rs/tests/emitter.rs +++ b/crates/workshop-rs/tests/emitter.rs @@ -54,14 +54,22 @@ fn pinned_real_projects_emit_deterministically_and_reparse() { common::assert_residual_policy(case, "source-parse", &program.semantic_issues(&catalog)); if let Err(error) = workshop_rs::validate::validate_canonical_ids(&program, &catalog) { - common::assert_gap(case, workshop_rs::p0::P0Stage::CanonicalValidation, &error); + common::assert_gap( + case, + workshop_rs::real_projects::RealProjectStage::CanonicalValidation, + &error, + ); println!("{}: known canonical-validation gap: {error:?}", case.id); } let emitted = match emitter::emit(&program, &catalog, &locale) { Ok(text) => text, Err(error) => { - common::assert_gap(case, workshop_rs::p0::P0Stage::Emission, &error); + common::assert_gap( + case, + workshop_rs::real_projects::RealProjectStage::Emission, + &error, + ); println!("{}: known emission gap: {error:?}", case.id); continue; } diff --git a/crates/workshop-rs/tests/fixtures/README.md b/crates/workshop-rs/tests/fixtures/README.md index 0725956..74bcf0e 100644 --- a/crates/workshop-rs/tests/fixtures/README.md +++ b/crates/workshop-rs/tests/fixtures/README.md @@ -46,12 +46,12 @@ Tests read these files via `env!("CARGO_MANIFEST_DIR")`; do not edit them incidentally. A corpus change is a reviewed, evidenced change like any catalog data change and must be recorded here. -## P0 real-project source inputs +## Real-project source inputs The five pinned real-project Workshop outputs used by the required real-project scenario gate are vendored under `real-projects/`. Their source repositories, revisions, local paths, locales, and SHA-256 values are recorded in -`docs/evidence/raw-workshop-p0-v1.json`. They are source inputs, not acceptance +`docs/evidence/raw-workshop-real-projects-v1.json`. They are source inputs, not acceptance reports; residual classifications and pass/fail results are emitted by CI. ## Real-project admission diff --git a/crates/workshop-rs/tests/identity.rs b/crates/workshop-rs/tests/identity.rs index 0128cfc..32befac 100644 --- a/crates/workshop-rs/tests/identity.rs +++ b/crates/workshop-rs/tests/identity.rs @@ -12,7 +12,7 @@ use workshop_rs::catalog::{Catalog, Locale}; /// (`workshop-catalog-gen build`) recomputes it and the pin is updated /// deliberately together with the data. const PINNED_CATALOG_DIGEST: &str = - "4a4ad444069253758d1b6970f000226851c089a14d8393a7e3d9ebb23df9387a"; + "174a4ebc3f1250485ea55605ebb885016d84897368f65f1ad3818f9789728060"; #[test] fn committed_catalog_digest_is_pinned() { diff --git a/crates/workshop-rs/tests/locale.rs b/crates/workshop-rs/tests/locale.rs index 797c99f..054c1c9 100644 --- a/crates/workshop-rs/tests/locale.rs +++ b/crates/workshop-rs/tests/locale.rs @@ -46,7 +46,11 @@ fn pinned_real_projects_convert_between_supported_locales() { ) { Ok(converted) => converted, Err(error) => { - common::assert_gap(case, workshop_rs::p0::P0Stage::LocaleConversion, &error); + common::assert_gap( + case, + workshop_rs::real_projects::RealProjectStage::LocaleConversion, + &error, + ); println!("{}: known locale conversion gap: {error:?}", case.id); continue; } diff --git a/crates/workshop-rs/tests/parser.rs b/crates/workshop-rs/tests/parser.rs index cb6c2db..33311b1 100644 --- a/crates/workshop-rs/tests/parser.rs +++ b/crates/workshop-rs/tests/parser.rs @@ -36,7 +36,11 @@ fn pinned_real_projects_parse_with_expected_semantic_residuals() { .unwrap_or_else(|error| panic!("{} parse failed: {error:?}", case.id)); common::assert_residual_policy(case, "source-parse", &program.semantic_issues(&catalog)); if let Err(error) = validate::validate_canonical_ids(&program, &catalog) { - common::assert_gap(case, workshop_rs::p0::P0Stage::CanonicalValidation, &error); + common::assert_gap( + case, + workshop_rs::real_projects::RealProjectStage::CanonicalValidation, + &error, + ); println!("{}: known canonical-validation gap: {error:?}", case.id); } } diff --git a/crates/workshop-rs/tests/wir_expansion.rs b/crates/workshop-rs/tests/wir_expansion.rs index 3cf94ee..8c9cdcc 100644 --- a/crates/workshop-rs/tests/wir_expansion.rs +++ b/crates/workshop-rs/tests/wir_expansion.rs @@ -1,4 +1,4 @@ -//! WIR expansion and canonical-identity tests (#31): the M5 P0 surface is +//! WIR expansion and canonical-identity tests (#31): the supported Workshop surface is //! representable in Workshop IR, and catalog-backed validation rejects //! unknown or locale-tainted builtin references deterministically. diff --git a/docs/evidence/README.md b/docs/evidence/README.md index 722ef33..0dd61a2 100644 --- a/docs/evidence/README.md +++ b/docs/evidence/README.md @@ -1,6 +1,6 @@ # Real-project evidence -`raw-workshop-p0-v1.json` pins the five source repositories, revisions, raw +`raw-workshop-real-projects-v1.json` pins the five source repositories, revisions, raw artifact SHA-256 values, and vendored fixture paths. The evidence is exercised by the parser, emitter, and locale scenario tests against those local source inputs: diff --git a/docs/evidence/raw-workshop-p0-v1.json b/docs/evidence/raw-workshop-real-projects-v1.json similarity index 99% rename from docs/evidence/raw-workshop-p0-v1.json rename to docs/evidence/raw-workshop-real-projects-v1.json index cb11474..954e8a2 100644 --- a/docs/evidence/raw-workshop-p0-v1.json +++ b/docs/evidence/raw-workshop-real-projects-v1.json @@ -1,5 +1,5 @@ { - "schema": "raw-workshop-p0-corpus/v1", + "schema": "raw-workshop-real-projects/v1", "purpose": "Durable provenance and rerun manifest for workshop-rs#47 and wright#189", "reference_compiler_policy": "Generated artifacts are accepted only with the pinned command and toolchain below; direct raw artifacts are fetched verbatim from the pinned Git blob.", "redistribution": "The five pinned Workshop source inputs are vendored under crates/workshop-rs/tests/fixtures/real-projects; CI verifies their SHA-256 and emits acceptance evidence only in logs/artifacts.", diff --git a/docs/evidence/raw-workshop-p0-v1.md b/docs/evidence/raw-workshop-real-projects-v1.md similarity index 89% rename from docs/evidence/raw-workshop-p0-v1.md rename to docs/evidence/raw-workshop-real-projects-v1.md index 857962d..61f91a8 100644 --- a/docs/evidence/raw-workshop-p0-v1.md +++ b/docs/evidence/raw-workshop-real-projects-v1.md @@ -1,6 +1,6 @@ -# Raw Workshop P0 rerun procedure +# Raw Workshop real-project conformance rerun procedure -The machine-readable manifest in `raw-workshop-p0-v1.json` is the durable +The machine-readable manifest in `raw-workshop-real-projects-v1.json` is the durable corpus record for workshop-rs#47 and wright#189. It pins the source repository, revision, path or generated-output procedure, artifact digest, locale, build toolchain, reference compiler where applicable, and redistribution boundary. diff --git a/docs/provenance.md b/docs/provenance.md index 381dd3a..79e8c50 100644 --- a/docs/provenance.md +++ b/docs/provenance.md @@ -59,7 +59,7 @@ license, reviewed) is embedded in the dataset itself and surfaced by | Entry group | Evidence class | | --- | --- | -| en-US spellings of the M5 P0 surface | Transcribed from the Wright compatibility corpus workshop snapshots (pinned OverPy 9.7.10 en-US reference emissions) and the Wright M5 support matrix — classes 1/5 (reproducible behavior; upstream reference emission). | +| en-US spellings of the supported Workshop surface | Transcribed from the Wright compatibility corpus workshop snapshots (pinned OverPy 9.7.10 en-US reference emissions) and the Wright support matrix — classes 1/5 (reproducible behavior; upstream reference emission). | | `squareRoot`, receiver-call action/value spellings (`setMoveSpeed`, `isAlive`, …) | Pinned OverPy 9.7.10 en-US emission surface for the `.opy` forms (class 5). | | Chase family spellings (`Chase Global Variable Over Time`, `Chase Player Variable At Rate`, …) and their expected enum domains (`ChaseTimeReeval`, `ChaseRateReeval`) | Wright-authored OPY semantic manifest probe data (#109/#110), migrated into the canonical catalog so the standalone core resolves ambiguous bare members without any Wright tooling dependency (classes 1/5; canonical signature data is catalog-owned per ADR-0001 Decision 1). | | Rule event identities and filters (`global`, `eachPlayer`, the nine player events, `subroutine`, `EventTeam`, and `EventPlayer`) | User-provided Workshop export at commit `d854bf01fc7bbf3b2169f67408c07a8da8989ad6` (`other.events`, `other.eventTeams`, `other.eventPlayers`, and computed `other.eventSlots`), cross-checked against documented raw Workshop event blocks; the canonical WIR keeps existing parameterless `eachPlayer` input and requires the evidenced team/player filters for other filtered events. The `Player` filter's accepted union (`EventPlayer` slot/all or a canonical `Hero`) is represented explicitly by `EventTarget` (classes 1/2). | @@ -104,7 +104,7 @@ declared corpus is therefore complete and contains no silent exclusions. The `settings.workshop` namespace aliases (`workshop` / `地图工坊`) and the Wrecking Ball cooldown labels are pinned from the reacquired AI-PVE and Bastion -artifacts described by `docs/evidence/raw-workshop-p0-v1.json`; they are source-preserving +artifacts described by `docs/evidence/raw-workshop-real-projects-v1.json`; they are source-preserving custom data or producer aliases, not new builtin gameplay identities. ## Test fixtures (`crates/workshop-rs/tests/fixtures/`)