chore(deps): Bump actions/checkout from 4 to 6#20
Closed
dependabot[bot] wants to merge 225 commits intomainfrom
Closed
chore(deps): Bump actions/checkout from 4 to 6#20dependabot[bot] wants to merge 225 commits intomainfrom
dependabot[bot] wants to merge 225 commits intomainfrom
Conversation
…er customization into three stages Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Fix _detect_cycles to emit one cycle per complete oscillation (up→down pair) rather than accumulating all phases into a single mega-cycle. This unblocks pattern/phrase/BPM-transition detection for real funscripts. Add ui/ layer with clean deployment-target separation: - ui/common/: framework-agnostic WorkItem + Project models, 38 unit tests - ui/streamlit/: 4-tab app (Assessment, Work Items, Edit, Export) with modular panels for assessment inspection and interactive section tagging Rename test funscripts to .original.funscript convention and add VictoriaOaks_stingy. Add output/ to .gitignore for build artifacts. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Fix _detect_cycles in analyzer.py: was collapsing all phases into one
mega-cycle; now correctly emits one cycle per up→down oscillation,
enabling real phrase/BPM-transition detection across all three test scripts.
- Add ui/ layer with clean deployment-target separation:
ui/common/ — framework-agnostic WorkItem + Project models, 38 unit tests
ui/streamlit/ — 4-tab Streamlit app (Assessment, Work Items, Edit, Export)
with modular panels for assessment inspection and interactive tagging
- Add output/ to .gitignore; rename test funscripts to .original.funscript
convention; add VictoriaOaks_stingy test file.
- Remove references to removed config fields (performance_cycle_threshold, break_cycle_threshold) and removed output sections (auto_mode_windows, beat_windows) - Document fixed cycle detection: one cycle = one complete oscillation - Add real-world results table for all three test funscripts - Update AnalyzerConfig table to current fields only - Fix MD040/MD060/MD032 linter warnings (code block languages, table pipe spacing, blank lines around lists) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Covers test_analyzer, test_transformer, test_customizer, test_utils, and the ui/common/tests suite. Includes per-class descriptions, how to run, fixture notes, and accurate per-module test counts (114 total). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove outdated references (auto_mode_windows, beat_windows, performance_cycle_threshold, old visualizer path). Document the current five-stage analysis pipeline, Streamlit UI workflow (analyze → review → tag → export → CLI transform/customize), and updated project structure including ui/ layer. Note that UI-integrated transform/customize is coming soon. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Extend _ConfigWindow tuple to carry per-window config overrides dict
- _load_ts_file() now captures optional "config" key from window JSON
- customize() uses _find_window() + _effective_config() to merge global
CustomizerConfig with per-window overrides for both perf and break passes
- Final smoothing pass also uses per-window effective lpf values
- WorkItem.to_window_dict() now includes "config" when non-empty, so UI
exports carry per-item config into the customizer's window JSON
- Update test_manual_perf_window_loaded to expect 3-tuple (s, e, {})
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Streamlit deprecated use_container_width=True on st.dataframe calls; errors out after 2025-12-31. Replaced with width="stretch" in all 5 affected call sites across assessment.py and app.py. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- ui/common/pipeline.py: run_pipeline() chains assess → transform → customize in one call, returning PipelineResult with all output paths and merged log lines; handles missing assessment with clear error - suggested_updates/README.md: documents TransformerConfig fields, CLI and programmatic usage, and test coverage - user_customization/README.md: documents window types, priority, window JSON format with optional "config" key, CustomizerConfig fields, and test coverage - tests/test_integration.py: 9 end-to-end tests covering the full assess → transform → customize chain, run_pipeline() correctness, per-item config round-trip through the pipeline, and error handling Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
When the assessment yields ≤ 1 phrase for content longer than 10 minutes (e.g. a uniform-tempo script with no BPM transitions), Project._init_work_items() now falls back to splitting the duration into 5-minute neutral windows instead of producing a single unusable work item. - work_items.py: add items_from_time_windows(duration_ms, window_ms, bpm) - project.py: _init_work_items() applies fallback for long single-phrase content - test_work_items.py: 7 new tests for items_from_time_windows - tests/README.md: update test count to 130 total Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…I.md - pipeline subcommand: assess -> transform -> customize in one shot, with --output-dir, --perf/--break/--raw/--beats, --transformer-config, --customizer-config flags - config --analyzer: dumps default AnalyzerConfig to JSON alongside the existing --customizer and transformer (default) options - test command: now discovers both tests/ and ui/common/tests/ so `python cli.py test` runs all 130 tests - CLI.md: full reference covering pipeline, each individual step, visualization, config dump, window JSON format, and test commands Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
test_cli.py covers every CLI subcommand via subprocess: - TestCliAssess: exit code, output JSON, default path, summary, config flag - TestCliTransform: exit code, valid funscript, positions in range, config flag - TestCliCustomize: exit code, valid funscript, perf window, missing file ok - TestCliPipeline: exit code, all three outputs, positions, perf window, summaries - TestCliConfig: transformer/customizer/analyzer dump and config round-trip Removed recursive TestCliTest class (calling `cli.py test` from within the test suite it discovers would spawn processes exponentially). Updated tests/README.md and CLI.md to reflect 151 total tests. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Closes all 7 items from the pipeline-integration work order: 1. Per-item config architecture — extend window JSON with optional "config" key; customizer merges global + per-window overrides via _find_window() + _effective_config() 2. Streamlit use_container_width deprecation — replaced with width="stretch" 3. ui/common/pipeline.py — run_pipeline() orchestrates all three stages 4. Module READMEs — suggested_updates/ and user_customization/ documented 5. End-to-end integration tests — 9 tests covering the full chain 6. Uniform-tempo fallback — 5-minute time-window segmentation for single-phrase content longer than 10 minutes 7. CLI — pipeline subcommand, config --analyzer flag, full test suite discovery, CLI.md reference, 21 subprocess-based CLI tests Total: 151 tests (85 core + 21 CLI + 45 UI-layer), all passing. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…gator
New modules:
- visualizations/chart_data.py: pure data layer; computes velocity and
amplitude colour series, annotation bands for all 5 assessment types,
slice helpers for zoom windows
- visualizations/funscript_chart.py: reusable Plotly-based FunscriptChart;
renders colour-coded motion line, background annotation bands, selection
highlight with outside-selection dimming, BPM transition markers
- ui/common/view_state.py: ViewState dataclass — shared zoom window,
selection range, colour mode, annotation toggles across all panels
- ui/streamlit/panels/viewer.py: three-panel viewer (Original / Proposed /
Committed) with sync; display options toolbar, timestamp-entry zoom
controls, Plotly box-select -> selection, Commit button triggers re-assess
- ui/streamlit/panels/assessment_nav.py: tabbed navigator for phases,
cycles, patterns, phrases, BPM transitions; Focus button zooms viewer
to that item
Wired into app.py as a new first tab ("Viewer"); adds ViewState and
proposed_actions to session state; commit path re-runs full assessment.
Tests:
- tests/test_chart_data.py: 26 tests for chart data computation and helpers
- ui/common/tests/test_view_state.py: 15 tests for ViewState logic
plotly>=5.18 added to requirements.txt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…x chart rendering - Stack Original/Proposed/Committed charts vertically for easy pattern comparison - Remove Phases and Cycles from annotation toolbar (not useful at this zoom level) - Default show_cycles to False in ViewState - Display options expander now defaults to open so controls are visible - Wrap st.plotly_chart in try/except to handle use_container_width deprecation in newer Streamlit Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Rename viewer tab to "Phrase Selector"; move assessment navigator to own tab - Phrase Selector takes full page width (no right-column split) - Chart uses dragmode=pan so drag scrolls left/right naturally - Scroll ◀/▶ buttons shift the zoom window by 1/3 of its span - Per-segment coloured lines (blue->red velocity / amplitude heatmap) - Human-readable MM:SS x-axis via explicit tickvals/ticktext - Phrase boxes: bordered vrects always shown; selected phrase highlighted gold - Click a chart point -> selects enclosing phrase - Phrase info panel: Start / End / Duration / BPM / Pattern / Cycles metrics - Phrase editor placeholder shown when a phrase is selected - show_transitions defaults to False (no toolbar toggle; future auto-apply) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…view fallback - Threshold 600 covers typical zoomed-phrase density (~250 points in 60s) - Full-view fallback now uses coloured markers (size 4) instead of grey line, preserving the velocity/amplitude heatmap at all zoom levels Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Problem: Timeline1 produced 34 phrases (P1=86s, P34=63s, 32 tiny 1-7s fragments).
Root cause: phrases grouped only by cycle direction label, ignoring stroke depth.
Fixes:
- Cycle now stores amplitude_range (max_pos - min_pos of actions in that cycle)
- _detect_phrases tracks running-average amplitude per phrase; breaks when a
cycle deviates by more than amplitude_tolerance (default 0.30) from the avg
- _merge_short_phrases post-pass merges any phrase < min_phrase_duration_ms
(default 20s) into its shortest neighbour
- AnalyzerConfig gains amplitude_tolerance and min_phrase_duration_ms params
- Streamlit sidebar exposes both as interactive controls:
Min phrase length slider (5-60s)
Amplitude sensitivity select (low/medium/high)
Timeline1 result: 34 phrases -> 7 (default) or ~9 (high sensitivity, min=15s)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- docs/guide/00-overview/index.md: placeholder + writing brief for workflow overview page (mermaid diagram, why you care, worked example TBD) - docs/guide/00-overview/concepts.md: definitions for phrase, cycle, pattern, transform, behavioral tags; mermaid concept hierarchy - docs/guide/01-getting-started/install.md: full tutorial — download, extract, launch, confirm; all 3 OS; troubleshooting table - docs/guide/01-getting-started/your-first-funscript.md: full tutorial — load file, watch analysis, read chart, scroll phrase list - docs/guide/_journey-map.md: canonical 8-node task-based journey map reference (one snippet per page) Page template: journey breadcrumb (top) + overview + why + prerequisites + steps + you should see + what you did + troubleshooting + next step + you might be wondering + related concepts + journey map footer Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Strip inline troubleshooting tables from install.md and your-first-funscript.md - Replace with single redirect line to dedicated troubleshooting page - docs/guide/troubleshooting/install.md: 8 questions in natural user language, each with example search phrasings; ends with contribution invite - docs/guide/troubleshooting/loading-a-script.md: 6 questions covering file-not-found, one phrase, blank chart, frozen analysis, phrases:0, wrong numbers - Pattern: questions written how a frustrated user thinks, not how a manual reads; help assistant as escalation; "you're helping the next person by asking" Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- docs/art/generate_charts.py: generates doc chart PNGs from test funscripts + assessment JSON; run at release time, not CI - docs/art/README.md: documents when to run, how to add new charts, caption file format, generated vs screenshot asset inventory - docs/guide/media/your-first-funscript--phrase-overview.png: full waveform with 34 phrase bounding boxes color-coded by BPM - docs/guide/media/reading-assessment--phrase-detail.png: phrase 28 close-up (2:00-2:07, 14 cycles, 125 BPM) - *.caption.md sidecar files for Carta image ingestion / visual RAG Caption files carry: image path, source page, task node, type, search tags, LLM-generated description. Pattern: every PNG ships with a .caption.md that makes it queryable by the help assistant. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace TODO screenshot placeholder with generated PNG. Add callout note connecting the color legend to the actual chart. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add motion-intensity heatmap strip (Turbo colorscale) above the main chart with white phrase-boundary markers; margins aligned to chart - Move Phrase detection settings expander into Phrase Selector tab (above heatmap, collapsed by default); sidebar now reads from session state - Fix click-to-select: point clicks on the Plotly chart now find the enclosing phrase and open the Phrase Editor (was box-drag only) - Rename phrase table section to "Funscript Selection Details" - Add troubleshooting docs: media-player, transforms, export, index Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Phrase Editor: 3-state Device Safety control (Off / Fix errors / Fix all) on by default; applies Performance transform to preview and Accept chain - Export: removed Show original overlay; cleaned up device-aware UI noise; device-aware fix lives in Run Full Pipeline expander (Stage 1/2 + fix) - Halve Tempo moved to top of Structural category (default selection) - Quality gate now informational-only with pointer to fix locations Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Phrase Editor: replace 3-state select_slider with single "Enforce device safety" checkbox (on by default); preview updates live - Export pipeline: remove Stage 2 / Window Customizer; device-aware fix reduced to two checkboxes (errors / warnings) with auto velocity cap - Quality gate is now informational only — no Fix All button - Cleans up dead _ds_vel session state key Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Replace single download button with Device / Estim tabs
- Device tab: "Apply device safety" checkbox + Performance cap at 200 pos/s
applied to all phrases with velocity issues on download
- Estim tab: clean funscript (no mechanical cap) + note pointing to
funscript-tools for multi-channel alpha/beta/pulse/volume generation
- Add _build_download_bytes_device() for device-safe export path
- Output filenames: {name}.device.funscript / {name}.estim.funscript
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Delete internal commercial planning docs (roadmap-multiuser, architecture-web). Strip "paid SaaS tier", "web mode", "local mode" framing from code comments and internal docs. Functional code unchanged. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove video/audio binaries from tracking (mp4, mp3, wmv). Add test_media_private/, ml_video_examples binaries, test_videos/ to gitignore. Files remain on disk, not in repo. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… files Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- cli.py _coerce: fix float parsing (int("1.3") raised ValueError,
bypassing float() — now tries float() first)
- app.py: inject demo/examples/*.funscript into sidebar selectbox
always visible as 📋 entries below recents; disappear if deleted
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
AI voiceover + screen-record using BBB demo funscript. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Removes malformed raw-list funscripts. Replaces with:
demo/big_buck_bunny.raw.funscript — 2211 actions, 16 phrases,
all 8 behavioral tags present
demo/big_buck_bunny.forged.funscript — same structure, each issue fixed
Updates _DEMO_FILES path in app.py to match new location.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Both folders contain private or generated content that should not be tracked. Demo funscripts will be generated at first launch. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
demo/generate_demo.py: generates big_buck_bunny.raw/forged.funscript on demand. ensure_demo_files() called once per session on startup — silent no-op if files already exist, never blocks launch on failure. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- pyproject.toml: version source of truth (0.0.10), ruff config
- .github/workflows/ci.yml: lint (ruff) + test on every push/PR to main
- .github/workflows/release.yml: Windows now builds NSIS installer
(FunscriptForge-v{VERSION}-win.exe) instead of zip; version extracted
from pyproject.toml; release artifacts use versioned filenames
- .github/workflows/docs.yml: MkDocs Material → GitHub Pages on docs change
- installer/funscriptforge.nsi: NSIS script; installs to Program Files,
adds Start Menu + Desktop shortcuts, proper Add/Remove Programs entry
- mkdocs.yml: MkDocs Material config wired to existing docs/guide/ tree
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- release.yml: add test gate job (lint + unit + integration) that all platform builds depend on; redundant per-build test steps removed - CONTRIBUTING.md: dev setup, SSH-not-HTTPS, secrets handling, branch conventions, release flow with Mermaid diagram, local build instructions, multi-identity git config, open source author credits table with license compatibility notes Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…bot, GAPS.md - release.yml: NSIS now runs via Push-Location installer/ (was running from repo root, OutFile path was wrong); macOS and Linux artifacts now include version in filename (FunscriptForge-vX.Y.Z-*); release job version extraction replaced fragile xargs with direct echo - .github/dependabot.yml: weekly updates for pip + GitHub Actions - .env.example: documents FUNSCRIPT_PLUGINS_ENABLED and launcher-set vars - GAPS.md: gap analysis per spec 01 — implemented vs deferred vs required before alpha; pre-alpha checklist (RELEASES_PAT, branch protection, first full pipeline run) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v4...v6) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
Author
LabelsThe following labels could not be found: Please fix the above issues or remove invalid values from |
Author
|
OK, I won't notify you again about this release, but will get in touch when a new version is available. If you'd rather skip all updates until the next major or minor version, let me know by commenting If you change your mind, just re-open this PR and I'll resolve any conflicts on it. |
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.
Bumps actions/checkout from 4 to 6.
Release notes
Sourced from actions/checkout's releases.
... (truncated)
Changelog
Sourced from actions/checkout's changelog.
... (truncated)
Commits
de0fac2Fix tag handling: preserve annotations and explicit fetch-tags (#2356)064fe7fAdd orchestration_id to git user-agent when ACTIONS_ORCHESTRATION_ID is set (...8e8c483Clarify v6 README (#2328)033fa0dAdd worktree support for persist-credentials includeIf (#2327)c2d88d3Update all references from v5 and v4 to v6 (#2314)1af3b93update readme/changelog for v6 (#2311)71cf226v6-beta (#2298)069c695Persist creds to a separate file (#2286)ff7abcdUpdate README to include Node.js 24 support details and requirements (#2248)08c6903Prepare v5.0.0 release (#2238)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)