{"id":51689440,"url":"https://github.com/tbhb/vale-ears","last_synced_at":"2026-07-16T00:33:56.039Z","repository":{"id":364224365,"uuid":"1266955957","full_name":"tbhb/vale-ears","owner":"tbhb","description":"A Vale style package for validating requirements written in EARS (Easy Approach to Requirements Syntax)","archived":false,"fork":false,"pushed_at":"2026-06-12T05:59:39.000Z","size":23,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-12T07:19:35.232Z","etag":null,"topics":["ears","linter","prose-linter","requirements","requirements-engineering","style-guide","systems-engineering","technical-writing","vale","vale-linter-style","vale-style","writing"],"latest_commit_sha":null,"homepage":"","language":"Just","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tbhb.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-12T05:17:10.000Z","updated_at":"2026-06-12T06:02:37.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/tbhb/vale-ears","commit_stats":null,"previous_names":["tbhb/vale-ears"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/tbhb/vale-ears","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tbhb%2Fvale-ears","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tbhb%2Fvale-ears/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tbhb%2Fvale-ears/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tbhb%2Fvale-ears/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tbhb","download_url":"https://codeload.github.com/tbhb/vale-ears/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tbhb%2Fvale-ears/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35526113,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-15T02:00:06.706Z","response_time":131,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ears","linter","prose-linter","requirements","requirements-engineering","style-guide","systems-engineering","technical-writing","vale","vale-linter-style","vale-style","writing"],"created_at":"2026-07-16T00:33:55.268Z","updated_at":"2026-07-16T00:33:56.021Z","avatar_url":"https://github.com/tbhb.png","language":"Just","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- vale ears = NO --\u003e\n# vale-ears\n\nA [Vale](https://vale.sh/) package for validating requirements written in the [EARS (Easy Approach to Requirements Syntax)](https://alistairmavin.com/ears/) format.\n\nEARS constraints natural language into a structured, standardized format to reduce ambiguity and improve consistency in requirements engineering.\n\n## Rules\n\n### `ears.Syntax`\n\nChecks that any sentence containing the word `shall` conforms to one of the standard EARS patterns:\n\n- **Ubiquitous:** the `\u003csystem\u003e` shall `\u003caction\u003e`\n- **Event-driven:** when `\u003ctrigger\u003e`, the `\u003csystem\u003e` shall `\u003caction\u003e`\n- **State-driven:** while `\u003cprecondition\u003e`, the `\u003csystem\u003e` shall `\u003caction\u003e`\n- **Unwanted behavior:** if `\u003ctrigger\u003e`, then the `\u003csystem\u003e` shall `\u003caction\u003e`\n- **Optional feature:** where `\u003cfeature\u003e`, the `\u003csystem\u003e` shall `\u003caction\u003e`\n\n### `ears.Shall`\n\nEnsures that requirements use the word `shall` rather than `must`, `will`, `should`, or `may` (which formal requirements commonly discourage).\n\n### `ears.PassiveVoice` (and `ears.PassiveVoiceAdverb`)\n\nEnsures requirements use the active voice. EARS dictates that the system (or user) must explicitly be the actor performing the action.\n\n### `ears.WeakWords`\n\nFlags words that introduce ambiguity into requirements (such as `approximately`, `usually`, `several`, `fast`, `robust`, `user-friendly`). Requirements should be precise and measurable.\n\n## Examples\n\nThe following are valid EARS requirements:\n\n\u003c!-- vale Google = NO --\u003e\n\u003c!-- vale ai-tells = NO --\u003e\n\u003c!-- vale ai-tells-experimental = NO --\u003e\n\u003c!-- vale ears = YES --\u003e\n\nThe system shall log all errors.\n\nWhen a user logs in, the system shall display the dashboard.\n\nWhile the server is running, the application shall accept connections.\n\nIf the network drops, then the system shall retry the connection.\n\nWhere the system detects a camera, the application shall record video.\n\n\u003c!-- vale ears = NO --\u003e\n\u003c!-- vale ai-tells-experimental = YES --\u003e\n\u003c!-- vale ai-tells = YES --\u003e\n\u003c!-- vale Google = YES --\u003e\n\nThe following are examples of **violations** that `vale-ears` will flag:\n\n- `ears.Syntax`: \"The system shall, when it receives a message, log the error.\" (Does not match a standard EARS template)\n- `ears.Shall`: \"The system must log all errors.\" (Uses `must` instead of `shall`)\n- `ears.PassiveVoice`: \"All errors shall be logged by the system.\" (Written in passive voice)\n- `ears.WeakWords`: \"The system shall load the dashboard fast.\" (Uses ambiguous weak words like `fast`)\n\n## Installation\n\nAdd the package to your `.vale.ini`:\n\n```ini\nPackages = https://github.com/tbhb/vale-ears/releases/latest/download/ears.zip\n\n[*.md]\nBasedOnStyles = ears\n```\n\nThen run:\n\n```bash\nvale sync\n```\n\n## Contributing\n\nSee the `Justfile` for development commands.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftbhb%2Fvale-ears","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftbhb%2Fvale-ears","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftbhb%2Fvale-ears/lists"}