Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
241 commits
Select commit Hold shift + click to select a range
cf3f508
docs: add reproducible verification record
sanskarIN Aug 19, 2026
b713c13
chore: add structured bug report template
sanskarIN Aug 19, 2026
abcd9c3
chore: add feature request template
sanskarIN Aug 19, 2026
b04a937
chore: configure issue support links
sanskarIN Aug 19, 2026
0a3b90a
chore: add pull request quality template
sanskarIN Aug 19, 2026
ef26c34
ci: automate audit branch formatting
sanskarIN Aug 19, 2026
7f0136a
ci: add CodeQL security analysis
sanskarIN Aug 19, 2026
eb9dd16
ci: review dependency changes for vulnerabilities
sanskarIN Aug 19, 2026
1122eb6
feat: add batch conversion CSV export
sanskarIN Aug 19, 2026
6d8cdff
ci: add reproducible tagged release builds
sanskarIN Aug 19, 2026
d40573b
docs: add GitHub repository operations guide
sanskarIN Aug 19, 2026
7efa47f
chore: document optional environment placeholders
sanskarIN Aug 19, 2026
6258689
design: add editable UnitFlow logo artwork
sanskarIN Aug 19, 2026
e1e1af5
build: add Rust Flutter bridge workspace member
sanskarIN Aug 19, 2026
bee6e52
build: add Flutter Rust bridge crate
sanskarIN Aug 19, 2026
49bc778
feat: expose Flutter bridge API module
sanskarIN Aug 19, 2026
6e386b0
feat: define bridge API surface
sanskarIN Aug 19, 2026
8ca8976
feat: add typed Rust bridge conversion endpoints
sanskarIN Aug 19, 2026
b9718ee
build: allow generated FFI bridge implementation
sanskarIN Aug 19, 2026
0f58b32
build: add bridge generation placeholder module
sanskarIN Aug 19, 2026
ab5f485
test: cover Rust Flutter bridge endpoints
sanskarIN Aug 19, 2026
75e934b
build: add unified quality check script
sanskarIN Aug 19, 2026
6979de5
build: add reproducible Rust bridge generation script
sanskarIN Aug 19, 2026
2f49ff4
ci: generate lockfiles during audit normalization
sanskarIN Aug 19, 2026
0206923
chore: add repository funding metadata
sanskarIN Aug 19, 2026
afc807a
chore: configure automated dependency updates
sanskarIN Aug 19, 2026
199cff2
test: cover batch CSV escaping
sanskarIN Aug 19, 2026
74a5a97
feat: add redacting structured diagnostic logger
sanskarIN Aug 19, 2026
ceb5cb5
design: add editable app icon source
sanskarIN Aug 19, 2026
0adfc9f
feat: add recent conversions history screen
sanskarIN Aug 19, 2026
2c887e7
feat: integrate recent history into adaptive navigation
sanskarIN Aug 19, 2026
0b0cef3
fix: make BigInt zero initialization runtime safe
sanskarIN Aug 19, 2026
f6ff44b
fix: initialize decimal offsets without const BigInt values
sanskarIN Aug 19, 2026
8ec0281
fix: correct cross platform release packaging paths
sanskarIN Aug 19, 2026
372b1a9
build: configure Flutter localization generation
sanskarIN Aug 19, 2026
218fc9c
feat: add English localization catalog
sanskarIN Aug 19, 2026
cb97ff0
build: enable generated localizations and Rust bridge runtime
sanskarIN Aug 19, 2026
a9c3794
build: add reproducible Flutter platform bootstrap
sanskarIN Aug 19, 2026
740e067
docs: record Rust Flutter bridge strategy
sanskarIN Aug 19, 2026
804ed0e
ci: verify generated Rust Flutter bridge
sanskarIN Aug 19, 2026
44e7159
feat: wire generated localization delegates into app
sanskarIN Aug 19, 2026
20bc70c
feat: externalize complete English UI copy
sanskarIN Aug 19, 2026
1f658d5
feat: localize adaptive application shell
sanskarIN Aug 19, 2026
21a4333
feat: localize onboarding experience
sanskarIN Aug 19, 2026
b53d1bb
feat: localize settings and data controls
sanskarIN Aug 19, 2026
5cfb03d
feat: localize About support and privacy content
sanskarIN Aug 19, 2026
bab7411
feat: localize recent conversion history
sanskarIN Aug 19, 2026
0fc8a9d
refactor: route app diagnostics through redacting logger
sanskarIN Aug 19, 2026
6b1dbb8
feat: add cross platform backup file support
sanskarIN Aug 19, 2026
9629de3
feat: add bounded backup file import and export
sanskarIN Aug 19, 2026
537e690
feat: externalize backup and history actions
sanskarIN Aug 19, 2026
98cb27b
feat: expose file based backup and restore controls
sanskarIN Aug 19, 2026
4feb834
test: add property testing support
sanskarIN Aug 19, 2026
678590c
test: add conversion property invariants
sanskarIN Aug 19, 2026
f7fcc44
test: add cargo fuzz harness package
sanskarIN Aug 19, 2026
a07e6f7
test: fuzz catalog search with arbitrary Unicode
sanskarIN Aug 19, 2026
c82dc11
test: fuzz decimal notation inputs without panics
sanskarIN Aug 19, 2026
9b95ff1
test: cover primary Flutter application journey
sanskarIN Aug 19, 2026
8d1befc
feat: localize converter and add batch CSV copy
sanskarIN Aug 19, 2026
c7ad073
docs: document property fuzz and bridge verification
sanskarIN Aug 19, 2026
b1a4a62
docs: make clean clone platform setup reproducible
sanskarIN Aug 19, 2026
8b9ec14
docs: add current UnitFlow phase handoff
sanskarIN Aug 19, 2026
dd1d9ff
test: verify stable serialized domain values
sanskarIN Aug 19, 2026
974a0bc
test: enforce bridge and core conversion parity
sanskarIN Aug 19, 2026
ed9e4c4
docs: publish UnitFlow backup schema
sanskarIN Aug 19, 2026
6c2fd21
docs: document local data and backup format
sanskarIN Aug 19, 2026
8c23f7a
docs: record versioned local backup decision
sanskarIN Aug 19, 2026
3132a8d
docs: record safe custom unit formula model
sanskarIN Aug 19, 2026
cf20c65
test: cover locale aware decimal formatting
sanskarIN Aug 19, 2026
742b0bb
test: cover persisted application state workflows
sanskarIN Aug 19, 2026
5bdc926
feat: persist explicit decimal rounding mode
sanskarIN Aug 19, 2026
19f0508
feat: expose rounding mode setting in app controller
sanskarIN Aug 19, 2026
96e47b8
feat: apply selected rounding mode to conversions
sanskarIN Aug 19, 2026
ea6c20f
feat: add rounding mode localization strings
sanskarIN Aug 19, 2026
df16f93
feat: add explicit rounding control to settings
sanskarIN Aug 19, 2026
ecbe754
test: cover rounding mode persistence migration
sanskarIN Aug 19, 2026
709d669
test: verify selectable conversion rounding modes
sanskarIN Aug 19, 2026
b1f333f
docs: publish UnitFlow backup schema v2
sanskarIN Aug 19, 2026
d468725
docs: document backup schema v2 migration
sanskarIN Aug 19, 2026
59649ed
docs: record rounding and backup compatibility changes
sanskarIN Aug 19, 2026
1255f6e
ci: normalize generated bridge sources on audit branch
sanskarIN Aug 19, 2026
616b669
feat: persist reduced motion accessibility preference
sanskarIN Aug 19, 2026
e779483
feat: expose reduced motion preference
sanskarIN Aug 19, 2026
cc3f7e1
feat: honor reduced motion for theme transitions
sanskarIN Aug 19, 2026
22e3133
feat: respect reduced motion during onboarding
sanskarIN Aug 19, 2026
ae3d70e
feat: localize accessibility and update settings
sanskarIN Aug 19, 2026
a4c9f40
feat: add accessibility and update settings sections
sanskarIN Aug 19, 2026
c16b893
docs: extend backup schema with reduced motion preference
sanskarIN Aug 19, 2026
3234929
test: cover reduced motion backup compatibility
sanskarIN Aug 19, 2026
f85fdb1
docs: document reduced motion behavior
sanskarIN Aug 19, 2026
8aeb473
docs: describe reduced motion backup compatibility
sanskarIN Aug 19, 2026
42bd1d9
feat: centralize user safe error presentation
sanskarIN Aug 19, 2026
e3ce019
feat: localize safe failure messages
sanskarIN Aug 19, 2026
f9a21ca
fix: hide internal errors from settings UI
sanskarIN Aug 19, 2026
25f02c0
fix: keep custom unit failures user safe
sanskarIN Aug 19, 2026
de24200
test: ensure UI errors never echo exception details
sanskarIN Aug 19, 2026
ec7e961
refactor: externalize unit library interface strings
sanskarIN Aug 19, 2026
1b388a8
refactor: externalize custom unit editor strings
sanskarIN Aug 19, 2026
0803f42
feat: include unit descriptions in catalog search
sanskarIN Aug 19, 2026
e4f2117
test: cover unit description search
sanskarIN Aug 19, 2026
0dedb43
security: add repository secret pattern scanner
sanskarIN Aug 19, 2026
7624f3f
ci: scan tracked files for common secrets
sanskarIN Aug 19, 2026
7fb695b
docs: add internal Markdown link verifier
sanskarIN Aug 19, 2026
a8a4699
ci: verify internal documentation links
sanskarIN Aug 19, 2026
032c343
feat: add reusable UnitFlow brand mark widget
sanskarIN Aug 19, 2026
6f02b2a
feat: apply UnitFlow branding and search shortcut
sanskarIN Aug 19, 2026
4ec1c08
feat: use UnitFlow mark on startup screen
sanskarIN Aug 19, 2026
ee22fb6
feat: use UnitFlow mark in About identity
sanskarIN Aug 19, 2026
5a4cdb0
assets: add editable UnitFlow vector mark
sanskarIN Aug 19, 2026
6fe9b90
docs: document UnitFlow branding and launcher assets
sanskarIN Aug 19, 2026
6af5ea2
test: cover conversion and accessibility settings persistence
sanskarIN Aug 19, 2026
6cfaf26
test: cover settings accessibility interaction
sanskarIN Aug 19, 2026
0c64533
perf: add deterministic core profiling harness
sanskarIN Aug 19, 2026
df6cdd7
perf: add core profiling command
sanskarIN Aug 19, 2026
3963379
docs: document reproducible core profiling workflow
sanskarIN Aug 19, 2026
8012ed8
feat: add undoable history clearing
sanskarIN Aug 19, 2026
57ce633
test: cover primary offline conversion journey
sanskarIN Aug 19, 2026
51cd672
ci: add structured data syntax validator
sanskarIN Aug 19, 2026
fd74966
ci: validate tracked JSON and localization data
sanskarIN Aug 19, 2026
8619c26
docs: refresh UnitFlow product overview
sanskarIN Aug 19, 2026
b1d3328
docs: add Rust Flutter bridge integration guide
sanskarIN Aug 19, 2026
4bbb49a
docs: define UnitFlow platform support matrix
sanskarIN Aug 19, 2026
cf80059
ci: make local verification match repository quality gates
sanskarIN Aug 19, 2026
f85bdeb
release: add strict release candidate verifier
sanskarIN Aug 19, 2026
e15b33b
docs: strengthen release candidate verification guide
sanskarIN Aug 19, 2026
863e083
docs: update UnitFlow roadmap implementation status
sanskarIN Aug 19, 2026
0526d54
docs: record accessibility branding and quality hardening
sanskarIN Aug 19, 2026
b01bfe1
docs: expand exact candidate verification record
sanskarIN Aug 19, 2026
4564c65
docs: replace stale UnitFlow development handoff
sanskarIN Aug 19, 2026
17ede6f
docs: retire superseded phase one handoff
sanskarIN Aug 19, 2026
b1ce92f
build: add reproducible native bridge integration
sanskarIN Aug 19, 2026
fcce1c3
build: bootstrap platform shells and native bridge scaffolding
sanskarIN Aug 19, 2026
0d0ff58
ci: validate developer utility script syntax
sanskarIN Aug 19, 2026
baf5077
ci: validate native bridge integration reproducibility
sanskarIN Aug 19, 2026
0237de3
fix: remove stale history when deleting custom units
sanskarIN Aug 19, 2026
48d4964
test: cover custom unit state cleanup
sanskarIN Aug 19, 2026
e09ad75
fix: normalize stale unit references on load and import
sanskarIN Aug 19, 2026
abdf3c1
test: cover stale persisted unit reference normalization
sanskarIN Aug 19, 2026
186df3d
test: use collection matcher for normalized favorites
sanskarIN Aug 19, 2026
9e2f335
docs: document stale unit reference normalization
sanskarIN Aug 19, 2026
a09577b
fix: handle local persistence failures gracefully
sanskarIN Aug 19, 2026
0d57b69
test: cover graceful local persistence failures
sanskarIN Aug 19, 2026
93bcaf9
feat: make custom unit deletion fully undoable
sanskarIN Aug 19, 2026
963323b
feat: localize complete custom unit undo feedback
sanskarIN Aug 19, 2026
52e9167
feat: restore custom unit relationships on undo
sanskarIN Aug 19, 2026
19988dc
test: cover complete custom unit undo restoration
sanskarIN Aug 19, 2026
cb361e2
docs: record state integrity and native integration hardening
sanskarIN Aug 19, 2026
ba5464d
build: allow targeted Flutter platform bootstrapping
sanskarIN Aug 19, 2026
546fb50
build: allow targeted native bridge integration
sanskarIN Aug 19, 2026
869ceb1
release: build bridged platform artifacts and checksums
sanskarIN Aug 19, 2026
b2c711b
test: add shared conversion parity vectors
sanskarIN Aug 19, 2026
1fe435b
test: validate Rust core against shared parity vectors
sanskarIN Aug 19, 2026
b991bb8
test: validate Dart fallback against shared parity vectors
sanskarIN Aug 19, 2026
105397e
docs: add release evidence record template
sanskarIN Aug 19, 2026
7edc504
fix: search Rust unit descriptions
sanskarIN Aug 19, 2026
80bdef4
test: cover description-aware unit matching
sanskarIN Aug 19, 2026
4eee687
fix: validate persisted pinned pair identifiers
sanskarIN Aug 19, 2026
14351ac
fix: enforce backup schema bounds and normalization
sanskarIN Aug 19, 2026
6437213
fix: keep local state within backup limits
sanskarIN Aug 19, 2026
cbe6c96
test: cover strict backup validation
sanskarIN Aug 19, 2026
4a5d5d0
fix: reject duplicate JSON object keys
sanskarIN Aug 19, 2026
0c096dc
refactor: share strict backup decoding
sanskarIN Aug 19, 2026
d4d1c0d
docs: document strict backup contract
sanskarIN Aug 19, 2026
ce7fc23
docs: record strict backup hardening
sanskarIN Aug 19, 2026
e501949
test: keep in-memory import limits production-equivalent
sanskarIN Aug 19, 2026
f3300fa
test: enforce custom unit collection limit
sanskarIN Aug 19, 2026
7f9826b
docs: update canonical UnitFlow handoff
sanskarIN Aug 19, 2026
887cfcd
test: cover duplicate structured data keys
sanskarIN Aug 19, 2026
d176530
ci: run repository utility regression tests
sanskarIN Aug 19, 2026
3d80d00
docs: document repository utility tests
sanskarIN Aug 19, 2026
5db112a
build: include repository utility regression tests
sanskarIN Aug 19, 2026
9dd2339
build: run utility tests in release verification
sanskarIN Aug 19, 2026
a8f511d
docs: include repository utility regression command
sanskarIN Aug 19, 2026
ff794c6
docs: record completed backup hardening gates
sanskarIN Aug 19, 2026
f3236dc
docs: refresh UnitFlow continuation checkpoint
sanskarIN Aug 19, 2026
91b4a60
fix: build oversized backup fixture with Dart API
sanskarIN Aug 19, 2026
6c5330c
fix: track generated Flutter Rust bridge sources
sanskarIN Aug 19, 2026
e470045
ci: detect untracked generated bridge drift
sanskarIN Aug 19, 2026
336d652
ci: normalize untracked generated sources
sanskarIN Aug 19, 2026
cecc26c
build: detect bridge generation drift locally
sanskarIN Aug 19, 2026
f9dd200
build: reject untracked release generation drift
sanskarIN Aug 19, 2026
e3049c2
docs: require clean generated working tree
sanskarIN Aug 19, 2026
4bad4b6
docs: document tracked bridge generation
sanskarIN Aug 19, 2026
15c9835
docs: record bridge reproducibility hardening
sanskarIN Aug 19, 2026
e7b084f
fix: align Flutter preview version with Rust workspace
sanskarIN Aug 19, 2026
9ff5873
build: add cross-stack version consistency check
sanskarIN Aug 19, 2026
fedbef2
test: cover version consistency helper
sanskarIN Aug 19, 2026
7e51d6a
ci: verify cross-stack version consistency
sanskarIN Aug 19, 2026
2129bfc
build: enforce version consistency in local checks
sanskarIN Aug 19, 2026
3db701d
build: enforce version consistency for release candidates
sanskarIN Aug 19, 2026
dad282c
fix: persist and reopen canonical recent conversions
sanskarIN Aug 19, 2026
a65745e
fix: synchronize programmatic converter input changes
sanskarIN Aug 19, 2026
8b12c63
fix: reopen exact recent conversion from history
sanskarIN Aug 19, 2026
e1597ba
fix: route history entries through exact recent state
sanskarIN Aug 19, 2026
79a872e
test: verify history restores exact conversion input
sanskarIN Aug 19, 2026
b03a5c4
test: cover locale-safe recent conversion persistence
sanskarIN Aug 19, 2026
e5b0686
feat: reject duplicate keys in imported JSON
sanskarIN Aug 19, 2026
afce0e9
fix: use strict JSON decoding for backups
sanskarIN Aug 19, 2026
4f19aba
test: cover strict JSON duplicate key detection
sanskarIN Aug 19, 2026
7bca811
test: reject ambiguous duplicate-key backups
sanskarIN Aug 19, 2026
ce48c78
fix: enforce nesting limit for empty JSON containers
sanskarIN Aug 19, 2026
385c55b
test: cover empty-container nesting limits
sanskarIN Aug 19, 2026
6b0cc8f
test: expand shared conversion parity vectors
sanskarIN Aug 19, 2026
7632068
test: require parity vectors for every category and rounding mode
sanskarIN Aug 19, 2026
ca9e2aa
fix: keep Flutter bundle version Apple-compatible
sanskarIN Aug 19, 2026
6250e06
fix: separate release prerelease from Flutter bundle version
sanskarIN Aug 19, 2026
381f241
test: cover prerelease and Flutter bundle version policy
sanskarIN Aug 19, 2026
d0f9af3
build: validate release tag against workspace version
sanskarIN Aug 19, 2026
8b366e6
test: cover release tag version validation
sanskarIN Aug 19, 2026
63a2a6e
ci: gate release builds on version and tag metadata
sanskarIN Aug 19, 2026
5b4e338
ci: make release artifacts safe for manual dispatch
sanskarIN Aug 19, 2026
c4efa94
fix: localize canonical history values before reopening
sanskarIN Aug 19, 2026
9751e10
test: cover locale-safe history reopening
sanskarIN Aug 19, 2026
c1291d1
fix: keep generated recent history within backup bounds
sanskarIN Aug 19, 2026
bae95e0
test: keep oversized exact inputs out of history backups
sanskarIN Aug 19, 2026
1306b0e
feat: expose Rust decimal compatibility bounds
sanskarIN Aug 19, 2026
f6b9ac8
fix: reject fallback inputs outside Rust decimal domain
sanskarIN Aug 19, 2026
ce856be
fix: keep custom unit formulas in Rust decimal domain
sanskarIN Aug 19, 2026
ae14a74
test: cover Rust decimal compatibility bounds
sanskarIN Aug 19, 2026
cfe6b63
test: reject fallback values beyond Rust decimal limits
sanskarIN Aug 19, 2026
b882cdd
test: align oversized history case with Rust bounds
sanskarIN Aug 19, 2026
6e0dc64
test: reject custom formulas outside Rust decimal bounds
sanskarIN Aug 19, 2026
25b0e51
fix: avoid false reset success and release-link errors
sanskarIN Aug 19, 2026
ba4cf4d
feat: localize external link failure feedback
sanskarIN Aug 19, 2026
de54b07
fix: safely handle About external link failures
sanskarIN Aug 19, 2026
f538a8f
build: validate About version without Python TOML dependency
sanskarIN Aug 19, 2026
26fedce
test: keep About release version synchronized
sanskarIN Aug 19, 2026
608bd02
docs: define release and platform bundle version policy
sanskarIN Aug 19, 2026
904823d
docs: document strict JSON and decimal portability bounds
sanskarIN Aug 19, 2026
052674c
feat: expose ordered batch conversion through bridge
sanskarIN Aug 19, 2026
4051124
test: cover ordered bridge batch conversion
sanskarIN Aug 19, 2026
f2e9fdc
test: match bridge scientific formatter output
sanskarIN Aug 19, 2026
6ed038e
test: run shared parity corpus through bridge
sanskarIN Aug 19, 2026
f21611c
test: add bridge parity fixture dependencies
sanskarIN Aug 19, 2026
ea58469
fix: enforce canonical recent input at state boundary
sanskarIN Aug 19, 2026
a1b46ce
test: enforce canonical recent history at controller boundary
sanskarIN Aug 19, 2026
1bb67c9
fix: keep About link failure message non-null
sanskarIN Aug 19, 2026
1c84a6d
fix: enforce Rust-compatible fallback intermediates
sanskarIN Aug 19, 2026
eb9a374
test: reject fallback intermediate overflow
sanskarIN Aug 19, 2026
084fbf7
docs: align bridge contract with implemented batch API
sanskarIN Aug 19, 2026
c09493e
docs: document parity and strict import regression coverage
sanskarIN Aug 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# UnitFlow static conversions require no environment variables.
# Add placeholder-only variables here if an optional online integration is introduced.
# Never commit real API keys, tokens, signing secrets, or private endpoints.

UNITFLOW_LOG_LEVEL=info
2 changes: 2 additions & 0 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
custom:
- "https://buymeacoffee.com/sanskarIN"
68 changes: 68 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
name: Bug report
description: Report a reproducible defect in UnitFlow
title: "bug: "
labels: [bug, triage]
body:
- type: markdown
attributes:
value: |
Thanks for reporting a problem. Remove secrets and personal data from logs before submitting.
- type: input
id: version
attributes:
label: UnitFlow version or commit
placeholder: v0.1.0-alpha.1 or commit SHA
validations:
required: true
- type: dropdown
id: platform
attributes:
label: Platform
options:
- Android
- Windows
- Linux
- macOS
- Web
- iOS
- Rust core only
- Other
validations:
required: true
- type: textarea
id: description
attributes:
label: What happened?
description: Describe the observed behavior and what you expected instead.
validations:
required: true
- type: textarea
id: reproduction
attributes:
label: Reproduction steps
placeholder: |
1. Open ...
2. Select ...
3. Enter ...
4. Observe ...
validations:
required: true
- type: textarea
id: conversion
attributes:
label: Conversion details
description: For conversion defects, include exact input, source/target units, notation, rounding, and locale.
- type: textarea
id: logs
attributes:
label: Relevant non-sensitive logs
render: shell
- type: checkboxes
id: checks
attributes:
label: Checklist
options:
- label: I searched existing issues for duplicates.
required: true
- label: I removed credentials, tokens, private data, and signing material.
required: true
8 changes: 8 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: Private security report
url: mailto:sanskarin@outlook.in?subject=UnitFlow%20Security
about: Report suspected vulnerabilities privately instead of opening a public issue.
- name: General support
url: mailto:supportramsandesh@gmail.com?subject=UnitFlow%20Support
about: Use private support when an issue would require sharing non-public details.
53 changes: 53 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: Feature request
description: Propose a coherent improvement to UnitFlow
title: "feat: "
labels: [enhancement, triage]
body:
- type: textarea
id: problem
attributes:
label: Problem or opportunity
description: What user need would this solve?
validations:
required: true
- type: textarea
id: proposal
attributes:
label: Proposed experience
description: Describe the desired behavior without prescribing unnecessary implementation details.
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Alternatives considered
- type: dropdown
id: area
attributes:
label: Area
options:
- Conversion engine
- Unit catalog
- Custom units
- Converter UI
- Search/library
- Favorites/history/pins
- Import/export
- Accessibility
- Performance
- Platform integration
- Documentation
- Other
validations:
required: true
- type: checkboxes
id: principles
attributes:
label: Product principles
options:
- label: This keeps core static conversion usable offline.
required: true
- label: This does not require an intrusive donation or sign-in flow.
required: true
- label: I searched existing issues for similar requests.
required: true
28 changes: 28 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
version: 2
updates:
- package-ecosystem: cargo
directory: /
schedule:
interval: weekly
day: monday
open-pull-requests-limit: 5
commit-message:
prefix: "chore(deps)"

- package-ecosystem: pub
directory: /apps/unitflow_app
schedule:
interval: weekly
day: monday
open-pull-requests-limit: 5
commit-message:
prefix: "chore(deps)"

- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
day: monday
open-pull-requests-limit: 5
commit-message:
prefix: "chore(ci)"
27 changes: 27 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
## What changed

Describe the user-visible or engineering change and why it is needed.

## Verification

- [ ] `cargo fmt --all -- --check`
- [ ] `cargo clippy --workspace --all-targets --all-features -- -D warnings`
- [ ] `cargo test --workspace --all-features`
- [ ] `flutter analyze --fatal-infos --fatal-warnings`
- [ ] `flutter test`
- [ ] Relevant manual journey checked where automation is insufficient

If a check is not applicable or could not run, explain why instead of marking it complete.

## Quality checklist

- [ ] Tests cover behavior changes or the reason they are unnecessary is documented.
- [ ] No secrets, credentials, signing keys, private endpoints, or real user data were added.
- [ ] Accessibility and keyboard/touch behavior were considered for UI changes.
- [ ] Static conversion remains offline-capable.
- [ ] Documentation and `what_changed.md` are updated when needed.
- [ ] Backward compatibility/migration impact is documented.

## Screenshots / recordings

Add UI evidence for visual changes when useful. Do not include private user data.
81 changes: 79 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,41 @@ concurrency:
cancel-in-progress: true

jobs:
repository-safety:
name: Repository safety
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6

- name: Validate shell script syntax
run: bash -n tool/*.sh

- name: Validate Python utility syntax
run: python3 -m py_compile tool/*.py

- name: Test repository utilities
working-directory: tool
run: python3 -m unittest discover -p 'test_*.py'

- name: Verify version consistency
run: python3 tool/check_versions.py

- name: Scan tracked files for credential signatures
run: python3 tool/check_secrets.py

- name: Validate JSON and ARB syntax
run: python3 tool/check_data_files.py

- name: Verify internal Markdown links
run: python3 tool/check_docs_links.py

rust:
name: Rust quality
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Install Rust
uses: dtolnay/rust-toolchain@stable
Expand All @@ -47,7 +76,7 @@ jobs:
working-directory: apps/unitflow_app
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Install Flutter
uses: subosito/flutter-action@v2
Expand All @@ -58,6 +87,9 @@ jobs:
- name: Resolve dependencies
run: flutter pub get

- name: Generate localizations
run: flutter gen-l10n

- name: Verify formatting
run: dart format --output=none --set-exit-if-changed lib test

Expand All @@ -66,3 +98,48 @@ jobs:

- name: Test
run: flutter test

bridge:
name: Rust Flutter bridge
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6

- name: Install Rust
uses: dtolnay/rust-toolchain@stable

- name: Install Flutter
uses: subosito/flutter-action@v2
with:
channel: stable
cache: true

- name: Resolve Flutter dependencies
working-directory: apps/unitflow_app
run: flutter pub get

- name: Install bridge generator
run: cargo install flutter_rust_bridge_codegen --version 2.12.0 --locked

- name: Bootstrap Flutter platform shells
run: bash tool/bootstrap_platforms.sh

- name: Integrate native bridge and generate bindings
run: bash tool/integrate_native_bridge.sh

- name: Verify generated Rust
run: cargo check --workspace --all-features

- name: Verify generated Dart
working-directory: apps/unitflow_app
run: flutter analyze --fatal-infos --fatal-warnings

- name: Verify generated integration is committed
shell: bash
run: |
if [[ -n "$(git status --porcelain --untracked-files=all)" ]]; then
echo "Generated bridge/platform integration differs from committed source." >&2
git status --short >&2
exit 1
fi
38 changes: 38 additions & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: CodeQL

on:
push:
branches: [main]
pull_request:
branches: [main]
schedule:
- cron: "23 3 * * 1"
workflow_dispatch:

permissions:
contents: read
security-events: write

concurrency:
group: codeql-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
analyze:
name: Analyze Rust
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Initialize CodeQL
uses: github/codeql-action/init@v4
with:
languages: rust
build-mode: none

- name: Analyze
uses: github/codeql-action/analyze@v4
with:
category: "/language:rust"
20 changes: 20 additions & 0 deletions .github/workflows/dependency-review.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
name: Dependency review

on:
pull_request:
branches: [main]

permissions:
contents: read

jobs:
dependency-review:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6

- name: Review dependency changes
uses: actions/dependency-review-action@v5
with:
fail-on-severity: moderate
Loading
Loading