From bd62bcdd9d49ffe7bdb1bfa6d35c165bcd21b211 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 31 Mar 2026 13:34:35 +0000 Subject: [PATCH 1/2] chore(deps): bump DavidAnson/markdownlint-cli2-action from 19 to 23 Bumps [DavidAnson/markdownlint-cli2-action](https://github.com/davidanson/markdownlint-cli2-action) from 19 to 23. - [Release notes](https://github.com/davidanson/markdownlint-cli2-action/releases) - [Commits](https://github.com/davidanson/markdownlint-cli2-action/compare/v19...v23) --- updated-dependencies: - dependency-name: DavidAnson/markdownlint-cli2-action dependency-version: '23' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 73973ae..7879c1f 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -12,7 +12,7 @@ jobs: steps: - uses: actions/checkout@v6 - name: Lint Markdown - uses: DavidAnson/markdownlint-cli2-action@v19 + uses: DavidAnson/markdownlint-cli2-action@v23 with: globs: '**/*.md' config: 'config/custom.markdownlint.jsonc' From 6aab573f7435c476b3eb0611465b4561980451d3 Mon Sep 17 00:00:00 2001 From: Jorge Coca Date: Tue, 31 Mar 2026 09:05:04 -0500 Subject: [PATCH 2/2] fix: table style to aligned --- CLAUDE.md | 1 + skills/bloc/SKILL.md | 16 +++++----- skills/bloc/references/patterns.md | 2 +- skills/bloc/references/testing.md | 16 +++++----- skills/bloc/references/widgets.md | 28 ++++++++--------- skills/internationalization/SKILL.md | 30 +++++++++---------- .../references/directionality.md | 8 ++--- skills/material-theming/SKILL.md | 18 +++++------ skills/navigation/SKILL.md | 18 +++++------ skills/static-security/references/packages.md | 2 +- 10 files changed, 70 insertions(+), 69 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 60f47ff..f608a04 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -60,6 +60,7 @@ Every `SKILL.md` follows this structure: - Provide complete, copy-pasteable snippets, not fragments - Reference packages by full name (e.g., `package:mocktail`) - Include anti-patterns alongside correct patterns when helpful +- Align pipe characters vertically in all markdown tables (enforced by markdownlint MD060) ## Adding a New Skill diff --git a/skills/bloc/SKILL.md b/skills/bloc/SKILL.md index 315714e..f17615d 100644 --- a/skills/bloc/SKILL.md +++ b/skills/bloc/SKILL.md @@ -30,7 +30,7 @@ Apply these standards to ALL Bloc/Cubit work: | Aspect | Cubit | Bloc | | ----------------- | ------------------------------ | --------------------------------------- | -| API | Functions → `emit(state)` | Events → `on` → `emit(state)` | +| API | Functions → `emit(state)` | Events → `on` → `emit(state)` | | Complexity | Low | Higher | | Traceability | Less (no event log) | Full (events + transitions) | | When to use | Simple state, UI-driven logic | Complex flows, event-driven, transforms | @@ -76,13 +76,13 @@ class CounterBloc extends Bloc { **Pattern:** `BlocSubject` + `Noun` + `VerbPastTense` -| Event class name | Meaning | -| ----------------------------- | -------------------------------- | -| `TodoListSubscriptionRequested` | Subscribing to todo list stream | -| `TodoListTodoDeleted` | Deleting a specific todo | -| `TodoListUndoDeletionRequested` | Undoing the last deletion | -| `LoginFormSubmitted` | Submitting the login form | -| `ProfilePageRefreshed` | Refreshing the profile page | +| Event class name | Meaning | +| ------------------------------- | -------------------------------- | +| `TodoListSubscriptionRequested` | Subscribing to todo list stream | +| `TodoListTodoDeleted` | Deleting a specific todo | +| `TodoListUndoDeletionRequested` | Undoing the last deletion | +| `LoginFormSubmitted` | Submitting the login form | +| `ProfilePageRefreshed` | Refreshing the profile page | ```dart sealed class TodoListEvent extends Equatable { diff --git a/skills/bloc/references/patterns.md b/skills/bloc/references/patterns.md index 481fdf4..43bdfae 100644 --- a/skills/bloc/references/patterns.md +++ b/skills/bloc/references/patterns.md @@ -60,7 +60,7 @@ class SearchBloc extends Bloc { ``` | Transformer | Behavior | -| ------------------ | ---------------------------------------------------- | +| ------------------| ----------------------------------------------------- | | `concurrent()` | Process all events concurrently (default) | | `sequential()` | Process events one at a time in order | | `droppable()` | Ignore new events while one is processing | diff --git a/skills/bloc/references/testing.md b/skills/bloc/references/testing.md index b54a7cd..b74c3d4 100644 --- a/skills/bloc/references/testing.md +++ b/skills/bloc/references/testing.md @@ -4,14 +4,14 @@ | Parameter | Type | Purpose | | ---------- | --------------------------- | ---------------------------------------------- | -| `build` | `() => Bloc/Cubit` | Creates the Bloc/Cubit under test | -| `act` | `(bloc) => void` | Interacts with the Bloc/Cubit | -| `expect` | `() => List` | Expected states emitted (in order) | -| `seed` | `() => State` | Initial state before `act` | -| `setUp` | `() => void` | Runs before `build` | -| `verify` | `(bloc) => void` | Additional verifications after `expect` | -| `errors` | `() => List` | Expected errors thrown | -| `wait` | `Duration` | Wait duration before asserting (for debounce) | +| `build` | `() => Bloc/Cubit` | Creates the Bloc/Cubit under test | +| `act` | `(bloc) => void` | Interacts with the Bloc/Cubit | +| `expect` | `() => List` | Expected states emitted (in order) | +| `seed` | `() => State` | Initial state before `act` | +| `setUp` | `() => void` | Runs before `build` | +| `verify` | `(bloc) => void` | Additional verifications after `expect` | +| `errors` | `() => List` | Expected errors thrown | +| `wait` | `Duration` | Wait duration before asserting (for debounce) | ## Cubit Test Example diff --git a/skills/bloc/references/widgets.md b/skills/bloc/references/widgets.md index b8bdbb7..a9d3e5c 100644 --- a/skills/bloc/references/widgets.md +++ b/skills/bloc/references/widgets.md @@ -1,23 +1,23 @@ # Flutter Widgets -| Widget | Purpose | -| ------------------- | ---------------------------------------------------------- | -| `BlocProvider` | Creates and provides a Bloc/Cubit to the subtree | -| `BlocBuilder` | Rebuilds widget when state changes | +| Widget | Purpose | +| ------------------- | ------------------------------------------------------------ | +| `BlocProvider` | Creates and provides a Bloc/Cubit to the subtree | +| `BlocBuilder` | Rebuilds widget when state changes | | `BlocListener` | Executes side effects (navigation, snackbar) on state change | -| `BlocConsumer` | Combines `BlocBuilder` + `BlocListener` | -| `BlocSelector` | Rebuilds only when a selected property changes | -| `MultiBlocProvider` | Provides multiple Blocs/Cubits without nesting | -| `MultiBlocListener` | Registers multiple listeners without nesting | -| `RepositoryProvider`| Provides a repository to the subtree | +| `BlocConsumer` | Combines `BlocBuilder` + `BlocListener` | +| `BlocSelector` | Rebuilds only when a selected property changes | +| `MultiBlocProvider` | Provides multiple Blocs/Cubits without nesting | +| `MultiBlocListener` | Registers multiple listeners without nesting | +| `RepositoryProvider`| Provides a repository to the subtree | ## Context Extensions -| Extension | Purpose | Rebuilds? | -| ------------------ | ------------------------------------------------ | --------- | -| `context.read()` | Access Bloc/Cubit instance (one-time read) | No | -| `context.watch()` | Access Bloc/Cubit and subscribe to changes | Yes | -| `context.select()` | Subscribe to a specific state property | Yes (selective) | +| Extension | Purpose | Rebuilds? | +| ------------------------ | ------------------------------------------------ | --------------- | +| `context.read()` | Access Bloc/Cubit instance (one-time read) | No | +| `context.watch()` | Access Bloc/Cubit and subscribe to changes | Yes | +| `context.select()` | Subscribe to a specific state property | Yes (selective) | - Use `context.read` in callbacks (`onPressed`, `onTap`, `initState`) - Use `context.watch` or `BlocBuilder` in `build` methods diff --git a/skills/internationalization/SKILL.md b/skills/internationalization/SKILL.md index 6db0e0b..771097f 100644 --- a/skills/internationalization/SKILL.md +++ b/skills/internationalization/SKILL.md @@ -23,10 +23,10 @@ Apply these standards to ALL internationalization work: ## Key Definitions -| Term | Definition | -| ----------------------------- | ------------------------------------------------------------------------------------------- | -| **Locale** | Set of properties defining user region, language, and preferences (currency, time, numbers) | -| **Localization (l10n)** | Process of adapting software for a specific language by translating text and adding regional layouts | +| Term | Definition | +| ------------------------------- | ----------------------------------------------------------------------------------------------------- | +| **Locale** | Set of properties defining user region, language, and preferences (currency, time, numbers) | +| **Localization (l10n)** | Process of adapting software for a specific language by translating text and adding regional layouts | | **Internationalization (i18n)** | Process of designing software so it can be adapted to different languages without engineering changes | ## Setup Pipeline and ARB File Format @@ -138,17 +138,17 @@ See [references/backend.md](references/backend.md) for multi-language content st ## Quick Reference -| Package | Purpose | -| -------------------------- | -------------------------------------- | -| `flutter_localizations` | Flutter's built-in localization support | -| `intl` | Internationalization utilities | +| Package | Purpose | +| ----------------------- | --------------------------------------- | +| `flutter_localizations` | Flutter's built-in localization support | +| `intl` | Internationalization utilities | -| Command | Purpose | -| -------------------- | ------------------------------------------- | -| `flutter gen-l10n` | Generate localization classes from ARB files | +| Command | Purpose | +| ------------------ | -------------------------------------------- | +| `flutter gen-l10n` | Generate localization classes from ARB files | -| File | Purpose | -| ------------------ | ------------------------------------------------ | +| File | Purpose | +| ------------------ | -------------------------------------------------- | | `l10n.yaml` | Localization configuration (ARB dir, output, etc.) | -| `app_en.arb` | Template ARB file (source of truth) | -| `app_.arb` | Translated ARB file for each locale | +| `app_en.arb` | Template ARB file (source of truth) | +| `app_.arb` | Translated ARB file for each locale | diff --git a/skills/internationalization/references/directionality.md b/skills/internationalization/references/directionality.md index 164806e..4e370fe 100644 --- a/skills/internationalization/references/directionality.md +++ b/skills/internationalization/references/directionality.md @@ -19,10 +19,10 @@ Retrieve the current direction: `Directionality.of(context)` ## Visual vs Directional Widgets -| Widget Type | Direction Terms | Use Case | -| --------------- | --------------------- | ------------------------------------------- | -| **Visual** | top, left, right, bottom | Absolute positioning that never changes | -| **Directional** | top, start, end, bottom | Relative to text direction (respects RTL) | +| Widget Type | Direction Terms | Use Case | +| --------------- | -------------------------- | ----------------------------------------- | +| **Visual** | top, left, right, bottom | Absolute positioning that never changes | +| **Directional** | top, start, end, bottom | Relative to text direction (respects RTL) | ## `EdgeInsetsDirectional` vs `EdgeInsets` diff --git a/skills/material-theming/SKILL.md b/skills/material-theming/SKILL.md index 60a778d..fb667c7 100644 --- a/skills/material-theming/SKILL.md +++ b/skills/material-theming/SKILL.md @@ -162,12 +162,12 @@ See [references/spacing.md](references/spacing.md) for the full `AppSpacing` cla | `cardTheme` | Card default styling | | `dialogTheme` | Dialog default styling | -| Material 3 Color Role | Typical Use | -| ---------------------- | ------------------------------------ | -| `primary` | Key UI elements, FAB, active states | -| `onPrimary` | Text/icons on primary color | -| `secondary` | Less prominent UI elements | -| `surface` | Card, sheet, dialog backgrounds | -| `onSurface` | Text/icons on surface color | -| `error` | Error indicators, destructive actions | -| `outline` | Borders, dividers | +| Material 3 Color Role | Typical Use | +| --------------------- | ------------------------------------- | +| `primary` | Key UI elements, FAB, active states | +| `onPrimary` | Text/icons on primary color | +| `secondary` | Less prominent UI elements | +| `surface` | Card, sheet, dialog backgrounds | +| `onSurface` | Text/icons on surface color | +| `error` | Error indicators, destructive actions | +| `outline` | Borders, dividers | diff --git a/skills/navigation/SKILL.md b/skills/navigation/SKILL.md index 7fe26e5..0a05972 100644 --- a/skills/navigation/SKILL.md +++ b/skills/navigation/SKILL.md @@ -116,9 +116,9 @@ class FlutterPageRoute extends GoRouteData { ### `go()` vs `push()` -| Method | URL Updates | Back Button | Use Case | -| -------- | ----------- | ----------- | ------------------------------------------- | -| `go()` | Yes | App bar | Standard navigation between screens | +| Method | URL Updates | Back Button | Use Case | +| -------- | ----------- | ----------- | -------------------------------------------- | +| `go()` | Yes | App bar | Standard navigation between screens | | `push()` | No | System | When expecting return data from popped route | ### Using `go()` (Default) @@ -210,12 +210,12 @@ class AppShellRoute extends ShellRouteData { ## Quick Reference -| Package | Purpose | -| -------------------- | -------------------------------------------- | -| `go_router` | Declarative routing built on Navigator 2.0 | -| `go_router_builder` | Code generation for type-safe route classes | +| Package | Purpose | +| ------------------- | ------------------------------------------- | +| `go_router` | Declarative routing built on Navigator 2.0 | +| `go_router_builder` | Code generation for type-safe route classes | | Command | Purpose | | ---------------------------------------------------------- | -------------------------------- | -| `dart run build_runner build --delete-conflicting-outputs` | Generate type-safe route helpers | -| `dart run build_runner watch --delete-conflicting-outputs` | Watch and regenerate on changes | +| `dart run build_runner build --delete-conflicting-outputs` | Generate type-safe route helpers | +| `dart run build_runner watch --delete-conflicting-outputs` | Watch and regenerate on changes | diff --git a/skills/static-security/references/packages.md b/skills/static-security/references/packages.md index baf4d98..558c54a 100644 --- a/skills/static-security/references/packages.md +++ b/skills/static-security/references/packages.md @@ -19,4 +19,4 @@ When auditing a codebase with this skill, triage findings using these tiers: | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Critical | Hardcoded API key or token; `badCertificateCallback` bypass; JWT in `SharedPreferences`; sensitive data in logs | | Warning | Missing certificate pinning on auth endpoints; `Random()` used for session IDs; no `package:formz` validation before API calls; `android:allowBackup="true"` | -| Note | Missing Dart obfuscation; `dart pub outdated` shows available patches; low-pub-point transitive dependency with broad permissions | +| Note | Missing Dart obfuscation; `dart pub outdated` shows available patches; low-pub-point transitive dependency with broad permissions |