novaforge-appkit 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +131 -0
  3. package/adapters/claude-code/README.md +25 -0
  4. package/adapters/codex/AGENTS.section.md +53 -0
  5. package/adapters/codex/README.md +20 -0
  6. package/bin/appkit.js +171 -0
  7. package/install.sh +131 -0
  8. package/kit/agents/builder-agent.md +49 -0
  9. package/kit/agents/product-agent.md +48 -0
  10. package/kit/agents/release-agent.md +46 -0
  11. package/kit/agents/reviewer-agent.md +42 -0
  12. package/kit/commands/build.md +30 -0
  13. package/kit/commands/fix.md +33 -0
  14. package/kit/commands/idea.md +28 -0
  15. package/kit/commands/init.md +29 -0
  16. package/kit/commands/release.md +32 -0
  17. package/kit/commands/shape.md +33 -0
  18. package/kit/commands/verify.md +35 -0
  19. package/kit/constitution.md +79 -0
  20. package/kit/orchestrator.md +63 -0
  21. package/kit/policy-rules/admob.md +25 -0
  22. package/kit/policy-rules/apple-app-store.md +31 -0
  23. package/kit/policy-rules/google-play.md +33 -0
  24. package/kit/policy-rules/privacy.md +25 -0
  25. package/kit/profiles/android.md +31 -0
  26. package/kit/profiles/flutter.md +45 -0
  27. package/kit/profiles/ios.md +32 -0
  28. package/kit/scripts/_common.sh +24 -0
  29. package/kit/scripts/analyze.sh +6 -0
  30. package/kit/scripts/build-android.sh +12 -0
  31. package/kit/scripts/build-ios.sh +23 -0
  32. package/kit/scripts/capture-screenshots.sh +20 -0
  33. package/kit/scripts/compare-goldens.sh +21 -0
  34. package/kit/scripts/extract-dependencies.sh +23 -0
  35. package/kit/scripts/extract-permissions.sh +22 -0
  36. package/kit/scripts/format.sh +11 -0
  37. package/kit/scripts/scan-secrets.sh +15 -0
  38. package/kit/scripts/test.sh +12 -0
  39. package/kit/scripts/validate-ad-ids.sh +22 -0
  40. package/kit/scripts/validate-release.sh +30 -0
  41. package/kit/skills/admob-best-practices/SKILL.md +74 -0
  42. package/kit/skills/mobile-app-development/SKILL.md +69 -0
  43. package/kit/skills/mobile-privacy-and-permissions/SKILL.md +71 -0
  44. package/kit/skills/mobile-store-release/SKILL.md +74 -0
  45. package/kit/skills/mobile-testing-and-visual-qa/SKILL.md +79 -0
  46. package/kit/skills/small-app-product-design/SKILL.md +68 -0
  47. package/kit/templates/app-spec.template.md +89 -0
  48. package/kit/templates/idea.template.md +60 -0
  49. package/kit/templates/privacy-policy.template.md +41 -0
  50. package/kit/templates/release-manifest.template.yaml +46 -0
  51. package/kit/templates/store-listing.template.md +37 -0
  52. package/kit/templates/tasks.template.md +46 -0
  53. package/kit/templates/verification-report.template.md +58 -0
  54. package/package.json +43 -0
@@ -0,0 +1,79 @@
1
+ ---
2
+ name: mobile-testing-and-visual-qa
3
+ description: Define and run testing and visual QA for Flutter apps. Use during Build, Verify and Fix for unit/widget/integration tests, deterministic seed data, the screenshot catalog and capture, golden comparison, the AI visual-review rubric, structured defect format, accessibility checks and release smoke testing.
4
+ ---
5
+
6
+ # Mobile Testing & Visual QA
7
+
8
+ Evidence is what makes an app "done". This skill defines the tests and the visual review.
9
+
10
+ ## Test pyramid (small-app sizing)
11
+ - **Unit** — most tests. Business rules, validation, formatting, calculations, state
12
+ transitions, storage behavior, error handling, ad-eligibility/frequency logic.
13
+ - **Widget** — important screens: input, validation errors, empty/populated/error states,
14
+ primary navigation, ad-container behavior, accessibility labels where practical.
15
+ - **Integration** (`integration_test/`) — critical journeys only: first launch, main flow,
16
+ persistence across restart, settings change, error recovery, offline behavior, ad-unavailable
17
+ behavior, release-config smoke flow.
18
+
19
+ ## Conventions
20
+ - Name tests after behavior: `create_screen_shows_error_on_empty_title`.
21
+ - Aim for meaningful coverage of logic (not a number target); cover every acceptance criterion.
22
+ - Make tests **deterministic**: inject a fixed clock, fixed ids, and a fake repository. No
23
+ network, no real ads, no wall-clock time.
24
+
25
+ ## Deterministic seed data
26
+ Provide a `SeedData` helper used by integration and screenshot runs so every state is
27
+ reproducible (e.g. exactly 3 items with fixed titles/dates). Screenshots must be byte-stable.
28
+
29
+ ## Screenshot catalog
30
+ Defined in `app-spec.md`. Each entry: `id`, `screen`, `state`.
31
+ ```yaml
32
+ screenshots:
33
+ - { id: home_empty, screen: HOME, state: empty }
34
+ - { id: home_populated, screen: HOME, state: populated }
35
+ - { id: create_validation_error, screen: CREATE, state: invalid_input }
36
+ - { id: settings, screen: SETTINGS, state: default }
37
+ ```
38
+
39
+ ## Capture workflow
40
+ 1. Launch a deterministic build (`APP_ENV=dev`, seed data, test ads).
41
+ 2. Navigate automatically via the integration driver.
42
+ 3. Capture each catalog state to `.appkit/screenshots/qa/<id>.png` (stable names).
43
+ 4. Compare against `.appkit/screenshots/baselines/` when a baseline exists (golden compare).
44
+ 5. Submit images to AI visual review; write findings to `.appkit/screenshots/findings/`.
45
+
46
+ Use Flutter's `integration_test` + `IntegrationTestWidgetsFlutterBinding.takeScreenshot`, or
47
+ `flutter test --update-goldens` for widget goldens. Keep a single test device profile for v1.
48
+
49
+ ## AI visual-review rubric (inspect every screenshot for)
50
+ clipped text · overflow · overlapping components · broken safe areas · wrong keyboard
51
+ handling · inconsistent spacing · missing content · low contrast · weak hierarchy ·
52
+ misaligned controls · unclear primary action · broken dark mode · ad obstruction ·
53
+ accidental-click risk · empty unused ad space · debug info · placeholder content ·
54
+ platform-inappropriate UI.
55
+
56
+ ## Structured defect format
57
+ ```yaml
58
+ id: VQA-003
59
+ category: visual # visual | accessibility | functional | ...
60
+ severity: major # critical | major | minor | informational
61
+ screen: CREATE
62
+ state: keyboard_open
63
+ requirement: AC-3
64
+ evidence: .appkit/screenshots/qa/create_keyboard_open.png
65
+ issue: Primary action is hidden behind the keyboard
66
+ expected: Primary action remains reachable
67
+ recommended_fix: Add keyboard-aware inset and scroll support
68
+ status: open
69
+ ```
70
+
71
+ ## Accessibility basics (lean checklist)
72
+ text scaling (up to ~200%) · contrast (WCAG AA) · touch targets ≥ 48dp · semantic labels on
73
+ controls · meaningful button names · no color-only signaling · sane focus order · screen-reader
74
+ reachability of the critical flow. Use the Flutter `meetsGuideline` semantics matchers.
75
+
76
+ ## Regression & smoke
77
+ - Every fix adds a regression test reproducing the bug.
78
+ - Release smoke: build release, install, launch, run the core flow, confirm no debug/test-ad
79
+ config — see `mobile-store-release`.
@@ -0,0 +1,68 @@
1
+ ---
2
+ name: small-app-product-design
3
+ description: Generate, evaluate and shape small mobile app ideas. Use for idea scoring, MVP scope reduction, target-user and primary-outcome definition, screen inventory, user flows, acceptance criteria, monetization fit and policy-risk screening during the Idea and Shape phases.
4
+ ---
5
+
6
+ # Small App Product Design
7
+
8
+ Guidance for turning a vague request into a small, coherent, launchable product.
9
+
10
+ ## Selection criteria — a good small app
11
+ - One clear user problem and one primary outcome.
12
+ - Buildable in days, not months. 3–6 screens, 1–2 core flows.
13
+ - Works **offline / local-first**; no login, no backend, no personal data.
14
+ - Repeat usage (a reason to open it again) and a natural ad surface if monetized.
15
+ - Low store-review risk (no sensitive category, no high-risk permission).
16
+
17
+ ## Idea scoring (rate each 1–5, then decide)
18
+ Clarity of problem · usefulness · MVP size (smaller = better) · technical complexity
19
+ (lower = better) · offline suitability · backend dependency (lower = better) · personal-data
20
+ exposure (lower = better) · permission risk (lower = better) · AdMob suitability · repeat
21
+ usage · differentiation · store-review risk (lower = better) · release speed.
22
+
23
+ **Decision:** `GO` · `GO WITH REDUCED SCOPE` · `REVISE` · `HOLD` · `REJECT`.
24
+ Reject ideas that need a backend, sensitive data, accounts, or a regulated category for the
25
+ MVP — or steer them to a smaller adjacent idea.
26
+
27
+ ## MVP reduction rules
28
+ - Cut any feature that does not serve the primary outcome.
29
+ - Replace configuration with sensible defaults.
30
+ - Defer: accounts, sync, sharing, theming, settings beyond the essentials, analytics.
31
+ - One "delight" feature maximum. Everything else is post-launch.
32
+ - If you cannot describe the app in one sentence, it is too big.
33
+
34
+ ## Defining the product
35
+ - **Target user**: one concrete persona and the moment they reach for the app.
36
+ - **Primary outcome**: the single thing the user accomplishes ("convert a recipe's servings").
37
+ - **Core features**: 3–5 bullets, each tied to the outcome.
38
+ - **Out of scope**: list explicitly — this is as important as the in-scope list.
39
+
40
+ ## Screen inventory (per screen)
41
+ id · name · purpose · entry points · exit points · primary action · secondary actions ·
42
+ displayed data · empty / error / loading / keyboard states · ad placement · accessibility
43
+ notes · screenshot states. Every distinct visual **state** becomes a screenshot id.
44
+
45
+ ## User flows
46
+ Describe the main flow as an ordered list of (screen → action → result). Cover first launch,
47
+ the core flow, persistence across restart, and one error-recovery path.
48
+
49
+ ## Acceptance criteria
50
+ Write them testable and observable, e.g.:
51
+ > AC-3: When the user submits an empty title, the Create screen shows an inline error and
52
+ > does not save. (verified by widget test `create_validation_error`)
53
+ Each criterion should map to at least one test and, when visual, one screenshot.
54
+
55
+ ## Monetization fit
56
+ Decide during shaping (see `admob-best-practices`). If ads do not fit the usage pattern
57
+ (very short sessions, sensitive context, child-directed), recommend no ads or a one-time
58
+ paid model rather than forcing placements.
59
+
60
+ ## Policy-risk screening (early)
61
+ Flag any: children as audience, health/finance/legal claims, gambling, UGC, social comms,
62
+ location tracking, high-risk permissions, content licensing. Any flag triggers a
63
+ human-confirmation question (constitution §8) before shaping continues.
64
+
65
+ ## When to ask the human
66
+ Ask only high-value questions: target audience, monetization intensity, Android-first vs
67
+ simultaneous, paid vs free. Make safe assumptions for everything else and record them under
68
+ "Assumptions" in `app-spec.md`.
@@ -0,0 +1,89 @@
1
+ # Application Specification
2
+
3
+ > Lean spec for a small app. Keep it proportional — delete sections that don't apply.
4
+
5
+ ## 1. Product Summary
6
+ ## 2. Product Objective
7
+ ## 3. Target Users
8
+ ## 4. Primary User Outcome
9
+ ## 5. Core Features
10
+ <!-- 3–5, each tied to the outcome. -->
11
+ ## 6. Out of Scope
12
+ <!-- Explicit. As important as in-scope. -->
13
+ ## 7. Main User Flow
14
+ <!-- Ordered screen → action → result. -->
15
+
16
+ ## 8. Screen Inventory
17
+ | ID | Name | Purpose | States |
18
+ |----|------|---------|--------|
19
+ | HOME | Home | | empty, populated, error |
20
+
21
+ ## 9. Screen Specifications
22
+ <!-- Per screen: -->
23
+ ```yaml
24
+ screen_id: HOME
25
+ name: Home
26
+ purpose:
27
+ entry_points: []
28
+ exit_points: []
29
+ primary_action:
30
+ secondary_actions: []
31
+ displayed_data: []
32
+ states: [empty, populated, error, loading, keyboard]
33
+ ads:
34
+ placement_id: home_bottom_banner
35
+ format: anchored_adaptive_banner
36
+ accessibility_notes:
37
+ screenshots: [home_empty, home_populated]
38
+ ```
39
+
40
+ ## 10. Data Model
41
+ ## 11. Local Storage
42
+ <!-- Tech + repository interface + migration/version. -->
43
+ ## 12. Permissions
44
+ | Permission | Feature | User benefit | Runtime explanation | Store declaration |
45
+ |---|---|---|---|---|
46
+ <!-- An unjustified permission is a release blocker. -->
47
+
48
+ ## 13. Third-Party SDKs
49
+ | SDK | Category | Data collected | Privacy manifest? |
50
+ |---|---|---|---|
51
+
52
+ ## 14. AdMob Plan
53
+ <!-- Per placement: -->
54
+ ```yaml
55
+ placement_id: home_bottom_banner
56
+ format: anchored_adaptive_banner
57
+ screen: HOME
58
+ trigger: screen_visible
59
+ frequency: sdk_managed
60
+ critical_interaction_conflict: false
61
+ accidental_click_risk: low
62
+ loading_behavior: preserve_layout
63
+ failure_behavior: collapse_or_preserve_clean_space
64
+ development_ad_id: test
65
+ production_ad_id_source: environment_configuration
66
+ ```
67
+
68
+ ## 15. Privacy Plan
69
+ <!-- Data inventory + Data Safety / App Privacy mapping + policy URL placeholder. -->
70
+ ## 16. Technical Approach
71
+ <!-- Profile, structure, state mgmt, navigation, env config. -->
72
+ ## 17. Testing Strategy
73
+ <!-- Unit / widget / integration coverage + screenshot catalog. -->
74
+
75
+ ## Screenshot Catalog
76
+ ```yaml
77
+ screenshots:
78
+ - { id: home_empty, screen: HOME, state: empty }
79
+ - { id: home_populated, screen: HOME, state: populated }
80
+ ```
81
+
82
+ ## 18. Accessibility Requirements
83
+ ## 19. Acceptance Criteria
84
+ <!-- AC-n: observable + testable, mapped to a test/screenshot. -->
85
+ ## 20. Store Risks
86
+ ## 21. Release Targets
87
+ <!-- platforms, stores, OS targets, version. -->
88
+ ## 22. Assumptions
89
+ <!-- Every safe default chosen automatically. -->
@@ -0,0 +1,60 @@
1
+ # App Idea
2
+
3
+ ## Working Title
4
+
5
+ ## Problem
6
+ <!-- The one concrete problem this app solves. -->
7
+
8
+ ## Target User
9
+ <!-- One persona and the moment they reach for the app. -->
10
+
11
+ ## Core Value / Primary Outcome
12
+ <!-- The single thing the user accomplishes. -->
13
+
14
+ ## Primary Use Case
15
+
16
+ ## Proposed MVP
17
+ <!-- 3–6 bullets, each tied to the outcome. -->
18
+
19
+ ## Main Screens
20
+ <!-- Rough list; full inventory comes in Shape. -->
21
+
22
+ ## Why It Fits The Kit
23
+ <!-- Small, local-first, low-permission, low-policy-risk, launchable fast. -->
24
+
25
+ ## Monetization Concept
26
+ <!-- Ads? Which format? Or none / paid. -->
27
+
28
+ ## Privacy Considerations
29
+ <!-- Data touched, ideally none beyond on-device. -->
30
+
31
+ ## Permission Considerations
32
+
33
+ ## Store Risks
34
+ <!-- Any policy-sensitive aspects. -->
35
+
36
+ ## Recommended Platforms
37
+ <!-- android | ios | both, with reasoning. -->
38
+
39
+ ## Complexity Estimate
40
+ <!-- size, screens, days. -->
41
+
42
+ ## Idea Scores (1–5)
43
+ | Dimension | Score |
44
+ |---|---|
45
+ | Problem clarity | |
46
+ | Usefulness | |
47
+ | MVP size (smaller=better) | |
48
+ | Technical complexity (lower=better) | |
49
+ | Offline suitability | |
50
+ | Backend dependency (lower=better) | |
51
+ | Personal-data exposure (lower=better) | |
52
+ | Permission risk (lower=better) | |
53
+ | AdMob suitability | |
54
+ | Repeat usage | |
55
+ | Differentiation | |
56
+ | Store-review risk (lower=better) | |
57
+ | Release speed | |
58
+
59
+ ## Decision
60
+ <!-- GO | GO WITH REDUCED SCOPE | REVISE | HOLD | REJECT + one-line rationale. -->
@@ -0,0 +1,41 @@
1
+ # Privacy Policy — <APP_NAME>
2
+
3
+ > DRAFT. Every `<PLACEHOLDER>` must be reviewed and completed by a human before publishing.
4
+ > This is not legal advice. Host this at a stable URL and reference it in both stores.
5
+
6
+ **Effective date:** <DATE>
7
+ **Developer:** <DEVELOPER_NAME / ENTITY>
8
+ **Contact:** <SUPPORT_EMAIL>
9
+
10
+ ## Summary
11
+ <APP_NAME> is a local-first mobile app. <STATE_WHETHER_ANY_DATA_LEAVES_THE_DEVICE.>
12
+
13
+ ## Data We Collect
14
+ <!-- From the data inventory. For a pure local app this may be "none". -->
15
+ | Data | Purpose | Stored | Shared | Retention |
16
+ |---|---|---|---|---|
17
+ | <e.g. app content> | <app function> | on device | no | until user deletes |
18
+
19
+ ## Data We Do Not Collect
20
+ <!-- Be specific to build trust: no account, no precise location, no contacts, etc. -->
21
+
22
+ ## Third-Party Services
23
+ <!-- List each SDK and link its policy. e.g. Google AdMob. -->
24
+ - **Google AdMob** (if ads enabled): may collect device/advertising identifiers to serve ads.
25
+ See Google's policy: https://policies.google.com/privacy. Personalized ads are gated on
26
+ consent where required (EEA/UK/CCPA). <STATE_PERSONALIZED_OR_NON_PERSONALIZED.>
27
+
28
+ ## Advertising & Consent
29
+ <DESCRIBE_UMP_CONSENT_FLOW_AND_AD_PERSONALIZATION.>
30
+
31
+ ## Children
32
+ <STATE_WHETHER_DIRECTED_TO_CHILDREN_AND_RELEVANT_PROTECTIONS, or "not directed to children".>
33
+
34
+ ## Your Rights
35
+ <DATA_ACCESS_DELETION_MECHANISM — e.g. uninstalling removes all local data.>
36
+
37
+ ## Changes
38
+ We may update this policy; changes will be posted at <HOSTED_URL>.
39
+
40
+ ## Contact
41
+ <SUPPORT_EMAIL>
@@ -0,0 +1,46 @@
1
+ # Release Manifest — generated by /appkit.release
2
+ app:
3
+ name: <APP_NAME>
4
+ android_application_id: <com.example.app>
5
+ ios_bundle_id: <com.example.app>
6
+ version:
7
+ name: <1.0.0>
8
+ android_version_code: <1>
9
+ ios_build: <1>
10
+ verification:
11
+ status: <ready | ready_with_warnings_approved>
12
+ report: .appkit/verification-report.md
13
+ unresolved_blockers: 0
14
+ targets: [android, ios]
15
+ stores: [google_play, apple_app_store]
16
+ monetization:
17
+ admob: <true|false>
18
+ ad_ids_source: environment_configuration
19
+ artifacts:
20
+ android_aab: release/builds/android/<app>-release.aab
21
+ ios_archive: release/builds/ios/<app>.xcarchive # or instructions
22
+ metadata:
23
+ google_play: release/metadata/google-play.md
24
+ app_store: release/metadata/app-store.md
25
+ release_notes: release/metadata/release-notes.md
26
+ review_notes: release/metadata/review-notes.md
27
+ privacy:
28
+ policy: release/privacy/privacy-policy.md
29
+ google_data_safety: release/privacy/google-data-safety.md
30
+ apple_app_privacy: release/privacy/apple-app-privacy.md
31
+ compliance:
32
+ google_play: release/compliance/google-play-review.md
33
+ apple_app_store: release/compliance/apple-app-store-review.md
34
+ admob: release/compliance/admob-review.md
35
+ privacy: release/compliance/privacy-review.md
36
+ checklists:
37
+ android: release/checklists/android-release.md
38
+ ios: release/checklists/ios-release.md
39
+ signing:
40
+ android: { play_app_signing: true, secrets_in_repo: false }
41
+ ios: { provisioning_ready: <true|false>, secrets_in_repo: false }
42
+ human_approval:
43
+ required: true
44
+ granted: false # human sets true before submission
45
+ placeholders_remaining: [] # must be empty before submission
46
+ generated_at: <DATE>
@@ -0,0 +1,37 @@
1
+ # Store Listing — <APP_NAME>
2
+
3
+ > Draft metadata. Mark every `<PLACEHOLDER>`. No misleading claims; do not show unavailable
4
+ > features. Keep within each store's length limits.
5
+
6
+ ## Common
7
+ - **App name:** <APP_NAME>
8
+ - **Category:** <CATEGORY>
9
+ - **Privacy policy URL:** <HOSTED_URL>
10
+ - **Support URL:** <SUPPORT_URL>
11
+ - **Marketing URL:** <OPTIONAL>
12
+
13
+ ## Google Play
14
+ - **Short description (≤80 chars):**
15
+ - **Full description (≤4000 chars):**
16
+ - **Release notes:**
17
+ - **Content rating:** <IARC_QUESTIONNAIRE_RESULT>
18
+ - **Target audience & content:** <AGE_GROUPS>
19
+ - **Ads declaration:** <CONTAINS_ADS: yes/no>
20
+ - **Data Safety:** see `privacy/google-data-safety.md`
21
+
22
+ ## Apple App Store
23
+ - **Subtitle (≤30 chars):**
24
+ - **Promotional text (≤170 chars):**
25
+ - **Description:**
26
+ - **Keywords (≤100 chars, comma-separated):**
27
+ - **What's New (release notes):**
28
+ - **Age rating:** <RATING>
29
+ - **App Privacy:** see `privacy/apple-app-privacy.md`
30
+ - **Export compliance:** <USUALLY "No" for standard HTTPS>
31
+
32
+ ## Reviewer Notes (both stores)
33
+ <!-- Explain non-obvious behavior, how to reach ad-bearing screens, demo/login if any. -->
34
+
35
+ ## Screenshots
36
+ - Source: `release/screenshots/store-final/`
37
+ - Required sizes: <PER_PLATFORM_DEVICE_SIZES>
@@ -0,0 +1,46 @@
1
+ # Tasks
2
+
3
+ ## Status Legend
4
+ - [ ] Not started
5
+ - [~] In progress
6
+ - [x] Complete
7
+ - [!] Blocked
8
+
9
+ > Group by vertical slice. Each task links feature, screen, acceptance criteria, test
10
+ > expectation, and policy consideration.
11
+
12
+ ## Slice 1: Application shell
13
+ ### TASK-001
14
+ - **Feature:** project setup
15
+ - **Screen:** —
16
+ - **Description:** Initialize project, package ids, navigation, theme, initial tests.
17
+ - **Acceptance:** AC-? · **Tests:** smoke test passes · **Policy:** —
18
+ - **Status:** [ ]
19
+
20
+ ## Slice 2: Core flow
21
+ ### TASK-002
22
+ - **Feature:** · **Screen:** HOME
23
+ - **Description:**
24
+ - **Acceptance:** AC-? · **Tests:** unit + widget · **Policy:** —
25
+ - **Status:** [ ]
26
+
27
+ ## Slice 3: Persistence
28
+ ### TASK-003
29
+ - **Feature:** local storage · **Screen:** —
30
+ - **Description:** Repository + migration + persistence tests.
31
+ - **Acceptance:** AC-? · **Tests:** unit (storage) · **Policy:** data inventory updated
32
+ - **Status:** [ ]
33
+
34
+ ## Slice 4: Advertising
35
+ ### TASK-004
36
+ - **Feature:** AdMob · **Screen:** HOME
37
+ - **Description:** Ad adapter, test ad config, banner placement, failure-state handling.
38
+ - **Acceptance:** AC-? · **Tests:** widget (ad container, failure) · **Policy:** AdMob placement rules
39
+ - **Status:** [ ]
40
+
41
+ ## Slice 5: Verification readiness
42
+ ### TASK-005
43
+ - **Feature:** QA · **Screen:** all
44
+ - **Description:** Deterministic seed data, screenshot scenarios, critical integration test.
45
+ - **Acceptance:** screenshot catalog reachable · **Tests:** integration · **Policy:** —
46
+ - **Status:** [ ]
@@ -0,0 +1,58 @@
1
+ # Verification Report
2
+
3
+ **Overall Status:** <!-- READY | READY WITH WARNINGS | NOT READY | HUMAN CONFIRMATION REQUIRED -->
4
+ **Date:** · **Mode:** <!-- full | changed | android | ios | visual | policy -->
5
+
6
+ ## Build Information
7
+ <!-- profile, app id/bundle id, version, env, flutter/dart versions -->
8
+
9
+ ## Test Summary
10
+ | Suite | Result | Notes |
11
+ |---|---|---|
12
+ | Static analysis | | |
13
+ | Unit | | |
14
+ | Widget | | |
15
+ | Integration | | |
16
+
17
+ ## Unit Test Results
18
+ ## Component (Widget) Test Results
19
+ ## Integration Test Results
20
+
21
+ ## Screenshot Coverage
22
+ | Catalog id | Captured | Golden | Result |
23
+ |---|---|---|---|
24
+
25
+ ## Findings
26
+ > One block per finding.
27
+ ```yaml
28
+ id: VQA-001
29
+ category: visual
30
+ severity: major # critical | major | minor | informational
31
+ status: open # open | fixed | accepted
32
+ screen:
33
+ state:
34
+ requirement:
35
+ evidence:
36
+ issue:
37
+ expected:
38
+ recommended_fix:
39
+ ```
40
+
41
+ ## Visual QA Findings
42
+ ## Accessibility Findings
43
+ ## Permission Findings
44
+ ## SDK & Privacy Findings
45
+ ## AdMob Findings
46
+ ## Google Play Findings
47
+ ## Apple App Store Findings
48
+ ## Release Build Findings
49
+
50
+ ## Blocking Issues
51
+ <!-- critical + unresolved major -->
52
+ ## Warnings
53
+ <!-- minor -->
54
+ ## Recommended Fixes
55
+ <!-- ordered, minimal -->
56
+
57
+ ## Final Decision
58
+ <!-- verdict + the next command -->
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "novaforge-appkit",
3
+ "version": "0.1.0",
4
+ "description": "Lean Mobile App Launch Kit — take a small mobile app from idea to a store-ready release with Claude Code or Codex.",
5
+ "bin": {
6
+ "appkit": "bin/appkit.js"
7
+ },
8
+ "type": "commonjs",
9
+ "engines": {
10
+ "node": ">=16"
11
+ },
12
+ "files": [
13
+ "bin/",
14
+ "kit/",
15
+ "adapters/",
16
+ "install.sh",
17
+ "README.md"
18
+ ],
19
+ "scripts": {
20
+ "test": "node bin/appkit.js --help"
21
+ },
22
+ "keywords": [
23
+ "appkit",
24
+ "mobile",
25
+ "flutter",
26
+ "claude-code",
27
+ "codex",
28
+ "spec-kit",
29
+ "admob",
30
+ "app-store",
31
+ "google-play",
32
+ "ai-agents"
33
+ ],
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "git+ssh://git@github.com/NovaForgeOrg/appkit.git"
37
+ },
38
+ "homepage": "https://github.com/NovaForgeOrg/appkit#readme",
39
+ "bugs": {
40
+ "url": "https://github.com/NovaForgeOrg/appkit/issues"
41
+ },
42
+ "license": "MIT"
43
+ }