|
AWK Minifier
Conservative AWK source minification
|
Accepted
This Architecture Decision Record defines repository-facing documentation and GitHub templates as maintained starter behavior rather than incidental boilerplate. It incorporates lessons learned while adapting template-bash into bashlog, where the core architecture and README could be current while inherited support, contribution, security, and issue-reporting files still described an unrelated project.
A template amplifies both good defaults and stale assumptions. A copied mistake is therefore more costly in a starter repository than in a single derived project.
template-bash intentionally supplies more than Bash source. Derived projects inherit README structure, contributor guidance, support and vulnerability reporting policy, issue and pull-request templates, ADR machinery, test guidance, and release documentation.
During bashlog development, several reusable gaps became visible:
SUPPORT.md content referred to an unrelated GitHub Action and issue tracker;CONTRIBUTING.md linked to a nonexistent LICENSE.md and did not explain the project's documentation-first workflow;SECURITY.md suggested public issue disclosure after a fixed period rather than continued coordinated disclosure;doc/decisions.md map between the full records and AGENTS.md; andNone of these defects required a runtime redesign. They were documentation lifecycle failures. The template should encode the stronger lifecycle so derived projects begin with better defaults.
AGENTS.md into a second ADR corpus.Repository-facing Markdown files and GitHub issue/pull-request templates SHALL be maintained as first-class starter assets.
They SHALL be internally consistent, project-appropriate, free of unrelated repository links, and written so a derived project can either retain them with minimal edits or clearly identify where adaptation is required.
The template SHALL provide doc/decisions.md as a concise architectural discovery map.
The hierarchy SHALL be:
doc/decisions.md SHALL summarize rather than duplicate ADR reasoning. When the summary and an ADR appear to conflict, readers must consult the ADR and surface the inconsistency.
The starter ADR template SHALL retain the existing detailed posture and add optional sections for:
These sections SHOULD be used for consequential security, compatibility, public API, data-loss, destructive-behavior, trust, or complex failure-semantics decisions. They MAY be removed when they genuinely do not clarify a narrower decision.
Promises should be bounded and observable where practical. Non-promises should prevent reasonable over-interpretation rather than excuse missing requirements. The adversary/failure model may include malformed input, unavailable dependencies, partial execution, stale state, operator error, hostile data, an actual attacker, or a future maintainer misunderstanding an assumption.
SUPPORT.md SHALL describe a Bash-oriented problem report rather than a GitHub Action or web application. It SHALL point to the current repository issue tracker without hard-coding another project's URL.
CONTRIBUTING.md SHALL point contributors to the repository's actual license, README, ADRs, documentation standard, testing guidance, and release guidance. It SHALL explain that generated artifacts are not maintained source and that public behavior/architecture changes require corresponding documentation and tests.
SECURITY.md SHALL instruct reporters not to publish suspected vulnerabilities in ordinary public issues before coordinated disclosure. A fixed response window MAY be stated as an operational goal, but expiration of that window SHALL NOT by itself instruct a reporter to publish sensitive technical details.
Derived projects SHOULD replace template contact information when their security reporting process differs.
Bug-report templates SHALL ask for Bash-oriented reproduction information such as project version/commit, Bash version, operating system, minimal reproducer, expected behavior, actual behavior, exit status, stdout/stderr distinction, and relevant shell state when applicable.
Feature-request templates SHOULD emphasize the concrete problem/use case, proposed behavior, alternatives, and compatibility or contract impact rather than only asking for an idea.
Pull-request templates SHOULD remind contributors to keep ADRs, specifications, Doxygen contracts, tests, README/decision summaries, and implementation aligned when those surfaces are affected.
Documentation SHALL prefer durable invariants over snapshots that predictably rot. For example, testing documentation should state that every shipped artifact receives the complete suite rather than recording a fixed number of tests unless the exact count itself is a maintained contract.
When public behavior or architecture changes, review SHALL include repository- facing documentation that may encode the old behavior, not only source and tests.
AGENTS.md.This decision accounts for:
AGENTS.md expanding until it duplicates and drifts from ADR reasoning; andThe decision does not attempt to make documentation self-updating. Human and automated review must still compare changed behavior with maintained documentation.
doc/decisions.md MUST exist as a concise ADR summary map.AGENTS.md MUST point to doc/decisions.md and governing ADRs rather than becoming the sole architectural record.CONTRIBUTING.md MUST link to the actual repository license path.SUPPORT.md MUST direct ordinary reports to the current repository.SECURITY.md MUST NOT instruct automatic public disclosure merely because a response window elapsed.This minimizes template maintenance, but it was rejected because derived projects inherit those files verbatim and users encounter them as part of the project. Incorrect support or security guidance can be more damaging than a cosmetic README problem.
This would reduce the number of files contributors need to discover. It was rejected because AGENTS.md would grow into a parallel architecture manual and increase drift risk. doc/decisions.md provides a better intermediate layer.
The original template was sufficient for many ordinary decisions. It was not selected because bashlog demonstrated concrete value from explicitly documenting promises, non-promises, failure models, and exact supersession for security and public-contract work.
Exact counts can communicate test-suite size at a point in time. They were rejected as routine documentation because they become stale without adding a useful compatibility promise. CI already reports exact current counts when that information matters operationally.
The starter carries somewhat richer documentation and repository templates. A new project receives better contributor, support, security, and architecture navigation defaults, but project maintainers must still adapt product-specific language before release.
The decision adds a small maintenance obligation: repository-facing documents must be included in release-readiness reviews when architecture or public behavior evolves. That cost is accepted because a starter repository is intended to encode reusable engineering discipline, not only reusable shell code.
This decision backports lessons learned while deriving and polishing wesley-dean/bashlog from template-bash. In particular, bashlog established:
doc/decisions.md layer;