- Started batch desktop CPU throughput/accuracy evaluation work.
- Added tests for PaddleOCR CTC decoding, throughput summary, model output layout selection, and PaddleOCR metadata parsing.
- Implemented PaddleOCR ONNX evaluation, batch throughput measurement, and candidate config metadata paths.
- Fixed a LightSVTR regression caused by treating
[time,batch,class]output as[batch,time,class]. - Ran all Python tests:
pixi run python -m unittest discover -s tests -vpassed 23 tests. - Ran full CPU batch report with TrOCR imported predictions:
/tmp/medlog_bare_benchmark/candidate_results_cpu_batch_with_trocr.jsonand/tmp/medlog_bare_benchmark/candidate_results_cpu_batch_with_trocr.txt. - Started PARSeq integration work. Read planning-with-files and TDD guidance, then began verifying the real checkpoint/API before coding.
- Added failing PARSeq integration tests first, then implemented
export_parseq_onnx.pyandevaluate_parseq_onnx.py. - Verified PARSeq unit tests:
pixi run python -m unittest tests.test_parseq_integration -vpassed 4 tests. - Exported PARSeq to
exported_candidates/parseq.onnxplus external data fileexported_candidates/parseq.onnx.data. - Added direct PARSeq support to
run_candidate_evaluation.py, then verified integrated report:/tmp/medlog_bare_benchmark/candidate_results_cpu_batch_parseq_direct.jsonand/tmp/medlog_bare_benchmark/candidate_results_cpu_batch_parseq_direct.txt. - Implemented FastViT-T8 CTC candidate with multi-scale feature fusion, two-stage training, ONNX export metadata, and
torch_ctc_onnxrunner support. - Ran FastViT no-pretrained CPU smoke train/export:
/tmp/fastvit_ctc_smoke/fastvit_t8_ctc.onnx. - Ran FastViT smoke candidate evaluation:
/tmp/fastvit_ctc_smoke/results.jsonand/tmp/fastvit_ctc_smoke/results.txt. - Added
kaggle_candidate_finetune_kernelfor Kaggle-side all-candidate reporting and fine-tuning of trainable architectures. - Verified plan-only run:
pixi run python kaggle_candidate_finetune_kernel/kaggle_candidate_finetune.py --output-dir /tmp/kaggle_candidate_plan --plan-only --candidates all. - Pushed Kaggle candidate fine-tune kernel version 2; remote status reported
KernelWorkerStatus.RUNNING.
- Pulled Kaggle candidate fine-tune results from
/tmp/medlog_kaggle_candidate_results/candidate_finetuneand analyzed FastViT/LightSVTR accuracy, capacity, and local CPU latency. - Added failing tests first for PaddleOCR Kaggle trainable candidates and PaddleOCR config materialization.
- Implemented PaddleOCR Kaggle dispatch support for
ppocrv5_mobile_rec,ppocrv5_server_rec,repsvtr, andsvtrv2_server. - Verified PaddleOCR candidate plan:
pixi run python kaggle_candidate_finetune_kernel/kaggle_candidate_finetune.py --output-dir /tmp/kaggle_candidate_plan_paddle --plan-only --candidates all. - Verified PaddleOCR config materialization smoke under
/tmp/kaggle_paddle_config_smoke. - Added Android instrumentation benchmark for FastViT ONNX Runtime CPU/NNAPI and helper script
scripts/run_fastvit_nnapi_benchmark.sh. - Compiled Android benchmark:
./gradlew :app:compileDebugAndroidTestKotlin. - Ran FastViT reparameterized ONNX on connected M2012K11C:
CPU
mean_ms=49.70 p50_ms=50 p95_ms=51 throughput_sps=20.12; NNAPImean_ms=49.20 p50_ms=49 p95_ms=50 throughput_sps=20.33;nnapi_cpu_disabledone-run smokemean_ms=52.00. - Pushed Kaggle candidate fine-tune kernel version 3; remote status reported
KernelWorkerStatus.RUNNING. - Probed Kaggle v3 while running: output files still reflected the previous run and logs were empty.
- Added a failing test and fix for PaddlePaddle GPU installation, defaulting Kaggle to
paddlepaddle-gpu==3.3.0via the official CUDA 12.6 wheel index. - Pushed Kaggle candidate fine-tune kernel version 4 with the official CUDA 12.6 Paddle wheel index; remote status reported
KernelWorkerStatus.RUNNING. - Added failing tests and fixes for the v4 CUDA dependency conflict: FastViT now runs before PaddleOCR, and Paddle installs with
--no-depsunless--paddle-install-depsis explicitly set. - Pushed Kaggle candidate fine-tune kernel version 5 with FastViT-before-Paddle ordering and Paddle
--no-deps; remote status reportedKernelWorkerStatus.RUNNING. - Started formal Android package rename and debug-device install task.
- Confirmed connected adb device:
6b9f2b84(M2012K11C). - Renamed Android app/source package to
com.driezy.medlog, including Gradlenamespace/applicationId, Kotlin packages/imports, manifest actions, shortcuts, widget config class names, benchmark script package names, and Room schema export directory. - Verified
./gradlew :app:assembleDebug,./gradlew :app:installDebug, and./gradlew :app:compileDebugUnitTestKotlin :app:compileDebugAndroidTestKotlin. - Launched
com.driezy.medlog/.ui.MainActivityon M2012K11C; process21676ran in foreground with no recent fatal logcat entries for the new package. - Optimized OCR settings UI before commit by extracting the repeated model option card, moving visible badge/spec labels into string resources, and cancelling
SevenSegmentRecognizer's settings collection scope on close. - Verified optimization with
./gradlew :app:ktlintCheckand./gradlew :app:compileDebugKotlin :app:compileDebugUnitTestKotlin :app:compileDebugAndroidTestKotlin. - Started Material Expressive home layout implementation slice focused on layout hierarchy, emphasized typography, surface elevation, and primary action placement.
- Completed the home layout slice: Today overview now owns progress, streak, next-dose, and take-all action; empty state no longer duplicates the add action with a FAB.
- Started HealthScreen Material Expressive slice focused on OCR hero action, health metric sections, supporting recent-record hierarchy, and emphasized metric typography.
- Completed the HealthScreen slice: added a primary OCR scan hero with manual-entry secondary action, wrapped stats in a health metrics section, lowered recent records into supporting content, and separated emphasized metric values from smaller unit labels.
- Confirmed OCR processing overlay and HealthScreen loading state already use Material3 Expressive
LoadingIndicator. - Verified HealthScreen changes with
./gradlew :app:compileDebugKotlin,./gradlew :app:ktlintCheck,./gradlew :app:assembleDebug,./gradlew :app:installDebug, and a no-fataladb logcatcheck after launchingcom.driezy.medlog/.ui.MainActivity. - Completed the broader Material Expressive pass: Home now defaults to "Now" and "Later today" task groups with PRN separated, time-period group containers use flat surface hierarchy, and Settings is consolidated into the requested Appearance / Reminders / OCR & Health / Widgets / Data & About containers.
- Re-verified with
./gradlew :app:compileDebugKotlin,./gradlew :app:ktlintCheck,./gradlew :app:assembleDebug,./gradlew :app:installDebug, and launchedcom.driezy.medlog/.ui.MainActivityon M2012K11C with no recent fatal logcat entries. - Completed a Material Expressive micro-motion pass after checking current official Compose Material3 motion guidance: Home progress digits, medication status confirmation, OCR content swaps, Add Medication dynamic form fields, Settings expand/collapse groups, and shared animated list items now use
MotionSchemespatial specs for movement/size and effects specs for alpha/color. - Installed the micro-motion build on M2012K11C and launched
com.driezy.medlog/.ui.MainActivity; no recent fatal logcat entries were found. - Started current lint cleanup after
:app:lintDebugreport showed 2 errors and 18 warnings despite Gradle success due to lint abort being disabled. - First post-upgrade lint run failed because AGP 9.2.1 requires Gradle 9.4.1; updated the Gradle wrapper URL and checksum before retrying.
:app:lintDebugpassed with "Lint found no errors or warnings"; parsedapp/build/reports/lint-results-debug.xmland confirmedtotal=0.- Combined ktlint/test/assemble run failed once at
:app:packageDebug; isolated:app:packageDebug --stacktracethen passed, so continued by suppressing the remaining JVM test warning via-Xshare:off. - Re-ran
./gradlew :app:ktlintCheck :app:testDebugUnitTest :app:assembleDebug; build passed cleanly with no visible warning output. - Re-ran
./gradlew :app:lintDebugafter build-script changes; lint passed with no errors or warnings and XMLlint_issues=0. - Installed debug APK on connected M2012K11C (
6b9f2b84), launchedcom.driezy.medlog, confirmed process startup, and found no recent fatal AndroidRuntime entries for the app. - Pushed
48e81b9 Resolve Android lint warnings; GitHub CI passed ktlint, unit tests, and Android Lint, then failed atBuild Debug APKwithPackageAndroidArtifact$IncrementalSplitterRunnable. - Verified local
./gradlew clean :app:assembleDebug --stacktracepasses; updated CI and release workflows to opt JS actions into Node 24 and run clean APK builds with stacktraces. - GitHub CI for
1891a37passed, but still emitted a Node 20 deprecation annotation because v4 JS actions were merely forced onto Node 24. Checked upstream tags and upgraded CI/release actions to current Node 24-capable major versions. - Started deterministic debug seed data and all-page Material Expressive audit request. Stopped the interrupted local
gh run watchprocess; GitHub Release run forv1.15.5was still in progress at handoff. - Added red
SeedDataFormatTest, then implemented debug-onlySeedDemoDataUseCase, deterministicSeedDemoCalendar,SeedDemoProfile, andDebugSeedReceiver. - Verified
SeedDataFormatTestpasses. Installed debug APK on6b9f2b84, seeded via explicit adb broadcast withreset=true profile=standard, and queried copied Room database: medications=5, logs=8, health_records=6, today_taken_scheduled=3/7, today_taken_all=4/8, low_stock=2, health latest values for all sixHealthTypeentries, orphan_logs=0. - Unified the first scanner/entry surface pass: camera permission empty state, OCR/health OCR/QR guidance pill, QR viewfinder overlay, OCR flash button, Home QR entry, Health OCR toolbar entry, Add Medication OCR entry, and QR dialog import/share/replace actions. Verified with ktlint, unit tests, assemble, install, adb seed, and copied Room database queries; no screenshot/visual check used.
- Switched code-level Material audit away from long Android lint runs. Standardized top-level page primary actions to right-side
ExtendedFloatingActionButtonwith labels on Home, Health, History, Drugs, and Diary; keptVibrantFloatingActionButtononly inside the OCR camera surface as an in-context capture action. Flattened remaining low-priorityElevatedCardusages in PRN, Health BMI/chart, and Settings widget picker intosurfaceContainerLowcards. - Applied title/FAB/I18N audit: Health and Diary now use collapsible
LargeTopAppBarlike other top-level destinations; Health adds a secondarySmallFloatingActionButtonfor manual entry while keeping scan as the labeled primary FAB. Added missing Japanese and Korean strings for Home groups, Health OCR hero/sections, OCR states, and OCR model settings; XML/i18n key parity checks, compile, ktlint, seed format test, and debug install all passed. - Clarified and corrected OCR scan-frame behavior: the previous camera frame was visual guidance only while OCR processed the full captured image. Added
OcrRecognitionRegionso medication OCR and health OCR now crop the captured bitmap to the frame-shaped center region before ML Kit, seven-segment CRNN, and LCD display detection run; medication uses a wide text frame and health uses a device-display frame. Updated localized hints to say content should be inside the frame, added region unit tests, and verified compile, ktlint, assemble, tests, and debug install. - Added a pre-capture readiness panel for OCR camera flows with frame-fill, hold-steady, and glare-avoidance guidance. Added
OcrFrameInputPreprocessorso the cropped frame image is normalized to a model-friendly long-edge range before OCR variants/model inference, with sampled luminance/contrast metrics logged for non-visual diagnosis. Verified XML/i18n parity, compile, ktlint, targeted OCR tests, assemble, and debug install. - Started OCR result grouping and home hierarchy refinement. Checked current official Material/Android guidance for M3 Expressive, emphasis, tonal elevation, FAB variants, top app bars, and Google Sans Flex / variable font direction.
- Parallel Gradle verification triggered KSP cache/file-generation corruption in
app/build/kspCaches/debug; stop running KSP-backed Gradle tasks in parallel and clear generated KSP cache before retrying serial verification. - Completed OCR result grouping by recognition source/model, strengthened low-stock warning surfaces, allowed important medication names to wrap instead of single-line ellipsizing, and removed negative tracking from display typography.
- Verified serially with
:app:compileDebugKotlin, targetedOcrRecognitionOutputTest,:app:ktlintCheck,:app:assembleDebug,:app:installDebugon6b9f2b84, app launch, no recentAndroidRuntime/FATAL EXCEPTION, and full:app:testDebugUnitTest. - Started theme-layer Flex font integration. Current approach: use Compose
ui-text-google-fontsand one sharedMedLogFontFamilyapplied to baseline and emphasized typography roles. - Adjusted implementation to bundle Google Sans Flex TTF weights locally instead of using runtime downloadable fonts, then wired
MedLogFontFamilyinto every baseline and emphasizedTextStyle. - Verified Flex font integration with
:app:compileDebugKotlin, targetedMedLogTypographyTest,:app:ktlintCheck, full:app:testDebugUnitTest,:app:assembleDebug,:app:installDebugon6b9f2b84, app launch, and no recentAndroidRuntime/FATAL EXCEPTION. - Started widgets/notifications/data settings UX pass. Initial audit: widget previews are static vector placeholders with fake exact times; reminder settings lack an at-a-glance summary; backup/restore are plain list items despite restore being destructive.
- Checked GitHub Actions Gradle caching strategy. Current workflows already used
gradle/actions/setup-gradle, but split ktlint/tests/lint/package into separate Gradle invocations and still ranclean assemble*. - Updated CI and release workflows so GitHub Actions performs ktlint, unit tests, Android lint, and APK assembly in one cache-aware Gradle invocation with
--build-cache --configuration-cache --stacktrace; removed clean builds and added debug APK artifact upload. - Verified workflow YAML parses locally and confirmed no
clean assemble*command remains in.github/workflows. - Added a red
MaterialSymbolsMigrationGuardTest, confirmed it failed on the old Compose Material Icons dependency/imports and missing XML icon set, then migrated icon usage to local Material Symbols XML drawables. - Generated 101
ic_symbol_*.xmldrawables from Material Symbols Rounded paths and centralized rendering through explicitMedLogIcon(icon = ...); removed the incorrect fakeIcon(imageVector: Int)compatibility layer and guarded against it in tests. - Removed
material-icons-extendedfrom Gradle dependencies and replaced allIcons.*imports/usages across navigation, scanning, home, settings, and the remaining modules withMedLogIcons. - Optimized build/CI behavior by increasing Gradle daemon heap to 4G with ParallelGC, keeping GitHub Actions on
setup-gradle, disabling lint's expensiveVectorPathcheck for official Material Symbols vectors, and keeping Gradle executions serial to avoid KSP cache contention. - Fixed all current lint warnings: debug seed receiver exported warning, OCR result count pluralization, unused strings, KTX bitmap pixel access, and external vector path analysis.
- Verified
:app:compileDebugKotlin :app:lintDebug, parsed lint XML withlint_issues=0, and ran:app:ktlintCheck :app:testDebugUnitTest :app:assembleDebugsuccessfully; warm assemble completed in 8s and final combined verification in 19s. - Checked current official Google Fonts Material Symbols and Android Compose icon guidance. Android now recommends Google Font Icons / Material Symbols XML from the Android tab instead of the old Compose
material-iconsartifacts. - Confirmed the provided family download URL is a font/ligature asset path, not the runtime model MedLog wants for app icons. MedLog keeps icons as local VectorDrawable XML rendered through
MedLogIconandpainterResource. - Added
scripts/update_material_symbols.mjsto batch-regenerate the 101 Material Symbols Rounded VectorDrawable XML files andMedLogIcons.kt, with generated-source comments in every output file. - Added
docs/material-symbols.mddocumenting the source, update workflow, and rules against runtime symbol fonts,androidx.compose.material.icons,material-icons-extended, and fakeIcon(imageVector: Int)overloads. - Added a red-then-green reproducibility guard in
MaterialSymbolsMigrationGuardTest; targeted guard test passed after adding the script, generated markers, and docs. - Verified the Material Symbols sourcing iteration with
./gradlew :app:compileDebugKotlin :app:lintDebug :app:ktlintCheck :app:testDebugUnitTest :app:assembleDebug; lint reported no errors or warnings. - Added failing guard coverage for the two Material Symbols enhancements: selected top-level navigation must use
fill=1variants, and large display symbols must use 40/48dp optical-size resources. - Extended
scripts/update_material_symbols.mjsto generate 112 XML symbols total: 101 baseline 24dp icons, 6 selectedfill=1navigation icons, and 5 optical-size display icons. - Wired selected variants into bottom navigation, rail, and drawer destinations; wired optical-size variants into the drawer brand icon, OCR empty state, Health empty state, Drugs empty state, and the welcome confirmation moment.
- Re-ran targeted
MaterialSymbolsMigrationGuardTest; the new state/optical-size checks passed. - Started M3 Expressive motion physics pass from the May 2025 guidance: keep the product on
MotionScheme.expressive(), use spatial tokens for movement/size and effects tokens for opacity/color, and avoid legacy duration/easing for custom motion hotspots. - Added failing
MotionSystemGuardTest, then migrated navigation transitions, welcome pager/entry/pulse motion, History color transitions, and Medication Detail adherence color transitions toMaterialTheme.motionSchemespring tokens. - Verified motion changes with targeted
MotionSystemGuardTest, then ran:app:ktlintCheck, targeted motion/icon guard tests, and:app:assembleDebug; installed and launched the debug APK on6b9f2b84. - Android lint was attempted twice after the icon/motion work, but both runs stalled for more than 10 minutes in lint analysis/report generation. The verified compile/ktlint/tests/assemble/install path passed; lint needs a separate tooling-performance investigation.
- Started Material 3 Carousel adoption analysis for the Android app.
- Read the planning-with-files skill, checked existing planning files, and appended a dedicated analysis phase without overwriting prior OCR/Material work.
- Inspected current Compose screens, screenshots, horizontal-scroll sites, widget preview components, and local Material3 carousel classes.
- Identified Health metrics and Settings widget previews as the strongest candidates, with Drugs featured categories as a secondary candidate and several task/text-heavy surfaces as explicit non-candidates.
- Started implementation goal for Carousel optimization slice; using test-first guard coverage before production UI changes.
- Added red
CarouselAdoptionGuardTest; it failed as expected because Health metrics and Settings widget previews were still non-carousel layouts. - Replaced Health metrics' horizontal stat row with
HorizontalUncontainedCarousel, keeping health filter chips unchanged. - Replaced the vertically stacked Settings widget picker cards with a
WidgetPreviewCarouselusingHorizontalCenteredHeroCarousel. - Verified red-to-green targeted guard test,
:app:ktlintCheck,:app:assembleDebug, full:app:testDebugUnitTest, andgit diff --check. - Audited dynamic color/color role implementation against current official Compose Material3 color scheme roles and local theme/UI usage. Result: dynamic wallpaper colors are implemented for Compose screens, but the static fallback role table and some custom/non-Compose surfaces are not fully aligned with latest role coverage.
- Started dynamic color/color-role optimization goal and added red
ColorRoleGuardTestcovering current M3 role coverage, hardcoded/ad hoc color usage, notification tinting, and bare Glance widget theming. - Confirmed the new guard failed before implementation on missing expanded roles,
calendarWarning, launcher notification tinting, and missingMedLogGlanceTheme. - Completed the main optimization slice: static light/dark schemes now include expanded M3 roles, custom visual state colors now use Material roles, notifications resolve theme/dynamic primary colors, and Glance widgets use project-owned
ColorProviders. - Re-ran targeted
ColorRoleGuardTest; it passed after one transient incremental ASM transform failure was cleared by a stacktrace rerun. - Verified the completed dynamic color slice with
./gradlew :app:ktlintCheck :app:testDebugUnitTest :app:assembleDebugandgit diff --check. - Started Material Motion/Shape checklist pass from the provided spec. Treated MDC Views APIs as not applicable to the Compose UI, and focused implementation on Compose
MotionSchemeandShapes. - Added red motion/shape guard coverage. The new motion guard failed on unthemed default transition specs; the shape guard failed on the custom shape scale.
- Replaced remaining bare Compose transition specs in Welcome, Drugs, and Home task group expansion with
MaterialTheme.motionSchemespatial/effects specs. - Aligned
MedLogShapesto Material 3 role values:4/8/12/16/28dp. - Verified the motion/shape pass with targeted guard tests and full
./gradlew :app:ktlintCheck :app:testDebugUnitTest :app:assembleDebug. - Started editorial treatment adoption from the provided guidance and screenshots. Selected Home's today-progress card as the appropriate showcase moment because it celebrates user completion/progress.
- Added red
EditorialTreatmentGuardTest, then implementedEditorialTypographytheme tokens and exposed them throughMaterialTheme.editorialTypography. - Added
EditorialProgressMomentto the Home progress card with large animated progress type and localized completion text for Chinese, English, Japanese, and Korean. - Verified the targeted editorial guard with
./gradlew :app:testDebugUnitTest --tests com.driezy.medlog.ui.theme.EditorialTreatmentGuardTest. - Verified the completed editorial treatment slice with
./gradlew :app:ktlintCheck :app:testDebugUnitTest :app:assembleDebug. - Started external seven-segment/medical-device dataset acquisition goal.
- Loaded
planning-with-files, ran session catchup, and inspectedseven_segment_ocrstructure. - Chosen staging convention:
seven_segment_ocr/external_datasets/for third-party downloads, with raw archives/downloads separated from extracted/preprocessed copies. - Added
seven_segment_ocr/external_datasets/to.gitignoreso downloaded third-party data remains in the workspace but is not accidentally committed. - Downloaded Kaggle sources via aria2 RPC after CLI downloads were slow: BP monitor, oximeter, and seven-segment-display YOLOv5.
- Downloaded Hugging Face
MiXaiLL76/7SEG_OCRby direct parquet LFS URL aftersnapshot_downloadstalled on the LFS file. - Extracted Kaggle archives and generated preprocessing outputs:
preprocessed/kaggle_bp_monitor/device_bboxes.csv,preprocessed/kaggle_oximeter/device_bboxes.csv,preprocessed/kaggle_seven_segment_yolov5/yolo_manifest.csv,preprocessed/hf_7seg_ocr/images/,preprocessed/hf_7seg_ocr/labels.csv. - Wrote consolidated manifests:
manifests/dataset_summary.json,manifests/medical_device_bboxes.csv,manifests/preview_contact_sheet.jpg. - Confirmed aria2 has no active/waiting downloads at the end of the acquisition pass.
- Audited ground truth contents: BP/Oximeter provide only whole-device Pascal/VOC detection boxes; Kaggle seven-segment YOLO provides digit bbox detection labels; HF 7SEG provides synthetic sequence text labels.
- Designed the unified OCR pipeline with Kaggle compatibility and PySide6 visualization. Added
seven_segment_ocr/PIPELINE_DESIGN.md. - Implemented the unified seven-segment OCR pipeline core under
seven_segment_ocr/pipeline/: schema parsing, task DAG validation, JSONL events, run artifact layout, image-text/VOC/YOLO dataset inspection, HF recognition normalization, VOC/YOLO detection preparation, subprocess adapters for training/eval, ONNX single-image inference wrapper, Android asset export copy step, and Kaggle script-kernel packaging. - Added
seven_segment_ocr/pipeline_ui/as a PySide6 shell that usesQProcessto callpython -m pipeline.cli, tailsevents.jsonl, and displays dataset profiles/previews, metric curves, inference/evaluation artifacts, and Kaggle push/status/fetch output without importing PySide6 from the headless core. - Added
seven_segment_ocr/pipeline_task.example.yamlcovering the downloaded HF 7SEG OCR recognition data, Kaggle seven-segment YOLO data, and Kaggle BP VOC device-bbox data. - Added pipeline regression coverage in
seven_segment_ocr/tests/test_pipeline_core.py; verified schema defaults/cycle rejection, event JSONL rows, dataset inspect/prepare, suspicious YOLO class66warning, runner artifacts/events, Kaggle package generation, example config loading, and the no-PySide6-import core boundary. - Ran local smoke pipeline:
dataset.inspect -> dataset.prepare_recognition -> dataset.inspect YOLO -> dataset.prepare_detection -> VOC inspect; resultcompleted=5 failed=0, with dataset profiles, preview contact sheets, normalizedlabels.csv, YOLOdata.yaml, andsample_preview/warning events underruns/seven_segment_smoke/. - Ran Kaggle packaging smoke: generated
runs/seven_segment_smoke/kaggle/kernel/withkernel-metadata.json,pipeline_task.json,kaggle_pipeline_entry.py, and copied headless OCR modules; verified the entry script does not containPySide6. - Switched PySide6 to pixi PyPI dependencies, ran
pixi install, fixed Qt plugin discovery inpipeline_ui.app, and verifiedPipelineMainWindowcan instantiate withQT_QPA_PLATFORM=offscreen. - Verified
pixi run python -m unittest tests.test_pipeline_core -vpasses and full Python test discovery passes 47 tests. - Upgraded the pipeline runner with default-on
.task_cache.json,task_skippedevents, per-task artifact ownership, partial graph selection (--target,--from-task,--resume),--no-cache,--force, and dependency-ready concurrent scheduling throughThreadPoolExecutor. - Added headless graph/cache/leaderboard helpers plus tests for hash invalidation, forced parent reruns invalidating downstream cache, resume/blocked task selection, independent branch scheduling, and CLI flag parsing.
- Added PySide6 DAG dashboard components:
DagViewfor node/edge rendering and event-driven node states,ConfigBuilderWidgetfor YAML-backed task/dataset editing and validated save-as, andLeaderboardWidgetfor cross-run metric comparison. - Integrated the UI widgets into
PipelineMainWindowwith DAG, Builder, and Leaderboard tabs, right-click node actions for target/from-task runs, node-specific stdout/stderr/event viewing, and artifact filtering by selected task. - Verified the upgraded implementation with
pixi run python -m unittest discover -s tests -v: 56 tests passed. - Ran real pipeline smoke twice with
--max-workers 4: first run completed 5 tasks, second run cache-skipped all 5 tasks with 0 blocked/failed; Kaggle package smoke still generated a script-only kernel withoutPySide6.