{"id":41612595,"url":"https://github.com/arc42/quality.arc42.org-site","last_synced_at":"2026-01-24T12:19:45.853Z","repository":{"id":77829060,"uuid":"578349697","full_name":"arc42/quality.arc42.org-site","owner":"arc42","description":"Quality requirements and goals for software and system architectures","archived":false,"fork":false,"pushed_at":"2026-01-19T20:03:19.000Z","size":26944,"stargazers_count":34,"open_issues_count":10,"forks_count":20,"subscribers_count":6,"default_branch":"main","last_synced_at":"2026-01-19T22:48:24.491Z","etag":null,"topics":["arc42","hacktoberfest","isaqb","quality"],"latest_commit_sha":null,"homepage":"https://quality.arc42.org","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arc42.png","metadata":{"files":{"readme":"README.md","changelog":null,"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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2022-12-14T21:09:39.000Z","updated_at":"2026-01-19T20:03:22.000Z","dependencies_parsed_at":"2023-12-20T14:16:22.122Z","dependency_job_id":"8d72b8b7-4ec5-4b2b-ad6b-3835229b371c","html_url":"https://github.com/arc42/quality.arc42.org-site","commit_stats":{"total_commits":442,"total_committers":12,"mean_commits":"36.833333333333336","dds":"0.34615384615384615","last_synced_commit":"fd2185c392bdbc851bd66775814ed0c0c112a8c0"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/arc42/quality.arc42.org-site","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arc42%2Fquality.arc42.org-site","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arc42%2Fquality.arc42.org-site/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arc42%2Fquality.arc42.org-site/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arc42%2Fquality.arc42.org-site/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arc42","download_url":"https://codeload.github.com/arc42/quality.arc42.org-site/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arc42%2Fquality.arc42.org-site/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28727519,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-24T10:24:43.181Z","status":"ssl_error","status_checked_at":"2026-01-24T10:24:36.112Z","response_time":89,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["arc42","hacktoberfest","isaqb","quality"],"created_at":"2026-01-24T12:19:45.264Z","updated_at":"2026-01-24T12:19:45.847Z","avatar_url":"https://github.com/arc42.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# arc42 Quality model\n\n[![Better Stack Badge](https://uptime.betterstack.com/status-badges/v2/monitor/20tqv.svg)](https://uptime.betterstack.com/?utm_source=status_badge)\n\nHere we collect definitions of quality attributes and their relationships .\n\n\nIt's powered by Jekyll and a modified TTSCK theme (see below).\nWe use Liquid for extensive automatic hyperlinking along the dependencies you see in the model above.\n\n\n## License\n\nAs all of the arc42 content, this FAQ is free to use under a liberal Creative-Commons\nlicense:\n\n![](https://i.creativecommons.org/l/by-sa/4.0/88x31.png)\nThis work is licensed under a\n[Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/).\n\n## Jekyll TTSCK Theme\n\nFor documentation on this theme, see the [original documentation](https://ttskch.github.io/jekyll-ttskch-theme/).\n\nWe implemented several enhancements over the original theme (e.g. responsive navigation, thx to Falk Hoppe)\n\n## Color Scheme\n\nThe site uses the following color scheme for visual consistency across all content:\n\n![Color Scheme](docs/color-scheme/q42-color-scheme.png)\n\nThese colors are defined in the following css variables:\n\n\n- qualities: `$brand-color-blue: #00B8F5;` \u003cspan style=\"background-color:#00B8F5; color: #003366; padding: 2px 5px; border-radius: 3px;\"\u003epreview\u003c/span\u003e\n- requirements: `--reqs-background-color: #ffb3b3;` \u003cspan style=\"background-color:#ffb3b3; color: #8b0000; padding: 2px 5px; border-radius: 3px;\"\u003epreview\u003c/span\u003e\n- standards: `--standard-background-color: #ffc95c;` \u003cspan style=\"background-color:#FFC95C; color: #2C3E50; padding: 2px 5px; border-radius: 3px;\"\u003epreview\u003c/span\u003e\n- articles (and generic pages): `--article-background-color: #e6daf2;` \u003cspan style=\"background-color:#E6DAF2; color: #003366; padding: 2px 5px; border-radius: 3px;\"\u003epreview\u003c/span\u003e\n  \n\n## How to build \u0026 run\n\n### Preconditions\n\nYou have an environment that allows to run\n\n- a bash script (`/bin/bash`)\n- [docker](https://docs.docker.com/build/building/context/) and [docker-compose](https://docs.docker.com/compose/)\n\nWe recommend Docker as the local build/test platform. Non-Docker workflows are not supported.\n\n### Build and test\n\nIn the root directory, run `docker compose up`.\nThis will build the site and start a web server on port 4000.\n\nIn case you already had the environment spun up, run `docker compose down` to stop the server so that changes in the\ndocker-compose.yml file are applied.\n\nNotes:\n- The esbuild service will run `npm run data` once on startup to generate graph data under `assets/data`.\n- The esbuild service will also run `npm run test:links` to validate all internal links.\n- If you add or change content that affects tags/related/permalinks, restart the stack (`docker compose down` then `docker compose up`) so data is regenerated.\n\n## How to contribute\n\nCreate a fork of [https://github.com/arc42/quality.arc42.org-site](https://github.com/arc42/quality.arc42.org-site).\nChange files and create a pull request with your changes using your fork.\n\nHint: `_todo/qualities` contains qualities whose definitions are missing. You may fill those files with content. Then\nmove them to the appropriate folder (e.g. `_qualities/\u003cLETTER\u003e/`).\n\nHint: If you add new files you have to clean-rebuild the whole application (stop and start Docker again).\n\n### Adding new content (qualities, requirements, standards)\n\nFront matter conventions used by the site and graph generator:\n- `tags`: space-separated string (e.g. `usable secure`)\n- `related`: comma-separated list of quality IDs/titles (e.g. `reliability, resilience`)\n- `permalink`: stable, kebab-cased URL; the graph uses the last path segment as node ID\n\nQualities (add under `_qualities/\u003cLETTER\u003e/your-quality.md`):\n```yaml\n---\ntitle: Availability\ntags: reliable\nrelated: reliability, resilience\npermalink: /qualities/availability\n---\n```\n\nRequirements (add under `_requirements/\u003cLETTER\u003e/your-requirement.md`):\n```yaml\n---\ntitle: Unavailable for max 2 minutes\ntags: reliable suitable\nrelated: availability\npermalink: /requirements/unavailable-for-max-2-minutes\n---\n```\n\n#### Requirements Structure\n\nRequirements use a **two-tier approach** for maximum clarity and usefulness as acceptance criteria:\n\n**Tier 1** - Simple requirements (1-3 criteria, self-explanatory):\n```markdown\n\u003cdiv class=\"quality-requirement\" markdown=\"1\"\u003e\n\n#### Requirement\nAll automated unit tests must execute quickly to enable rapid feedback.\n\n#### Acceptance Criteria\n- All unit tests complete in less than 180 seconds\n- Measured on standard CI/CD infrastructure\n\n\u003c/div\u003e\n```\n\n**Tier 2** - Complex requirements (4+ criteria, needs context):\n```markdown\n\u003cdiv class=\"quality-requirement\" markdown=\"1\"\u003e\n\n#### Context\nHealthcare system manages patient data where poor quality could lead to medication errors.\n\n#### Trigger\nPatient data is entered, updated, or accessed throughout care journey.\n\n#### Acceptance Criteria\n- Patient duplicate detection rate ≥ 99.9%\n- Critical fields 100% complete for active patients\n- Lab results available within 5 minutes\n- Data validation prevents 100% of impossible values\n\n\u003c/div\u003e\n```\n\n**Key principles:**\n- Use specific metrics with units (percentages, milliseconds, hours)\n- Make all criteria testable and measurable\n- See [REQUIREMENTS_TEMPLATE.md](REQUIREMENTS_TEMPLATE.md) for detailed guidance\n\nStandards (add under `_standards/your-standard.md`):\n```yaml\n---\ntitle: \"ISO/IEC 25010 - Systems and Software Quality\"\npermalink: /standards/iso-25010\nstandard_id: iso25010\n---\n```\nDefaults in `_config.yml` assign layouts automatically for collections; you usually do not need to set `layout`.\n\n### Synonyms\n\nThe site supports synonym handling for quality attributes. Some quality terms are synonymous (e.g., \"Performance\" and \"Performance Efficiency\"), and the system provides a clean way to handle these:\n\n#### How Synonyms Work\n\n1. **One canonical page** - Only one quality page contains the full definition\n2. **Redirect stubs** - Synonym terms redirect to the canonical page\n3. **Visual indicators** - Canonical pages show \"Also known as\" badges\n4. **Graph consolidation** - Graph shows single node per concept with tooltip showing all synonym labels\n\n#### Synonym Configuration\n\nSynonyms are defined in `_data/quality-synonyms.yml`:\n\n```yaml\n# Format: canonical-slug: [synonym1, synonym2, ...]\nperformance:\n  - performance-efficiency\navailability:\n  - high-availability\nchangeability:\n  - mutability\ntime-to-market:\n  - speed-to-market\n```\n\n#### Creating a Synonym\n\n**Step 1:** Add to `_data/quality-synonyms.yml`\n```yaml\nyour-canonical-term:\n  - your-synonym-term\n```\n\n**Step 2:** Add `aka` field to canonical quality (`_qualities/\u003cLETTER\u003e/your-canonical-term.md`):\n```yaml\n---\ntitle: Your Canonical Term\naka: [Your Synonym Term]\ntags: relevant\nrelated: other-qualities\npermalink: /qualities/your-canonical-term\n---\n```\n\n**Step 3:** Create redirect stub (`_qualities/\u003cLETTER\u003e/your-synonym-term.md`):\n```yaml\n---\ntitle: Your Synonym Term\nalias_of: your-canonical-term\nredirect_to: /qualities/your-canonical-term\nlayout: redirect\npermalink: /qualities/your-synonym-term\n---\n```\n\n**Step 4:** Rebuild the site\n```bash\ndocker compose down\ndocker compose up\n```\n\n#### Result\n\n- ✅ `/qualities/your-canonical-term` - Shows full definition with \"Also known as: Your Synonym Term\" badge\n- ✅ `/qualities/your-synonym-term` - Redirects instantly to canonical page\n- ✅ Graph shows single node with tooltip displaying all synonym labels on hover\n- ✅ No 404 errors for synonym URLs\n\n### Tags\n\nTag links render to `/tag-\u003ctag\u003e`. If you introduce a new tag value in front matter, create a matching page to avoid 404s:\n- Copy an existing tag page (`_pages/tag-efficient.md`) to `_pages/tag-\u003cyourtag\u003e.md`\n- Adjust the title/permalink and keep the include macros\n\n### Link Validation\n\nThe site includes automated link validation to ensure all internal references are correct. The validator checks:\n\n- **Quality → Quality**: References in the `related` field of quality files\n- **Quality → Tag**: Tags used in qualities have corresponding tag pages\n- **Quality → Standard**: Standards referenced in the `standards` field exist\n- **Requirement → Quality**: Requirements reference existing qualities in their `related` field\n- **Requirement → Tag**: Tags used in requirements have corresponding tag pages\n\n#### Running Link Validation\n\n**Manual validation:**\n```bash\nnpm run test:links          # Show warnings only\nnpm run test:links:strict   # Exit with error code 1 if broken links found\n```\n\n**Automatic validation:**\nLink validation runs automatically when you start Docker (`docker compose up`). Broken links are displayed as warnings but don't stop the build.\n\n**Example output:**\n```\n═══════════════════════════════════════════════════════════\n  LINK VALIDATION REPORT\n═══════════════════════════════════════════════════════════\n\nREQUIREMENT→QUALITY (1 errors)\n───────────────────────────────────────────────────────────\n  ✗ Requirement \"patient-data-quality\" references non-existent quality \"completeness\"\n    Source: _requirements/P/patient-data-quality.md\n\n═══════════════════════════════════════════════════════════\nTotal broken links: 1\n```\n\n# Technical details\n\n## Graph visualization\nThe quality graph visualizations are implemented using D3.js forced graphs.\nThe graph data is stored in JSON files in the `assets/data` directory and loaded by the JavaScript code in the `src/graphs` directory.\n\n\n## Statistics Utilities\n\nThe `statistic-utilities/` directory contains development tools for analyzing repository content. These utilities are **not part of the production build** and are excluded from the Jekyll site.\n\n**Available utilities:**\n- **`build-quality-index.js`** - Generates a comprehensive index of all quality attributes with metadata (tags, relationships, standards)\n- **`create-index-summary.js`** - Creates statistical summaries (total counts, top-connected qualities, tag distributions)\n- **`list-all-qualities.js`** - Displays a human-readable list of all qualities with their properties\n\n**Usage:**\n```bash\n# Generate quality index\nnode statistic-utilities/build-quality-index.js\n\n# Create statistical summary\nnode statistic-utilities/create-index-summary.js\n\n# List all qualities\nnode statistic-utilities/list-all-qualities.js\n```\n\nFor detailed documentation, see [`statistic-utilities/README.md`](statistic-utilities/README.md).\n\n## Site Structure and Configuration\n\nThis site uses [Jekyll](https://jekyllrb.com/) to generate a static website from a set of Markdown files and templates. \nThe following sections explain the key concepts and configurations used in this site.\n\n### Collections\n\nJekyll's collections are a powerful feature that allows you to group related content together. This site uses collections to manage the different types of content:\n\n*   **Qualities:** These are the quality attributes of a system, such as \"Performance\" or \"Security\".\nThe 'qualities' collection is stored under `./_qualities`.\n*   **Requirements:** These are specific quality requirements, which are related to one or more qualities.\nThe 'requirements' collection is stored under `./_requirements`.\n*   **Standards:** These are industry standards related to quality, such as \"ISO-25010\".\n\nThe collections are defined in the `_config.yml` file:\n\n```yaml\ncollections:\n  posts:\n    hide: true\n  articles:\n    output: true\n    hide: true\n  qualities:\n    output: true\n    hide: true\n  requirements:\n    output: true\n    hide: true\n  standards:\n    output: true\n    hide: true\n```\n\n### Qualities\n\nQualities are stored in the `_qualities` directory. \nEach quality is a Markdown file with a YAML front matter that contains metadata about the quality.\n\nHere is an example of a quality file (`_qualities/A/accountability.md`):\n\n```yaml\n---\ntitle: Accountability\ntags: secure\nrelated: security, accessibility, confidentiality, privacy, intrusion-detection, intrusion-prevention\npermalink: /qualities/accountability\nstandards: iso25010\n---\n\nDefinition:\n\u003e ...\n```\n\nThe front matter contains the following fields:\n\n*   `title`: The title of the quality.\n*   `tags`: A list of tags related to the quality.\n*   `related`: A list of related qualities.\n*   `permalink`: The URL of the quality's page.\n*   `standards`: A list of standards that this quality is related to.\n\n### Requirements\n\nRequirements are stored in the `_requirements` directory. \nEach requirement is a Markdown file with a YAML front matter that contains metadata about the requirement.\n\nHere is an example of a requirement file (`_requirements/A/access-control-policy.md`):\n\n```yaml\n---\ntitle: Access Control Policy\ntags: secure\nrelated: access-control\npermalink: /requirements/access-control-policy\n---\n\nContext:\n\u003e ...\n```\n\nThe front matter contains the following fields:\n\n*   `title`: The title of the requirement.\n*   `tags`: A list of tags related to the requirement.\n*   `standards`: A list of standards (like iso25010) where this quality is used/defined/part-of\n*   `related`: A list of related qualities.\n*   `permalink`: The URL of the requirement's page.\n\n### Layouts and Includes\n\nThe site uses a system of layouts and includes to render the content of the collections.\n\n*   **Layouts:** Layouts are templates that define the structure of a page. \n*   The layouts are stored in the `_layouts` directory. \n*   For example, the `standards.html` layout is used to render the pages for the standards collection.\n*   **Includes:** Includes are snippets of code that can be reused in different layouts. \n*   The includes are stored in the `_includes` directory. \n*   For example, the `related-qualities.html` include is used to display the list of qualities related to a standard.\n\nThis architecture allows for a clean separation of content and presentation, making it easy to manage and extend the site.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farc42%2Fquality.arc42.org-site","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farc42%2Fquality.arc42.org-site","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farc42%2Fquality.arc42.org-site/lists"}