A to-do app that doesn't believe you — an enforcement layer rather than a
neutral ledger.
Architecture ported from Autoreceptives/Frontend/Receptive: stacked MVVM with
the mandatory 4-file screen pattern, one ParentViewModel owning the loading /
network / error overlays and the handleError decision tree, one AppDataManager
gateway, dio comms carrying the three identity headers, secure storage with
random-suffixed keys, and a single-chokepoint Navigator. Package root and Dart
package name are both Grounded; org is nya.
The enforcement engine, one unit per formula in utils/:
- DebtEngine w(class) x severity(d) x decay(t), sublinear severity so old
misses cannot swamp the score; abandonment 2x with 30-day
decay immunity; late complete retains 30%
- StandingEngine Good -> Warned -> Grounded -> Lockdown, derived not set;
Grounded replaces home with the overdue queue
- CapacityEngine blocks over-scheduling against p50 of historically completed
minutes, with a learned per-category estimation multiplier
- IntegrityEngine session integrity, weekly volume, plyometric contact ceiling
and enforced recovery gaps
- ExcuseAnalyser on-device excuse clustering plus the confrontation copy
- GuardrailEngine distress detection and rationed amnesty
- ToneEngine all enforcement copy, so the tone cap lives in one place
CommitmentEvent is append-only and is the source of truth rather than the
status field, which is what makes honest history and excuse analysis possible.
Goals contain commitments via parentId, and a task can be run from a
full-screen runner that derives elapsed time from wall-clock so screen-off
cannot lose time. Backgrounding pauses the clock and is counted. The runner is
mirrored into an ongoing notification, with alarm-class full-screen intents
reserved for non-negotiables.
Design language, fonts, icon and native splash are in place; Mason bricks are
retargeted to this project and verified end-to-end.
flutter analyze lib/ reports no errors.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mfu2gQLSFN21YRBcU2NrTt
210 lines
6.6 KiB
Plaintext
210 lines
6.6 KiB
Plaintext
# ─────────────────────────────────────────────────────────────────────────────
|
|
# Grounded — repository ignore rules
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
# ── Secrets & environment ────────────────────────────────────────────────────
|
|
# .env carries the backend hosts and app version. Committing it leaks the
|
|
# deployment topology, so the template is tracked and the real file is not.
|
|
.env
|
|
.env.*
|
|
!.env.example
|
|
*.pem
|
|
*.key
|
|
*.p12
|
|
*.jks
|
|
*.keystore
|
|
*.mobileprovision
|
|
key.properties
|
|
secrets.properties
|
|
google-services.json
|
|
GoogleService-Info.plist
|
|
firebase_options.dart
|
|
service-account*.json
|
|
credentials.json
|
|
*.retrofit.dart.log
|
|
|
|
# ── Dart / Flutter ───────────────────────────────────────────────────────────
|
|
.dart_tool/
|
|
.flutter-plugins
|
|
.flutter-plugins-dependencies
|
|
.packages
|
|
.pub-cache/
|
|
.pub/
|
|
build/
|
|
coverage/
|
|
doc/api/
|
|
**/doc/api/
|
|
*.dart.js
|
|
*.info.json
|
|
*.js_
|
|
*.js.deps
|
|
*.js.map
|
|
.flutter-versions
|
|
pubspec_overrides.yaml
|
|
|
|
# Generated sources
|
|
*.g.dart
|
|
*.freezed.dart
|
|
*.mocks.dart
|
|
*.config.dart
|
|
|
|
# Symbolication / obfuscation
|
|
app.*.symbols
|
|
app.*.map.json
|
|
|
|
# ── Mason ────────────────────────────────────────────────────────────────────
|
|
# Bricks themselves are tracked; the resolved cache is not.
|
|
.mason/
|
|
**/hooks/.dart_tool/
|
|
**/hooks/pubspec.lock
|
|
|
|
# ── Android ──────────────────────────────────────────────────────────────────
|
|
**/android/**/gradle-wrapper.jar
|
|
**/android/.gradle
|
|
**/android/captures/
|
|
**/android/gradlew
|
|
**/android/gradlew.bat
|
|
**/android/local.properties
|
|
**/android/**/GeneratedPluginRegistrant.java
|
|
**/android/key.properties
|
|
**/android/app/release/
|
|
**/android/app/debug/
|
|
**/android/app/profile/
|
|
*.apk
|
|
*.aab
|
|
*.ap_
|
|
*.dex
|
|
.cxx/
|
|
|
|
# ── iOS ──────────────────────────────────────────────────────────────────────
|
|
**/ios/**/*.mode1v3
|
|
**/ios/**/*.mode2v3
|
|
**/ios/**/*.moved-aside
|
|
**/ios/**/*.pbxuser
|
|
**/ios/**/*.perspectivev3
|
|
**/ios/**/*sync/
|
|
**/ios/**/.sconsign.dblite
|
|
**/ios/**/.tags*
|
|
**/ios/**/.vagrant/
|
|
**/ios/**/DerivedData/
|
|
**/ios/**/Icon?
|
|
**/ios/**/Pods/
|
|
**/ios/**/.symlinks/
|
|
**/ios/**/profile
|
|
**/ios/**/xcuserdata
|
|
**/ios/.generated/
|
|
**/ios/Flutter/App.framework
|
|
**/ios/Flutter/Flutter.framework
|
|
**/ios/Flutter/Flutter.podspec
|
|
**/ios/Flutter/Generated.xcconfig
|
|
**/ios/Flutter/ephemeral/
|
|
**/ios/Flutter/app.flx
|
|
**/ios/Flutter/app.zip
|
|
**/ios/Flutter/flutter_assets/
|
|
**/ios/Flutter/flutter_export_environment.sh
|
|
**/ios/Flutter/.last_build_id
|
|
**/ios/ServiceDefinitions.json
|
|
**/ios/Runner/GeneratedPluginRegistrant.*
|
|
*.ipa
|
|
*.dSYM.zip
|
|
*.dSYM
|
|
|
|
# ── macOS ────────────────────────────────────────────────────────────────────
|
|
**/macos/Flutter/GeneratedPluginRegistrant.swift
|
|
**/macos/Flutter/ephemeral/
|
|
**/macos/Flutter/Flutter-Debug.xcconfig
|
|
**/macos/Flutter/Flutter-Release.xcconfig
|
|
**/macos/Flutter/Flutter-Profile.xcconfig
|
|
**/macos/Pods/
|
|
**/xcuserdata/
|
|
**/DerivedData/
|
|
|
|
# ── Windows ──────────────────────────────────────────────────────────────────
|
|
**/windows/flutter/generated_plugin_registrant.cc
|
|
**/windows/flutter/generated_plugin_registrant.h
|
|
**/windows/flutter/generated_plugins.cmake
|
|
**/windows/flutter/ephemeral/
|
|
*.exe
|
|
*.msix
|
|
*.pdb
|
|
*.ilk
|
|
|
|
# ── Linux ────────────────────────────────────────────────────────────────────
|
|
**/linux/flutter/generated_plugin_registrant.cc
|
|
**/linux/flutter/generated_plugin_registrant.h
|
|
**/linux/flutter/generated_plugins.cmake
|
|
**/linux/flutter/ephemeral/
|
|
|
|
# ── Web ──────────────────────────────────────────────────────────────────────
|
|
**/web/*.g.dart
|
|
lib/generated_plugin_registrant.dart
|
|
|
|
# ── IDEs & editors ───────────────────────────────────────────────────────────
|
|
.idea/
|
|
*.iml
|
|
*.ipr
|
|
*.iws
|
|
.vscode/
|
|
!.vscode/launch.json
|
|
!.vscode/settings.json
|
|
*.swp
|
|
*.swo
|
|
*~
|
|
.history/
|
|
.atom/
|
|
.buildlog/
|
|
.build/
|
|
migrate_working_dir/
|
|
.metals/
|
|
.bloop/
|
|
|
|
# ── OS noise ─────────────────────────────────────────────────────────────────
|
|
.DS_Store
|
|
.DS_Store?
|
|
._*
|
|
.Spotlight-V100
|
|
.Trashes
|
|
ehthumbs.db
|
|
Thumbs.db
|
|
Thumbs.db:encryptable
|
|
desktop.ini
|
|
$RECYCLE.BIN/
|
|
*.lnk
|
|
|
|
# ── Logs, temp, caches ───────────────────────────────────────────────────────
|
|
*.log
|
|
*.tmp
|
|
*.temp
|
|
*.bak
|
|
*.orig
|
|
*.rej
|
|
*.pyc
|
|
__pycache__/
|
|
*.class
|
|
.cache/
|
|
tmp/
|
|
temp/
|
|
node_modules/
|
|
|
|
# ── Archives & large binaries ────────────────────────────────────────────────
|
|
*.zip
|
|
*.tar
|
|
*.tar.gz
|
|
*.tgz
|
|
*.rar
|
|
*.7z
|
|
*.iso
|
|
*.dmg
|
|
|
|
# ── Working scratch ──────────────────────────────────────────────────────────
|
|
# Icon exploration output and other throwaways.
|
|
**/assets/icons/_*.png
|
|
**/assets/icons/try_*.png
|
|
scratch/
|
|
scratchpad/
|
|
*.local
|
|
|
|
# ── Agent tooling ────────────────────────────────────────────────────────────
|
|
.claude/settings.local.json
|
|
.agents/
|