Add core validation, generation, slicing, feature extraction, and workspace metadata - #2
Merged
Merged
Conversation
PhysShell
pushed a commit
that referenced
this pull request
Jun 3, 2026
The follow-up P2 commit re-blessed both 80x20 terminal goldens by hand because its environment could not fetch crates (ratatui CONNECT 403), so the tests never ran. The guessed frames were one column off on the section-band row: under the new ceiling-division `fit`, the Solo section marker shifts by one column, which the blind re-bless did not capture, and both characterization tests failed. Regenerated both goldens from the actual rendered output and verified the full preview suite (50 passed) and `cargo test --workspace` green, with fmt/clippy clean. The code fixes themselves (#1 right-edge note skip, #2 ceiling fit, #3 all-voice bar classification) were correct and compile; only the goldens were wrong. https://claude.ai/code/session_016RxVPiPMnFjyV8HmepFWAT
This was referenced Jun 18, 2026
PhysShell
pushed a commit
that referenced
this pull request
Jun 21, 2026
…stence)
Promotes the web curation dock that ADR-0024/0026 deferred ("web curation —
later") to a concrete architecture over the shared UI core:
- extract griff-ui-core (ADR-0016's "when egui arrives" step); the piano-roll
keeps the strict Scene/Intent boundary, the dock is deliberately domain-aware
- egui as Scene renderer #2 (eframe, native + wasm), absorbing the M1 playground
- OPFS *.chunk.json tree + in-wasm manifest fold — browser corpus == CLI files
- RightsInfo.redistributable as a typed export gate, shared with the CLI
- ADR-0025 wasm-bindgen toolchain reused unchanged; native-first slice plan;
JS front retired only at capture-parity
Status: Proposed. Registered in the ADR index.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TTUbGjzD8ysnVnCJnZJE95
PhysShell
added a commit
that referenced
this pull request
Jul 29, 2026
…-circuit Regressions for the second exact-head re-review (fail against 6375e8b): #1 the whole artifact JSON graph must reject foreign fields, not only the plan root — rogue fields planted at every depth: - ledger_rejects_unknown_field_at_root / _in_batch / _in_event - ledger_rejects_unknown_field_in_action_payload (proves the *actual* serde version denies inside an internally-tagged variant, not just the attribute) - ledger_rejects_unknown_field_in_split_target - plan_rejects_unknown_field_in_embedded_batch (plan_rejects_unknown_field_in_assignment already passes — Assignment is strict — kept as boundary coverage.) #2 verify_plan must refuse a structurally invalid embedded batch *before* digest, fingerprint, or replay: - verify_plan_short_circuits_on_invalid_batch asserts only the structural refusal is returned, never UnknownDecisionSource / PlanDigestMismatch / DecisionDigestMismatch / DecisionProjectionMismatch. #3 an intra-batch duplicate event_id must be emitted exactly once: - intra_batch_duplicate_event_id_emitted_once (validate_ledger currently double-counts it via validate_batch + its own pass). Logic unchanged, so these are RED. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012T7SRMiXmZe5v1imtrKMPi
PhysShell
added a commit
that referenced
this pull request
Jul 29, 2026
#1 strict JSON across the whole artifact graph. deny_unknown_fields now also on DecisionsLedger, DecisionBatch, DecisionEvent, Action (internally tagged; the serde 1.0.229 in the lockfile denies rogue fields inside a variant payload while still accepting the `kind` tag — proven by ledger_rejects_unknown_field_in_action_payload), and SplitTarget. A foreign field at any depth is now rejected, not silently discarded before digesting. #2 verify_plan short-circuits a structurally invalid embedded batch: validate_batch(&plan.decision_batch)? runs first, so an invalid ordinal or a duplicate event_id refuses before any digest, fingerprint, or replay — the removed mid-function validate_batch no longer let those run. #3 an intra-batch duplicate event_id is emitted exactly once. validate_batch's positional check is split out (batch_order_errors); validate_ledger runs that per batch plus a single ledger-wide event_id uniqueness pass, so a duplicate (intra- or cross-batch) is reported once, not twice. Standalone validate_batch keeps its ordering + intra-batch-uniqueness contract. Includes an incidental rustfmt pass over the RED tests added in the previous commit. 45/45 tests pass; clippy (all=deny, pedantic=warn) and fmt clean under nix. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012T7SRMiXmZe5v1imtrKMPi
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Motivation
Description
core::eventwithValidationError,MIDI_7_BIT_MAX, constructors and checked operations (Pitch::new,Velocity::new,Tempo::new,TimeSignature::new,Ticks::checked_add/checked_sub),Bar::duration,Phrase::duration, and makeEvent::durationaconst fn, plus many unit tests covering validation and aggregation.core::featureimplementingphrase_featureswhich computes counts, total duration, pitch and velocity spans and returnsPhraseFeatureswith tests.core::generateimplementing deterministicgenerate_repeating_phrase,bar_duration_ticks, request/ pattern types, validation, and tests for generation edge cases.core::sliceimplementingTickRange,TimedEvent,timed_bar_events,timed_phrase_events, andslice_phrase_eventswith associated tests for slicing and absolute timing.core::lib, update package manifests (Cargo.tomlfiles) to includereadme,keywords, andcategoriesworkspace metadata and enable workspace propagation, and add a generatedCargo.lock.Testing
cargo test -p griff-coreverifyingevent,feature,generate, andslicebehaviors and edge cases, and all tests passed.cargo test --workspaceto ensure integration across members and packaging metadata changes, and the test suite completed successfully.Codex Task