Skip to content

docs: add 3 core flow docs + CLAUDE.md operational playbook (closes #…#6812

Closed
AviArora02-commits wants to merge 1 commit intoBasedHardware:mainfrom
AviArora02-commits:docs/issue-4905-flow-docs-and-claude-md
Closed

docs: add 3 core flow docs + CLAUDE.md operational playbook (closes #…#6812
AviArora02-commits wants to merge 1 commit intoBasedHardware:mainfrom
AviArora02-commits:docs/issue-4905-flow-docs-and-claude-md

Conversation

@AviArora02-commits
Copy link
Copy Markdown

Summary

Closes #4905

Implements the full proposal from #4905 — 3 durable flow docs + CLAUDE.md operational playbook for AI-agent-safe Flutter changes.


Files Added

Core Flow Docs

  • app/docs/flows/ui-flow.md — Screen registry (108 screens across 10 flow groups), navigation graph, deep-link entry points, shared component map
  • app/docs/flows/data-flow.md — 24 API modules, 8 end-to-end flow traces (auth, capture, processing, chat, app install, action items, device connection, deep-links), 13 WebSocket event types, error/fallback paths
  • app/docs/flows/state-management.md — 41 provider registrations, 9 ProxyProvider chains, blast-radius table, mutation ownership, cross-provider reaction patterns

Generated YAML Artifacts (machine-diffable)

  • app/docs/flows/generated/ui-flow.screens.yaml
  • app/docs/flows/generated/data-flow.inventory.yaml
  • app/docs/flows/generated/state-management.providers.yaml

Generation Scripts

  • app/scripts/agent/generate_ui_flow_index.sh
  • app/scripts/agent/generate_data_flow_inventory.sh
  • app/scripts/agent/generate_state_graph.sh

Operational Playbook

  • app/CLAUDE.md — 8-section playbook covering: flow doc governance, build bootstrap, codegen rules, native bridge gotchas, permission matrix, test strategy, L10n rules, security notes

Files Modified

  • app/AGENTS.md — added mandatory flow-doc update rule
  • app/README.md — added Flow Docs & Architecture section linking the 3 docs

Flow Doc Checklist

  • No navigation/screen changes OR docs/flows/ui-flow.md updated + YAML regenerated
  • No API/schema/WS/deep-link changes OR docs/flows/data-flow.md updated + YAML regenerated
  • No provider tree changes OR docs/flows/state-management.md updated + YAML regenerated

Notes for Reviewers

  • This is a documentation-only PR — zero runtime or build impact
  • The 3 flow docs are seeded with the baseline analysis from the issue (108 screens, 24 API modules, 41 providers)
  • File paths and class names in the docs are based on the existing codebase structure — if anything doesn't match exactly, please flag and I'll update
  • The generation scripts are grep-based with no extra dependencies, so they run in any environment

Copilot AI review requested due to automatic review settings April 18, 2026 09:59
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Apr 18, 2026

Greptile Summary

This documentation-only PR adds three core flow docs (ui-flow.md, data-flow.md, state-management.md), their machine-diffable YAML counterparts, three generation scripts, and an expanded app/CLAUDE.md operational playbook. There is one concrete issue that needs fixing before merge:

  • app/README.md contains raw scaffolding instructions (lines 59–63) that were meant to guide edits to app/AGENTS.md but were accidentally committed into the README instead. app/AGENTS.md was never actually updated, despite the PR description listing it as a completed change.

Confidence Score: 4/5

Safe to merge after removing the accidental scaffolding text from README.md and updating AGENTS.md.

One P1 finding: raw instruction comments are rendered verbatim in the public README, and AGENTS.md was never actually updated. The remaining findings are P2 (a silently-dropped depends_on field in the state-graph script and a token-storage wording conflict). Everything else — the three flow docs, generation scripts, and CLAUDE.md playbook — is well-structured documentation.

app/README.md (accidental scaffolding text), app/AGENTS.md (should have been updated per PR description)

Important Files Changed

Filename Overview
app/README.md Scaffolding instruction text accidentally committed; raw # AGENTS.md — Additions... comment block now renders in the public README, and AGENTS.md itself was never updated.
app/CLAUDE.md Significantly expanded 8-section operational playbook; removes root-CLAUDE.md inheritance note and contains a token-storage claim that conflicts with the unchanged AGENTS.md.
app/scripts/agent/generate_state_graph.sh Script computes deps variable for upstream ProxyProvider dependencies but never writes it to YAML output; re-runs will produce YAML missing depends_on fields.
app/docs/flows/state-management.md New state-management doc with 41 provider registrations, 9 ProxyProvider chains, blast-radius table, and mutation ownership map; well-structured.
app/docs/flows/generated/state-management.providers.yaml Manually-authored YAML baseline with full depends_on and blast_radius_files fields; regenerating via the script will produce a leaner file missing depends_on.
app/docs/flows/ui-flow.md New screen registry doc covering 108 screens across 10 flow groups with navigation graph and deep-link entry points; manually-authored baseline snapshot.
app/docs/flows/data-flow.md New data-flow doc covering 24 API modules, 8 E2E flow traces, 13 WebSocket event types, and error/fallback paths; well-structured baseline.
app/scripts/agent/generate_ui_flow_index.sh Clean grep-based script that scans lib/pages/** for Widget subclasses and writes ui-flow.screens.yaml; no external dependencies.
app/scripts/agent/generate_data_flow_inventory.sh Scans lib/backend/http/api/ and extracts /v1/ path patterns and WebSocket event types; grep-only, no extra dependencies.
app/docs/flows/generated/data-flow.inventory.yaml Manually-authored baseline with 24 API modules, 13 WebSocket event entries, and 5 error-path scenarios; well-structured and consistent with the narrative doc.

Comments Outside Diff (1)

  1. app/CLAUDE.md, line 342-343 (link)

    P2 Token storage claim contradicts existing AGENTS.md and the prior CLAUDE.md

    The new §8 states tokens are stored via secure MethodChannel storage and "never in SharedPreferences or plain files." However, both app/AGENTS.md (unchanged by this PR) and the old app/CLAUDE.md said:

    Token stored in SharedPreferencesUtil with expiration timestamp

    If the codebase actually uses SharedPreferencesUtil, this new wording is inaccurate and could mislead contributors. Please verify the actual storage mechanism and align both docs accordingly.

Reviews (1): Last reviewed commit: "docs: add 3 core flow docs + CLAUDE.md o..." | Re-trigger Greptile

Comment thread app/README.md
Comment on lines +59 to +63
# AGENTS.md — Additions Required by Issue #4905
#
# Add the following section to the existing app/AGENTS.md file.
# Insert it BEFORE the final section or at the top-level after the existing agent rules.
# ──────────────────────────────────────────────────────────────────────────────
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Scaffolding instructions left in README.md

Raw generation-time instruction comments were accidentally committed directly into README.md. Lines 59–63 render literally in the README:

# AGENTS.md — Additions Required by Issue #4905
#
# Add the following section to the existing app/AGENTS.md file.
# Insert it BEFORE the final section or at the top-level...

These lines should be deleted from README.md. Additionally, app/AGENTS.md was never actually modified — it still carries the old content — even though the PR description lists "AGENTS.md — added mandatory flow-doc update rule" as a completed change.

Comment on lines +62 to +70
# Detect upstream dependencies from main.dart
deps=$(grep -oP "ChangeNotifierProxyProvider[^<]*<[^>]*${class_name}[^>]*>" "${MAIN_DART}" 2>/dev/null | head -1 || true)

cat >> "${OUT_FILE}" <<YAML
- name: ${class_name}
class: ${class_name}
file: ${rel}
type: ${ptype}
YAML
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 deps variable is computed but never written to YAML output

Line 63 extracts the upstream dependency list into $deps, but it is never emitted in the heredoc that follows (lines 65–70). Every provider in the regenerated YAML will be missing its depends_on field, silently diverging from the hand-crafted baseline in state-management.providers.yaml.

At minimum, add a depends_on: [] placeholder so the field always exists in regenerated output.

Comment thread app/CLAUDE.md
Comment on lines +10 to +12

1. [Flow Doc Governance](#1-flow-doc-governance)
2. [Build Bootstrap](#2-build-bootstrap)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Root CLAUDE.md inheritance reference removed

The previous version opened with:

Inherits all rules from the root ../CLAUDE.md. This file adds app-specific operational guidance.

That line was dropped. AI agents scoped to app/ may now miss rules defined in the repository-root CLAUDE.md. Consider re-adding the inheritance note or explicitly stating that root rules also apply.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a set of “core flow” documentation artifacts and an operational playbook intended to make Flutter app changes safer (especially for AI agents), along with simple scripts to regenerate machine-diffable inventories.

Changes:

  • Adds 3 new architecture/flow docs (UI flow, data flow, state management) under app/docs/flows/.
  • Adds 3 generated YAML artifacts intended for machine diffing under app/docs/flows/generated/.
  • Adds 3 bash generator scripts under app/scripts/agent/ and significantly expands app/CLAUDE.md.

Reviewed changes

Copilot reviewed 8 out of 11 changed files in this pull request and generated 28 comments.

Show a summary per file
File Description
app/scripts/agent/generate_ui_flow_index.sh Grep-based page-class scanner intended to regenerate UI flow YAML.
app/scripts/agent/generate_data_flow_inventory.sh Grep-based API/WebSocket inventory generator for data flow YAML.
app/scripts/agent/generate_state_graph.sh Grep-based provider inventory generator for state management YAML.
app/docs/flows/ui-flow.md New UI flow doc (screen registry, nav graph, deep links, shared components).
app/docs/flows/data-flow.md New data flow doc (API inventory, flow traces, WS event surface, error paths).
app/docs/flows/state-management.md New state management doc (providers, proxy chains, blast radius, mutations).
app/docs/flows/generated/ui-flow.screens.yaml Added “generated” UI screen index YAML artifact.
app/docs/flows/generated/data-flow.inventory.yaml Added “generated” data-flow inventory YAML artifact.
app/docs/flows/generated/state-management.providers.yaml Added “generated” provider graph YAML artifact.
app/README.md Adds a new section (currently containing AGENTS.md-edit instructions).
app/CLAUDE.md Expanded app operational playbook (governance, bootstrap, codegen, native bridge, etc.).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +46 to +52
# ── Scan lib/providers/*.dart ─────────────────────────────────────────────────
PROVIDERS_DIR="${LIB_DIR}/providers"
if [[ -d "${PROVIDERS_DIR}" ]]; then
find "${PROVIDERS_DIR}" -name "*.dart" | sort | while read -r file; do
rel="lib/${file#"${LIB_DIR}/"}"
class_name=$(grep -oP 'class \K\w+(?=\s+extends\s+(ChangeNotifier|StateNotifier))' "${file}" | head -1 || true)
if [[ -z "${class_name}" ]]; then
Copy link

Copilot AI Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This script uses grep -P to extract provider class names. -P isn’t supported by default BSD grep on macOS, so the generator won’t run everywhere. Please switch to a portable matcher (perl/awk/grep -E) if the goal is “runs in any environment”.

Copilot uses AI. Check for mistakes.
proxy_providers=$(grep -c 'ProxyProvider' "${MAIN_DART}" || true)
fi

# ── Header ────────────────────────────────────────────────────────────────────
Copy link

Copilot AI Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OUT_FILE is written via redirection but the script doesn’t ensure docs/flows/generated/ exists. Add mkdir -p "$(dirname "$OUT_FILE")" before writing to avoid failures on fresh checkouts/clean builds.

Suggested change
# ── Header ────────────────────────────────────────────────────────────────────
# ── Header ────────────────────────────────────────────────────────────────────
mkdir -p "$(dirname "${OUT_FILE}")"

Copilot uses AI. Check for mistakes.
Comment thread app/docs/flows/ui-flow.md

- [ ] Every new `lib/pages/**` file has a row in the Screen Registry.
- [ ] Any renamed class or file has its row updated.
- [ ] Navigation graph reflects current `GoRouter` / `Navigator.push` call graph.
Copy link

Copilot AI Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The freshness checklist references GoRouter, but there are no GoRouter usages in the current app (navigation appears to be Navigator/MaterialPageRoute). Please update this checklist wording to match the actual navigation stack to avoid sending contributors to look for a router that isn’t used.

Suggested change
- [ ] Navigation graph reflects current `GoRouter` / `Navigator.push` call graph.
- [ ] Navigation graph reflects the current `Navigator` / `MaterialPageRoute` flow.

Copilot uses AI. Check for mistakes.
Comment on lines +40 to +63
// Foundation (no deps)
ChangeNotifierProvider(create: (_) => AuthProvider()),
ChangeNotifierProvider(create: (_) => ConnectivityProvider()),

// Device layer (depends on Auth)
ChangeNotifierProxyProvider<AuthProvider, DeviceProvider>(
create: (_) => DeviceProvider(),
update: (_, auth, device) => device!..updateAuth(auth),
),

// Capture (depends on Device + Auth)
ChangeNotifierProxyProvider2<AuthProvider, DeviceProvider, CaptureProvider>(
create: (_) => CaptureProvider(),
update: (_, auth, device, capture) => capture!..update(auth, device),
),

// Conversation (depends on Auth + Capture)
ChangeNotifierProxyProvider2<AuthProvider, CaptureProvider, ConversationProvider>(...),

// Home (depends on Conversation + Capture + Device)
ChangeNotifierProxyProvider3<ConversationProvider, CaptureProvider, DeviceProvider, HomeProvider>(...),

// Chat, Memories, Apps, ActionItems, Settings ...
// (see full list in lib/main.dart)
Copy link

Copilot AI Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The “Simplified structure of lib/main.dart” example does not match the current provider registrations. For example, lib/main.dart registers AuthenticationProvider (not AuthProvider), uses ListenableProvider for ConnectivityProvider/AppProvider, and has a ChangeNotifierProxyProvider4<ConversationProvider, MessageProvider, PeopleProvider, UsageProvider, CaptureProvider> chain (among others). Please update this section based on the actual lib/main.dart so the doc is a trustworthy baseline.

Suggested change
// Foundation (no deps)
ChangeNotifierProvider(create: (_) => AuthProvider()),
ChangeNotifierProvider(create: (_) => ConnectivityProvider()),
// Device layer (depends on Auth)
ChangeNotifierProxyProvider<AuthProvider, DeviceProvider>(
create: (_) => DeviceProvider(),
update: (_, auth, device) => device!..updateAuth(auth),
),
// Capture (depends on Device + Auth)
ChangeNotifierProxyProvider2<AuthProvider, DeviceProvider, CaptureProvider>(
create: (_) => CaptureProvider(),
update: (_, auth, device, capture) => capture!..update(auth, device),
),
// Conversation (depends on Auth + Capture)
ChangeNotifierProxyProvider2<AuthProvider, CaptureProvider, ConversationProvider>(...),
// Home (depends on Conversation + Capture + Device)
ChangeNotifierProxyProvider3<ConversationProvider, CaptureProvider, DeviceProvider, HomeProvider>(...),
// Chat, Memories, Apps, ActionItems, Settings ...
// (see full list in lib/main.dart)
// Foundation registrations
ChangeNotifierProvider(create: (_) => AuthenticationProvider()),
ListenableProvider(create: (_) => ConnectivityProvider()),
ListenableProvider(create: (_) => AppProvider()),
// Example proxy chain registrations (must appear after their dependencies)
ChangeNotifierProxyProvider<AuthenticationProvider, DeviceProvider>(
create: (_) => DeviceProvider(),
update: (_, auth, device) => device!..updateAuth(auth),
),
ChangeNotifierProxyProvider2<AuthenticationProvider, DeviceProvider, ConversationProvider>(
create: (_) => ConversationProvider(),
update: (_, auth, device, conversation) =>
conversation!..update(auth, device),
),
ChangeNotifierProxyProvider4<
ConversationProvider,
MessageProvider,
PeopleProvider,
UsageProvider,
CaptureProvider
>(
create: (_) => CaptureProvider(),
update: (_, conversation, messages, people, usage, capture) =>
capture!..update(conversation, messages, people, usage),
),
// Additional providers and proxy chains follow in lib/main.dart.

Copilot uses AI. Check for mistakes.
> **Governance:** Any PR that changes `lib/backend/http/api/**`, `lib/backend/schema/**`,
> `lib/services/sockets/**`, or deep-link/notification handlers **must** update this file and
> regenerate `generated/data-flow.inventory.yaml` via
> `bash scripts/agent/generate_data_flow_inventory.sh`.
Copy link

Copilot AI Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The regeneration command/path uses bash scripts/agent/generate_data_flow_inventory.sh, but the generator script is under app/scripts/agent/ and is invoked as bash app/scripts/agent/generate_data_flow_inventory.sh from the repo root. Please update this so the instruction is runnable.

Suggested change
> `bash scripts/agent/generate_data_flow_inventory.sh`.
> `bash app/scripts/agent/generate_data_flow_inventory.sh`.

Copilot uses AI. Check for mistakes.
Comment thread app/docs/flows/ui-flow.md

> **Governance:** Any PR that changes navigation, adds/removes screens, or alters route behavior
> in `lib/pages/**` or `lib/core/app_shell.dart` **must** update this file and regenerate
> `generated/ui-flow.screens.yaml` via `bash scripts/agent/generate_ui_flow_index.sh`.
Copy link

Copilot AI Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The regeneration command/path here doesn’t match the actual script location. The generator lives under app/scripts/agent/ and is invoked as bash app/scripts/agent/generate_ui_flow_index.sh from the repo root (as documented in the script header). Using bash scripts/agent/... will fail from the repo root.

Suggested change
> `generated/ui-flow.screens.yaml` via `bash scripts/agent/generate_ui_flow_index.sh`.
> `generated/ui-flow.screens.yaml` via `bash app/scripts/agent/generate_ui_flow_index.sh`.

Copilot uses AI. Check for mistakes.
Comment thread app/docs/flows/ui-flow.md
Comment on lines +170 to +173
| `omi://conversation/<id>` | `ConversationDetailPage` | `lib/core/app_shell.dart` |
| `omi://memory/<id>` | `MemoryDetailPage` | `lib/core/app_shell.dart` |
| `omi://apps/<id>` | `AppDetailPage` | `lib/core/app_shell.dart` |
| `omi://chat` | `ChatPage` | `lib/core/app_shell.dart` |
Copy link

Copilot AI Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The deep-link patterns listed here don’t match how AppShell.openAppLink() currently routes links. In lib/core/app_shell.dart, routing is based on uri.pathSegments.first values like apps, wrapped, tasks, unlimited and host-based OAuth callbacks (e.g., todoist, asana), and there is no handling for conversation/memory paths. Please update this table to reflect the actual parsing logic so it’s not misleading.

Suggested change
| `omi://conversation/<id>` | `ConversationDetailPage` | `lib/core/app_shell.dart` |
| `omi://memory/<id>` | `MemoryDetailPage` | `lib/core/app_shell.dart` |
| `omi://apps/<id>` | `AppDetailPage` | `lib/core/app_shell.dart` |
| `omi://chat` | `ChatPage` | `lib/core/app_shell.dart` |
| `omi://apps/<id>` | `AppDetailPage` | `lib/core/app_shell.dart` |
| `omi://wrapped/...` | `Wrapped flow` | `lib/core/app_shell.dart` |
| `omi://tasks/...` | `Tasks flow` | `lib/core/app_shell.dart` |
| `omi://unlimited/...` | `Unlimited flow` | `lib/core/app_shell.dart` |
| OAuth callback host: `todoist` | `Todoist OAuth callback handling` | `lib/core/app_shell.dart` |
| OAuth callback host: `asana` | `Asana OAuth callback handling` | `lib/core/app_shell.dart` |

Copilot uses AI. Check for mistakes.

| Provider | Class | File | Key state fields | Key mutators |
|---|---|---|---|---|
| Memories | `MemoryProvider` | `lib/providers/memory_provider.dart` | `memories`, `loadingState` | `fetchMemories()`, `createMemory()`, `updateMemory()`, `deleteMemory()` |
Copy link

Copilot AI Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The memory provider naming/path here doesn’t match the codebase: the repo uses MemoriesProvider in lib/providers/memories_provider.dart (and it’s registered in lib/main.dart), not MemoryProvider/lib/providers/memory_provider.dart. Please align provider names/paths in this table to the actual implementations so readers can navigate to the correct code.

Suggested change
| Memories | `MemoryProvider` | `lib/providers/memory_provider.dart` | `memories`, `loadingState` | `fetchMemories()`, `createMemory()`, `updateMemory()`, `deleteMemory()` |
| Memories | `MemoriesProvider` | `lib/providers/memories_provider.dart` | `memories`, `loadingState` | `fetchMemories()`, `createMemory()`, `updateMemory()`, `deleteMemory()` |

Copilot uses AI. Check for mistakes.
if [[ -d "${PROVIDERS_DIR}" ]]; then
find "${PROVIDERS_DIR}" -name "*.dart" | sort | while read -r file; do
rel="lib/${file#"${LIB_DIR}/"}"
class_name=$(grep -oP 'class \K\w+(?=\s+extends\s+(ChangeNotifier|StateNotifier))' "${file}" | head -1 || true)
Copy link

Copilot AI Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Provider discovery only matches class ... extends (ChangeNotifier|StateNotifier), but many providers in this repo extend BaseProvider (e.g., AuthenticationProvider/AppProvider). Those will be silently omitted from the generated YAML, making the artifact unreliable. Consider broadening detection (e.g., include BaseProvider) or extracting provider registrations directly from lib/main.dart instead of inferring from extends clauses.

Suggested change
class_name=$(grep -oP 'class \K\w+(?=\s+extends\s+(ChangeNotifier|StateNotifier))' "${file}" | head -1 || true)
class_name=$(grep -oP 'class \K\w+(?=\s+extends\s+(ChangeNotifier|StateNotifier|BaseProvider))' "${file}" | head -1 || true)

Copilot uses AI. Check for mistakes.
Comment on lines +103 to +114
```
SplashPage
└─ AuthProvider.checkAuthState()
├─ [token valid] → navigate to HomeShell
└─ [no token / expired] → navigate to AuthPage
└─ User taps "Sign in with Google"
└─ google_sign_in package → OAuth token
└─ api/auth.dart: POST /v1/auth/google
└─ Response: {access_token, refresh_token, user}
└─ SecureStorage.write(tokens)
└─ AuthProvider.setUser(user)
└─ navigate to OnboardingWelcomePage (new) or HomeShell (returning)
Copy link

Copilot AI Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The auth flow trace references SplashPage, AuthProvider.checkAuthState(), and api/auth.dart endpoints, but these don’t align with the current app code (authentication is handled via AuthenticationProvider/AuthService, and there is no lib/backend/http/api/auth.dart). Please update the trace to reflect the actual entry widget/pages and the real auth/token refresh implementation paths so this stays actionable.

Copilot uses AI. Check for mistakes.
@beastoin beastoin closed this Apr 27, 2026
@github-actions
Copy link
Copy Markdown
Contributor

Hey @AviArora02-commits 👋

Thank you so much for taking the time to contribute to Omi! We truly appreciate you putting in the effort to submit this pull request.

After careful review, we've decided not to merge this particular PR. Please don't take this personally — we genuinely try to merge as many contributions as possible, but sometimes we have to make tough calls based on:

  • Project standards — Ensuring consistency across the codebase
  • User needs — Making sure changes align with what our users need
  • Code best practices — Maintaining code quality and maintainability
  • Project direction — Keeping aligned with our roadmap and vision

Your contribution is still valuable to us, and we'd love to see you contribute again in the future! If you'd like feedback on how to improve this PR or want to discuss alternative approaches, please don't hesitate to reach out.

Thank you for being part of the Omi community! 💜

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Proposal: 3 Core Flow Docs + CLAUDE.md Operational Playbook for AI-Agent-Safe Flutter Changes

3 participants