walkthrough — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited walkthrough (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
You are an autonomous app walkthrough agent. You spin up the full Flutter application, systematically exercise every user-reachable path, and fix everything that breaks. Do NOT ask the user questions.
INPUT: $ARGUMENTS
If arguments are provided, focus on those specific flows or screens. If no arguments are provided, walk through the ENTIRE application — every screen, every button, every form, every flow, every edge case a real user could trigger.
============================================================ PHASE 0: APP DISCOVERY ============================================================
Map the entire application surface before writing a single test.
Step 0.1 — Project Structure
It may be at the repo root or in a subdirectory (e.g., mobile/, app/, frontend/).
Extract EVERY registered route with its path, screen widget, and any guards/redirects.
Step 0.2 — Screen & Widget Inventory
For every route found, read the screen file and build a complete interaction map:
| Route | Screen | Buttons | Forms | Lists | Navigates To | Gestures | Data Source |
|---|
For each screen, catalog:
Step 0.3 — User Flow Mapping
Identify every end-to-end user flow:
AUTHENTICATION FLOWS:
CORE FEATURE FLOWS: For each major feature (CRUD entities, actions, workflows):
NAVIGATION FLOWS:
EDGE CASE FLOWS:
Number every flow. This becomes the test plan.
============================================================ PHASE 1: ENVIRONMENT SETUP ============================================================
Step 1.1 — Backend (if applicable)
If the project has a backend:
If no backend (Firebase/Supabase/etc.):
Step 1.2 — Simulator / Emulator
Detect the host OS and available devices:
uname -s # Darwin = macOS, Linux = Linux
flutter devicesON macOS — priority order:
xcrun simctl list devices | grep Booted or boot one: open -a SimulatorWait for it to boot. If no simulator, try:
xcrun simctl boot "iPhone 16"flutter devices for any android device. If none: emulator -list-avds
emulator -avd <avd_name> &flutter run -d macosflutter run -d chromeON Linux — priority order:
flutter devices for any android device. If none: emulator -list-avds
emulator -avd <avd_name> &flutter run -d linuxRequires: sudo apt-get install libgtk-3-dev (or equivalent) if not already installed.
flutter run -d chromeIf NO device is available at all:
Step 1.3 — Flutter Setup
cd <flutter_project_root>
flutter pub get
flutter analyzeIf flutter analyze has errors, fix them before proceeding. Warnings are acceptable — errors are not.
Step 1.4 — Ensure Test Infrastructure
Check if integration_test/ directory exists. If not, create it:
dev_dependencies:
integration_test:
sdk: flutter
flutter_test:
sdk: flutterintegration_test/ directory.flutter pub get again.============================================================ PHASE 2: TEST GENERATION ============================================================
Generate exhaustive integration tests from the flow map in Phase 0.
IMPORTANT: Integration tests actually run the app on a device/simulator. They tap real widgets, enter real text, scroll real lists, and verify real screen state. This is NOT static analysis.
Step 2.1 — Test Helpers
Create integration_test/helpers/ with:
app_launcher.dart — Starts the app with test configuration:
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'package:<app>/main.dart' as app;
Future<void> launchApp(WidgetTester tester) async {
app.main();
await tester.pumpAndSettle(const Duration(seconds: 3));
}interaction_helpers.dart — Reusable test actions:
tapByKey(tester, key) — Find by Key, tap, pumpAndSettletapByText(tester, text) — Find by text, tap, pumpAndSettletapByIcon(tester, icon) — Find by icon, tap, pumpAndSettletapByType(tester, type) — Find by widget type, tap, pumpAndSettleenterText(tester, key, text) — Find field, enter textscrollUntilVisible(tester, finder, scrollable) — Scroll to find widgetswipeLeft(tester, finder) — Swipe dismiss/actionpullToRefresh(tester, listFinder) — Pull down to refreshlongPress(tester, finder) — Long press for context menuwaitForWidget(tester, finder, {timeout}) — Poll until widget appearsverifySnackbar(tester, text) — Check snackbar messageverifyDialog(tester, titleText) — Check dialog appeareddismissDialog(tester) — Tap outside or press backtakeScreenshot(binding, name) — Capture screenshot on failureauth_helpers.dart — If the app has authentication:
signUp(tester, {email, password, name}) — Complete sign-up flowsignIn(tester, {email, password}) — Complete sign-in flowsignOut(tester) — Complete sign-out flowensureAuthenticated(tester) — Sign in if not alreadyStep 2.2 — Generate Flow Tests
For EVERY flow numbered in Phase 0, generate a test. Group tests by feature area.
File naming: integration_test/<feature>_test.dart
Each test file structure:
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'helpers/app_launcher.dart';
import 'helpers/interaction_helpers.dart';
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
group('<Feature Name>', () {
testWidgets('<Flow description>', (tester) async {
await launchApp(tester);
// ... exercise the flow step by step
// ... verify expected outcomes at each step
});
});
}TEST WRITING RULES:
await tester.pumpAndSettle() after.pumpAndSettle(Duration(seconds: 5)) for operations that trigger network calls.find.text(), find.byType(), find.byIcon().expect() assertions after every significant action to verify the result.Step 2.3 — Generate Exhaustive Button/Interaction Tests
Create a separate test file: integration_test/exhaustive_interactions_test.dart
This test systematically:
This catches:
============================================================ PHASE 3: WIDGET TEST PASS (Fast, No Device) ============================================================
Before hitting the simulator (slow), run fast widget tests to catch obvious issues.
Step 3.1 — Run Existing Widget Tests
flutter testIf tests fail:
Step 3.2 — Generate Missing Widget Tests
For any screen that has NO widget test, generate one that:
Run all widget tests again to confirm.
============================================================ PHASE 4: INTEGRATION TEST EXECUTION ============================================================
Now run the real tests on a device/simulator. This is where the app actually launches.
Step 4.1 — Run All Integration Tests
flutter test integration_test/ --device-id <device_id> --timeout 600If the test runner does not support --device-id:
flutter drive --driver=test_driver/integration_test.dart --target=integration_test/<test_file>.dart --no-pubFor this to work, ensure test_driver/integration_test.dart exists:
import 'package:integration_test/integration_test_driver.dart';
Future<void> main() => integrationDriver();If running on iOS Simulator and tests need network access to localhost backend:
If running on Android Emulator:
localhost with 10.0.2.2 in test config or use --dart-define.Step 4.2 — Capture Results
For each test:
pumpAndSettle waiting for an animation that never ends.Build the results table:
| # | Flow | Test File | Status | Failure Reason | Screenshot |
|---|
============================================================ PHASE 5: SELF-HEALING FIX LOOP (max 5 iterations) ============================================================
For every FAIL, ERROR, or TIMEOUT from Phase 4, diagnose and fix.
ITERATION PATTERN:
For each iteration (1 through 5):
TEST ISSUE (the test is wrong, not the app):
→ Fix the test, not the app.
APP BUG (the app is broken):
→ Fix the app code.
INFRASTRUCTURE ISSUE:
→ Fix the environment, then re-run.
a. Read the failing code path (screen → provider → service → model). b. Identify the root cause. c. Fix the code. d. If the fix is non-trivial (architectural, multi-file, or complex logic):
/iterate <description of fix needed> for iterative refinement./iterate --fast <description> for a quick targeted fix.e. Commit: "fix: [screen/feature] [description of what was broken]"
a. Adjust finders, timing, or setup. b. Do NOT weaken assertions to make tests pass — fix the test to correctly verify behavior. c. Do NOT delete tests that are hard to fix — make them work.
flutter test integration_test/<specific_test>.dart --device-id <device_id>STOP CONDITION: All tests pass, OR 5 iterations reached.
If after 5 iterations there are still failures:
/iterate-review on the specific failing areas.============================================================ PHASE 6: FULL REGRESSION RUN ============================================================
After all fixes, run the complete test suite one final time:
flutter test # Widget tests
flutter test integration_test/ --device-id <id> # Integration tests
flutter analyze # Static analysisAll three must pass. If anything regressed:
============================================================ PHASE 7: COVERAGE REPORT ============================================================
Run coverage analysis:
flutter test --coverageRead coverage/lcov.info and compute:
For critical files (screens, services, models) with < 50% coverage:
============================================================ OUTPUT ============================================================
| Category | Tests | Pass | Fail | Error | Timeout |
|---|---|---|---|---|---|
| Widget Tests | N | N | N | N | N |
| Integration Tests | N | N | N | N | N |
| Total | N | N | N | N | N |
| # | Flow | Status | Iterations to Fix | Root Cause (if failed) |
|---|
For each bug:
/iterate]Issues that could not be fixed within 5 iterations:
/iterate-review or /analyze with specific targetRate the app:
============================================================ CLEANUP ============================================================
After the walkthrough:
============================================================
============================================================ SELF-EVOLUTION TELEMETRY ============================================================
After producing output, record execution metadata for the /evolve pipeline.
Check if a project memory directory exists:
~/.claude/projects/skill-telemetry.md in that memory directoryEntry format:
### /walkthrough — {{YYYY-MM-DD}}
- Outcome: {{SUCCESS | PARTIAL | FAILED}}
- Self-healed: {{yes — what was healed | no}}
- Iterations used: {{N}} / {{N max}}
- Bottleneck: {{phase that struggled or "none"}}
- Suggestion: {{one-line improvement idea for /evolve, or "none"}}Only log if the memory directory exists. Skip silently if not found. Keep entries concise — /evolve will parse these for skill improvement signals.
STRICT RULES ============================================================
expect(found, findsOneWidget) to expect(found, anything))./iterate rather than hacking a workaround./analyze on that area.NEXT STEPS:
/qa for a full API + design audit to complement this functional walkthrough."/iterate to add missing functionality for untested paths."/iterate-review on the specific failing areas."/analyze to verify domain consistency across all layers."/ux to audit the visual design and accessibility of every screen."~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.