agentleFS
osocietyosociety/vernet/.github/copilot-instructions.md

vernet

Copilot instructions566 starsChanged 13 days agoApache-2.0View on GitHub

Apply these instructions to all work in this repository. They are ranked by recurrence and practical impact across the indexed chat history and repository guidance. Keep changes focused and preserve existing project conventions.

The file

Show its rules and text

We split this copilot-instructions.md into the rules it gives an agent

73 rules. About 2 are common, 57 are distinctive, and 14 are very specific to this project.

  • ≈2

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈57

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 14

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  • could be automatic: a setting could enforce it
  1. Distinctive:

    Start from the concrete error, failing test, named file, or requested behavior.

    line 9
  2. Distinctive:

    Keep each change narrowly scoped to the requested behavior.

    line 13
  3. Distinctive:

    Follow the repository's existing architecture and local conventions.

    line 15
  4. Distinctive:

    Do not refactor unrelated code while fixing a targeted problem.

    line 16
  5. Distinctive:

    Treat user edits and dirty-worktree changes as intentional.

    line 17
  6. Distinctive:

    Do not commit or create branches unless explicitly requested.

    line 18
  7. Distinctive:

    Prefer fixing the root cause over masking the symptom.

    line 19
  8. Distinctive:

    After the first substantive edit, run a focused validation immediately.

    line 21
  9. Distinctive:

    If validation fails, repair the same slice before expanding the investigation.

    line 22
  10. Distinctive:

    If validation disproves the hypothesis, move one hop toward the controlling code.

    line 23
  11. Distinctive:

    Use a neighboring test or call site to resolve ambiguous ownership.

    line 24
  12. Distinctive:

    Keep the user informed with concise progress updates during longer work.

    line 25
  13. Very specific:

    Keep primary application logic under lib/.

    line 32
  14. Very specific:

    Keep UI in lib/pages/ and reusable UI in lib/widgets/.

    line 33
  15. Distinctive:

    Keep network operations in services, never directly in widgets.

    line 34
  16. Very specific:

    Keep structured data in lib/models/.

    line 36
  17. Very specific:

    Keep reusable helpers in lib/utils/.

    line 37
  18. Distinctive:

    Keep feature state local whenever possible.

    line 38
  19. Very specific:

    Prefer Provider, scoped state, or simple StatefulWidget state already used nearby.

    line 39
  20. Distinctive:

    Avoid introducing global mutable state.

    line 40
  21. Distinctive:

    Keep services independent of UI dependencies.

    line 41
  22. Distinctive:

    Keep functions small and focused.

    line 44
  23. Distinctive:

    Prefer composition over duplication.

    line 45
  24. Distinctive:

    Add a model when a result has multiple related fields or lifecycle states.

    line 46
  25. Distinctive:

    Keep platform-specific changes isolated to the relevant platform directory.

    line 47
  26. Distinctive:

    Avoid editing Android, iOS, Linux, macOS, or Windows glue unless necessary.

    line 48
  27. Distinctive:

    Use plugins and platform channels through their established abstraction.

    line 49
  28. Very specific:

    Read ARCHITECTURE.md before structural changes.

    line 50
  29. Distinctive:

    Keep new network tools organized as page, service, model, and tests.

    line 51
  30. Distinctive:

    Read the complete stack trace and locate the first project-owned frame.

    line 55
  31. Distinctive:

    Verify dependency APIs against the installed package version before changing callers.

    line 56
  32. Distinctive:

    Use the dependency's expected types and serialization formats exactly.

    line 57
  33. Very specific:

    Do not infer a package object's identifier from toString() when a typed property exists.

    line 58
  34. Distinctive:

    Use UTC or another explicit fallback for missing timezone data.

    line 62
  35. Common:

    Do not hide a real initialization error behind a broad catch without logging or rationale.

    line 63
  36. Distinctive:

    Keep fallback behavior observable and testable.

    line 64
  37. Very specific:

    Prefer lightweight dependencies already present in pubspec.yaml.

    line 65
  38. Distinctive:

    Avoid adding a package when the existing SDK or repository helper is sufficient.

    line 66
  39. Distinctive:

    Check cross-platform compatibility before adding or changing a dependency.

    line 67
  40. Distinctive:

    Keep dependency lockfile changes limited to dependency changes.

    line 68
  41. Distinctive:

    Never edit generated files by hand unless the project workflow requires it.

    line 69
  42. Distinctive:

    Treat SQLite locking as a lifecycle and concurrency problem first.

    line 71
  43. Distinctive:

    Ensure database handles, statements, and transactions are closed or awaited correctly.

    line 72
  44. Distinctive:

    Avoid overlapping database initialization and test cleanup operations.

    line 73
  45. Distinctive:

    Add or update a focused regression test for every behavior fix when practical.

    line 78
  46. Distinctive:

    Run the narrowest relevant test before the full suite.

    line 79
  47. Very specific:

    Use flutter test path/to/test.dart for a focused unit or widget test.

    line 80
  48. Distinctive:

    Use the repository's actual integration-test command rather than a guessed command.

    line 81
  49. Distinctive:

    Use an explicit testing flag or injected fake for external network behavior.

    line 84
  50. Distinctive:

    Do not make production behavior depend on test-only assumptions.

    line 85
  51. Distinctive:

    Test plugin-unavailable paths without requiring a native plugin implementation.

    line 87
  52. Distinctive:

    Test notification and timezone setup with valid typed identifiers.

    line 88
  53. Distinctive:

    Test reverse DNS with a stable fixture when external resolution is not the subject.

    line 89
  54. Distinctive:

    Keep integration tests focused on user-visible workflows.

    line 90
  55. Distinctive:

    Avoid parallel test work that can contend for the same SQLite database.

    line 92
  56. Distinctive:

    Add coverage tests around parsing and conversion logic rather than native calls.

    line 93
  57. Very specific:

    Use const fixtures where the analyzer recommends them and they are valid.

    line 94
  58. Distinctive:

    Run the analyzer after test or production edits that affect types or APIs.

    line 96
  59. Distinctive:

    Do not claim a platform test passed when the required SDK or device is unavailable.

    line 97
  60. Very specific:

    Run flutter analyze after a coherent set of Dart changes.

    line 101
  61. Common:

    Treat analyzer warnings as actionable unless there is a documented exception.

    line 102
  62. Distinctive:

    Check available Flutter devices before attempting integration tests.

    line 106
  63. Very specific:

    Check for required native tooling such as xcodebuild before macOS or iOS tests.

    line 107
  64. Distinctive:

    If a platform cannot run locally, validate the platform-independent code and say what remains.

    line 108
  65. Very specific:

    Use rg for repository searches and include the relevant path scope.

    line 110
  66. Distinctive:

    Use package-cache inspection only to confirm an installed API or implementation detail.

    line 111
  67. Distinctive:

    Do not use invalid command flags.

    line 112
  68. Distinctive:

    Keep terminal commands noninteractive unless interaction is genuinely required.

    line 113
  69. Distinctive:

    Stop and report when a command needs unavailable credentials, SDKs, or devices.

    line 114
  70. Distinctive:

    Prefer one focused validation command over a broad command with noisy unrelated failures.

    line 115
  71. Distinctive:

    Avoid speculative claims, unnecessary verbosity, and unrelated recommendations.

    line 122
  72. Distinctive:

    Leave the code clearer, testable, analyzer-clean, and consistent with the existing project.

    line 123
  73. Very specific:

    If graphify-out/wiki/index.md exists, use it for broad navigation.

    line 136

≈ “Common” is an estimate: at least 1 in 5 of the 3,779 Copilot instructions files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
copilot-instructions.md

Vernet Copilot Instructions

Apply these instructions to all work in this repository. They are ranked by recurrence and practical impact across the indexed chat history and repository guidance. Keep changes focused and preserve existing project conventions.

Workflow and Scope

  1. Start from the concrete error, failing test, named file, or requested behavior.
  2. Inspect the smallest nearby code path that controls the behavior before editing.
  3. State one falsifiable hypothesis about the failure before making a change.
  4. Identify one cheap validation check that could disprove the hypothesis.
  5. Keep each change narrowly scoped to the requested behavior.
  6. Preserve existing public APIs unless the request requires a contract change.
  7. Follow the repository's existing architecture and local conventions.
  8. Do not refactor unrelated code while fixing a targeted problem.
  9. Treat user edits and dirty-worktree changes as intentional; never discard them.
  10. Do not commit or create branches unless explicitly requested.
  11. Prefer fixing the root cause over masking the symptom.
  12. Make the smallest reversible edit that can test the current hypothesis.
  13. After the first substantive edit, run a focused validation immediately.
  14. If validation fails, repair the same slice before expanding the investigation.
  15. If validation disproves the hypothesis, move one hop toward the controlling code.
  16. Use a neighboring test or call site to resolve ambiguous ownership.
  17. Keep the user informed with concise progress updates during longer work.
  18. Finish the task end to end when the environment permits it.
  19. Report blockers plainly instead of implying that unrun checks passed.
  20. Summarize changed files, verification, and remaining limitations at the end. When asked to close or wrap up a chat, use .github/skills/close-chat/SKILL.md to record only durable, verified context and update relevant guidance.

Flutter Architecture

  1. Keep primary application logic under lib/.
  2. Keep UI in lib/pages/ and reusable UI in lib/widgets/.
  3. Keep network operations in services, never directly in widgets.
  4. Route feature actions through the UI, provider/controller, and service layers.
  5. Keep structured data in lib/models/.
  6. Keep reusable helpers in lib/utils/.
  7. Keep feature state local whenever possible.
  8. Prefer Provider, scoped state, or simple StatefulWidget state already used nearby.
  9. Avoid introducing global mutable state.
  10. Keep services independent of UI dependencies.
  11. Make services reusable across screens and platforms.
  12. Return structured models from services instead of presentation strings.
  13. Keep functions small and focused.
  14. Prefer composition over duplication.
  15. Add a model when a result has multiple related fields or lifecycle states.
  16. Keep platform-specific changes isolated to the relevant platform directory.
  17. Avoid editing Android, iOS, Linux, macOS, or Windows glue unless necessary.
  18. Use plugins and platform channels through their established abstraction.
  19. Read ARCHITECTURE.md before structural changes.
  20. Keep new network tools organized as page, service, model, and tests.

Errors and Dependencies

  1. Read the complete stack trace and locate the first project-owned frame.
  2. Verify dependency APIs against the installed package version before changing callers.
  3. Use the dependency's expected types and serialization formats exactly.
  4. Do not infer a package object's identifier from toString() when a typed property exists.
  5. Handle plugin initialization explicitly on platforms where it may be unavailable.
  6. Guard platform plugin calls in tests and unsupported environments.
  7. Provide a documented, deterministic fallback when an external service is unavailable.
  8. Use UTC or another explicit fallback for missing timezone data.
  9. Do not hide a real initialization error behind a broad catch without logging or rationale.
  10. Keep fallback behavior observable and testable.
  11. Prefer lightweight dependencies already present in pubspec.yaml.
  12. Avoid adding a package when the existing SDK or repository helper is sufficient.
  13. Check cross-platform compatibility before adding or changing a dependency.
  14. Keep dependency lockfile changes limited to dependency changes.
  15. Never edit generated files by hand unless the project workflow requires it.
  16. Regenerate generated artifacts with the repository's prescribed command.
  17. Treat SQLite locking as a lifecycle and concurrency problem first.
  18. Ensure database handles, statements, and transactions are closed or awaited correctly.
  19. Avoid overlapping database initialization and test cleanup operations.
  20. Reproduce database failures with the smallest relevant test or command.

Testing

  1. Add or update a focused regression test for every behavior fix when practical.
  2. Run the narrowest relevant test before the full suite.
  3. Use flutter test path/to/test.dart for a focused unit or widget test.
  4. Use the repository's actual integration-test command rather than a guessed command.
  5. Separate unit, widget, and integration-test claims in the final report.
  6. Make tests deterministic and independent of live DNS, network timing, or host state.
  7. Use an explicit testing flag or injected fake for external network behavior.
  8. Do not make production behavior depend on test-only assumptions.
  9. Cover success, failure, fallback, and unsupported-platform branches.
  10. Test plugin-unavailable paths without requiring a native plugin implementation.
  11. Test notification and timezone setup with valid typed identifiers.
  12. Test reverse DNS with a stable fixture when external resolution is not the subject.
  13. Keep integration tests focused on user-visible workflows.
  14. Reset test databases before and after tests when the suite expects a clean store.
  15. Avoid parallel test work that can contend for the same SQLite database.
  16. Add coverage tests around parsing and conversion logic rather than native calls.
  17. Use const fixtures where the analyzer recommends them and they are valid.
  18. Re-run the exact failing test after each local repair.
  19. Run the analyzer after test or production edits that affect types or APIs.
  20. Do not claim a platform test passed when the required SDK or device is unavailable.

Verification and Diagnostics

  1. Run flutter analyze after a coherent set of Dart changes.
  2. Treat analyzer warnings as actionable unless there is a documented exception.
  3. Confirm fresh command output rather than relying on an earlier run.
  4. Capture the exact command and result for every verification claim.
  5. Distinguish test failures from environment or toolchain failures.
  6. Check available Flutter devices before attempting integration tests.
  7. Check for required native tooling such as xcodebuild before macOS or iOS tests.
  8. If a platform cannot run locally, validate the platform-independent code and say what remains.
  9. Reproduce CI failures locally only after identifying the closest matching command.
  10. Use rg for repository searches and include the relevant path scope.
  11. Use package-cache inspection only to confirm an installed API or implementation detail.
  12. Do not use invalid command flags; verify the command's help or use the repository's tooling.
  13. Keep terminal commands noninteractive unless interaction is genuinely required.
  14. Stop and report when a command needs unavailable credentials, SDKs, or devices.
  15. Prefer one focused validation command over a broad command with noisy unrelated failures.

Communication and Code Quality

  1. Explain the cause and behavior change in plain engineering language.
  2. Link changed workspace files using their repository-relative paths.
  3. Mention important limitations, especially platform coverage and unavailable tooling.
  4. Avoid speculative claims, unnecessary verbosity, and unrelated recommendations.
  5. Leave the code clearer, testable, analyzer-clean, and consistent with the existing project.

graphify

For any question about this repo's architecture, structure, components, or how to add/modify/find code, your first action should be graphify query "<question>" when graphify-out/graph.json exists. Use graphify path "<A>" "<B>" for relationship questions and graphify explain "<concept>" for focused-concept questions. These return a scoped subgraph, usually much smaller than the full report or raw grep output.

Triggers: "how do I…", "where is…", "what does … do", "add/modify a <component>", "explain the architecture", or anything that depends on how files or classes relate.

If graphify-out/wiki/index.md exists, use it for broad navigation. Read graphify-out/GRAPH_REPORT.md only for broad architecture review or when query/path/explain do not surface enough context. Only read source files when (a) modifying/debugging specific code, (b) the graph lacks the needed detail, or (c) the graph is missing or stale.

Type /graphify in Copilot Chat to build or update the graph.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.