From 84ea638661150c010dd385de49216336d2a24e5f Mon Sep 17 00:00:00 2001 From: Tiara Rodney Date: Sun, 22 Mar 2026 02:25:32 +0100 Subject: [PATCH] chore: remove build --- build/doctrees/AGENTS.doctree | Bin 56996 -> 0 bytes build/doctrees/CHANGELOG.doctree | Bin 8127 -> 0 bytes build/doctrees/README.doctree | Bin 132061 -> 0 bytes build/doctrees/environment.pickle | Bin 38811 -> 0 bytes build/markdown/AGENTS.md | 103 ---- build/markdown/CHANGELOG.md | 11 - build/markdown/LICENSE | 392 ---------------- build/markdown/README.md | 755 ------------------------------ 8 files changed, 1261 deletions(-) delete mode 100644 build/doctrees/AGENTS.doctree delete mode 100644 build/doctrees/CHANGELOG.doctree delete mode 100644 build/doctrees/README.doctree delete mode 100644 build/doctrees/environment.pickle delete mode 100644 build/markdown/AGENTS.md delete mode 100644 build/markdown/CHANGELOG.md delete mode 100644 build/markdown/LICENSE delete mode 100644 build/markdown/README.md diff --git a/build/doctrees/AGENTS.doctree b/build/doctrees/AGENTS.doctree deleted file mode 100644 index d5df0c2d46eab9b987970541d0998cf7d99aacb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56996 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 LbDaE=*e3rSn6D0U diff --git a/build/doctrees/CHANGELOG.doctree b/build/doctrees/CHANGELOG.doctree deleted file mode 100644 index b9b8113c4850d45be676b86f40af82f2b6a139fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8127 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 V8be(j&P7+3(4u1KYeLfA_&-XpPg(!~ diff --git a/build/doctrees/README.doctree b/build/doctrees/README.doctree deleted file mode 100644 index d54dd82328d680f77b1e2ce99b10a87abdbc8c16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132061 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 diff --git a/build/markdown/AGENTS.md b/build/markdown/AGENTS.md deleted file mode 100644 index b60dae6..0000000 --- a/build/markdown/AGENTS.md +++ /dev/null @@ -1,103 +0,0 @@ -# MIME TODO Specification — Agent Instructions - -This directory contains the MIME TODO specification, which defines the -canonical format for repository-root `TODO` issue tracker files. - -## Consuming the Specification - -The agent-consumable specification is located at: - -```default -build/markdown/ -``` - -Agents MUST read the specification from `build/markdown/` for programmatic -access. Do NOT parse the RST source under `src/` directly. - -If `build/markdown/` is not available locally, the specification -(including this `AGENTS.md`) can be retrieved from -`specs.code.tiararodney.com`: - -- Specification: `https://specs.code.tiararodney.com/mime-todo/markdown/README.md` -- Agent instructions: `https://specs.code.tiararodney.com/mime-todo/markdown/AGENTS.md` -- Index: `https://specs.code.tiararodney.com/mime-todo/markdown/` - -## What This Spec Defines - -- MIME envelope structure and preprocessing rules -- Issue part format (`application/issue`): field ordering, field semantics, - valid values for Type, Status, Priority, and Relationships -- Sprint part format (`application/sprints`): entry grammar, date ranges -- Module part format (`application/modules`): module names and paths -- Bugzilla tracker part format (`application/bugzilla`): product/component - mappings, sync model, comment format -- Description block and body grammar (80-column wrap, column 14 indent) -- Issue immutability rules -- Status transition state machine and commit conventions -- Branch naming and lifecycle rules tied to issue Type and Status -- Sprint membership logic -- Preprocessor and parser requirements -- Error handling requirements -- CLI reference for spec-compliant issue management - -## Interacting with the TODO File - -Agents MUST use the `@byteb4rb1e/mime-todo` CLI for all interactions -with the `TODO` file. Do NOT edit the file directly or construct -transition commits manually. - -### Issue Lifecycle - -```sh -# Create an issue (must be on develop) -mime-todo create --type feature --title "Title" --plan "Description" - -# Start work (must be on develop) -mime-todo start --acceptance-criteria "What must be true for this to be done" -# Then create the branch: git checkout -b / - -# Complete work (must be on /) -mime-todo done --acceptance "What was delivered against the criteria" - -# Hold or cancel -mime-todo hold --reason "Why" -mime-todo cancel --reason "Why" -``` - -### Querying - -```sh -mime-todo list # list all issues -mime-todo show # show issue details -mime-todo sprints # list sprints -mime-todo issues-in-sprint # issues in a sprint -``` - -### Bugzilla Integration - -```sh -mime-todo init # check products/components exist -mime-todo push # push commits to Bugzilla -mime-todo push --dry-run # preview -``` - -### What Agents MUST NOT Do - -- Edit the `TODO` file directly. -- Construct `todo(): ` commits manually. -- Modify issue fields other than `Status` (and only via the CLI). -- Push to Bugzilla outside of `mime-todo push`. -- Modify the specification files. - -## Rules for Agents - -- Do NOT modify the specification files. -- Do NOT modify the RST source under `src/`. -- Changes to this specification MUST be made upstream in the vendor - repository. - -## Maintaining This Repository - -If you are explicitly invoked to maintain this specification repository -(building, publishing, or managing URLs), see `CONTRIBUTING.md` for -instructions. diff --git a/build/markdown/CHANGELOG.md b/build/markdown/CHANGELOG.md deleted file mode 100644 index 836abc7..0000000 --- a/build/markdown/CHANGELOG.md +++ /dev/null @@ -1,11 +0,0 @@ -# Changelog - -* **chore: update document meta** by *Tiara Rodney* at *2026-03-22 02:18:32* -* **Merge branch ‘bugfix/12’** by *Tiara Rodney* at *2026-03-22 01:42:38* -* **fix: replace todo with mime-todo in all CLI references** by *Tiara Rodney* at *2026-03-22 01:42:32* -* **Merge branch ‘feature/10’** by *Tiara Rodney* at *2026-03-22 01:38:33* -* **spec: define AcceptanceCriteria and Acceptance fields on issues** by *Tiara Rodney* at *2026-03-22 01:38:29* -* **chore: update CLI changes** by *Tiara Rodney* at *2026-03-15 04:11:01* - - body is redundant as it is the descritpion of issue -* **update** by *Tiara Rodney* at *2026-03-15 03:39:06* diff --git a/build/markdown/LICENSE b/build/markdown/LICENSE deleted file mode 100644 index 6c5a1fe..0000000 --- a/build/markdown/LICENSE +++ /dev/null @@ -1,392 +0,0 @@ -Attribution-NoDerivatives 4.0 International - -======================================================================= - -Creative Commons Corporation ("Creative Commons") is not a law firm and -does not provide legal services or legal advice. Distribution of -Creative Commons public licenses does not create a lawyer-client or -other relationship. Creative Commons makes its licenses and related -information available on an "as-is" basis. Creative Commons gives no -warranties regarding its licenses, any material licensed under their -terms and conditions, or any related information. Creative Commons -disclaims all liability for damages resulting from their use to the -fullest extent possible. - -Using Creative Commons Public Licenses - -Creative Commons public licenses provide a standard set of terms and -conditions that creators and other rights holders may use to share -original works of authorship and other material subject to copyright -and certain other rights specified in the public license below. The -following considerations are for informational purposes only, are not -exhaustive, and do not form part of our licenses. - - Considerations for licensors: Our public licenses are - intended for use by those authorized to give the public - permission to use material in ways otherwise restricted by - copyright and certain other rights. Our licenses are - irrevocable. Licensors should read and understand the terms - and conditions of the license they choose before applying it. - Licensors should also secure all rights necessary before - applying our licenses so that the public can reuse the - material as expected. Licensors should clearly mark any - material not subject to the license. This includes other CC- - licensed material, or material used under an exception or - limitation to copyright. More considerations for licensors: - wiki.creativecommons.org/Considerations_for_licensors - - Considerations for the public: By using one of our public - licenses, a licensor grants the public permission to use the - licensed material under specified terms and conditions. If - the licensor's permission is not necessary for any reason--for - example, because of any applicable exception or limitation to - copyright--then that use is not regulated by the license. Our - licenses grant only permissions under copyright and certain - other rights that a licensor has authority to grant. Use of - the licensed material may still be restricted for other - reasons, including because others have copyright or other - rights in the material. A licensor may make special requests, - such as asking that all changes be marked or described. - Although not required by our licenses, you are encouraged to - respect those requests where reasonable. More considerations - for the public: - wiki.creativecommons.org/Considerations_for_licensees - - -======================================================================= - -Creative Commons Attribution-NoDerivatives 4.0 International Public -License - -By exercising the Licensed Rights (defined below), You accept and agree -to be bound by the terms and conditions of this Creative Commons -Attribution-NoDerivatives 4.0 International Public License ("Public -License"). To the extent this Public License may be interpreted as a -contract, You are granted the Licensed Rights in consideration of Your -acceptance of these terms and conditions, and the Licensor grants You -such rights in consideration of benefits the Licensor receives from -making the Licensed Material available under these terms and -conditions. - - -Section 1 -- Definitions. - - a. Adapted Material means material subject to Copyright and Similar - Rights that is derived from or based upon the Licensed Material - and in which the Licensed Material is translated, altered, - arranged, transformed, or otherwise modified in a manner requiring - permission under the Copyright and Similar Rights held by the - Licensor. For purposes of this Public License, where the Licensed - Material is a musical work, performance, or sound recording, - Adapted Material is always produced where the Licensed Material is - synched in timed relation with a moving image. - - b. Copyright and Similar Rights means copyright and/or similar rights - closely related to copyright including, without limitation, - performance, broadcast, sound recording, and Sui Generis Database - Rights, without regard to how the rights are labeled or - categorized. For purposes of this Public License, the rights - specified in Section 2(b)(1)-(2) are not Copyright and Similar - Rights. - - c. Effective Technological Measures means those measures that, in the - absence of proper authority, may not be circumvented under laws - fulfilling obligations under Article 11 of the WIPO Copyright - Treaty adopted on December 20, 1996, and/or similar international - agreements. - - d. Exceptions and Limitations means fair use, fair dealing, and/or - any other exception or limitation to Copyright and Similar Rights - that applies to Your use of the Licensed Material. - - e. Licensed Material means the artistic or literary work, database, - or other material to which the Licensor applied this Public - License. - - f. Licensed Rights means the rights granted to You subject to the - terms and conditions of this Public License, which are limited to - all Copyright and Similar Rights that apply to Your use of the - Licensed Material and that the Licensor has authority to license. - - g. Licensor means the individual(s) or entity(ies) granting rights - under this Public License. - - h. Share means to provide material to the public by any means or - process that requires permission under the Licensed Rights, such - as reproduction, public display, public performance, distribution, - dissemination, communication, or importation, and to make material - available to the public including in ways that members of the - public may access the material from a place and at a time - individually chosen by them. - - i. Sui Generis Database Rights means rights other than copyright - resulting from Directive 96/9/EC of the European Parliament and of - the Council of 11 March 1996 on the legal protection of databases, - as amended and/or succeeded, as well as other essentially - equivalent rights anywhere in the world. - - j. You means the individual or entity exercising the Licensed Rights - under this Public License. Your has a corresponding meaning. - - -Section 2 -- Scope. - - a. License grant. - - 1. Subject to the terms and conditions of this Public License, - the Licensor hereby grants You a worldwide, royalty-free, - non-sublicensable, non-exclusive, irrevocable license to - exercise the Licensed Rights in the Licensed Material to: - - a. reproduce and Share the Licensed Material, in whole or - in part; and - - b. produce and reproduce, but not Share, Adapted Material. - - 2. Exceptions and Limitations. For the avoidance of doubt, where - Exceptions and Limitations apply to Your use, this Public - License does not apply, and You do not need to comply with - its terms and conditions. - - 3. Term. The term of this Public License is specified in Section - 6(a). - - 4. Media and formats; technical modifications allowed. The - Licensor authorizes You to exercise the Licensed Rights in - all media and formats whether now known or hereafter created, - and to make technical modifications necessary to do so. The - Licensor waives and/or agrees not to assert any right or - authority to forbid You from making technical modifications - necessary to exercise the Licensed Rights, including - technical modifications necessary to circumvent Effective - Technological Measures. For purposes of this Public License, - simply making modifications authorized by this Section 2(a) - (4) never produces Adapted Material. - - 5. Downstream recipients. - - a. Offer from the Licensor -- Licensed Material. Every - recipient of the Licensed Material automatically - receives an offer from the Licensor to exercise the - Licensed Rights under the terms and conditions of this - Public License. - - b. No downstream restrictions. You may not offer or impose - any additional or different terms or conditions on, or - apply any Effective Technological Measures to, the - Licensed Material if doing so restricts exercise of the - Licensed Rights by any recipient of the Licensed - Material. - - 6. No endorsement. Nothing in this Public License constitutes or - may be construed as permission to assert or imply that You - are, or that Your use of the Licensed Material is, connected - with, or sponsored, endorsed, or granted official status by, - the Licensor or others designated to receive attribution as - provided in Section 3(a)(1)(A)(i). - - b. Other rights. - - 1. Moral rights, such as the right of integrity, are not - licensed under this Public License, nor are publicity, - privacy, and/or other similar personality rights; however, to - the extent possible, the Licensor waives and/or agrees not to - assert any such rights held by the Licensor to the limited - extent necessary to allow You to exercise the Licensed - Rights, but not otherwise. - - 2. Patent and trademark rights are not licensed under this - Public License. - - 3. To the extent possible, the Licensor waives any right to - collect royalties from You for the exercise of the Licensed - Rights, whether directly or through a collecting society - under any voluntary or waivable statutory or compulsory - licensing scheme. In all other cases the Licensor expressly - reserves any right to collect such royalties. - - -Section 3 -- License Conditions. - -Your exercise of the Licensed Rights is expressly made subject to the -following conditions. - - a. Attribution. - - 1. If You Share the Licensed Material, You must: - - a. retain the following if it is supplied by the Licensor - with the Licensed Material: - - i. identification of the creator(s) of the Licensed - Material and any others designated to receive - attribution, in any reasonable manner requested by - the Licensor (including by pseudonym if - designated); - - ii. a copyright notice; - - iii. a notice that refers to this Public License; - - iv. a notice that refers to the disclaimer of - warranties; - - v. a URI or hyperlink to the Licensed Material to the - extent reasonably practicable; - - b. indicate if You modified the Licensed Material and - retain an indication of any previous modifications; and - - c. indicate the Licensed Material is licensed under this - Public License, and include the text of, or the URI or - hyperlink to, this Public License. - - For the avoidance of doubt, You do not have permission under - this Public License to Share Adapted Material. - - 2. You may satisfy the conditions in Section 3(a)(1) in any - reasonable manner based on the medium, means, and context in - which You Share the Licensed Material. For example, it may be - reasonable to satisfy the conditions by providing a URI or - hyperlink to a resource that includes the required - information. - - 3. If requested by the Licensor, You must remove any of the - information required by Section 3(a)(1)(A) to the extent - reasonably practicable. - - -Section 4 -- Sui Generis Database Rights. - -Where the Licensed Rights include Sui Generis Database Rights that -apply to Your use of the Licensed Material: - - a. for the avoidance of doubt, Section 2(a)(1) grants You the right - to extract, reuse, reproduce, and Share all or a substantial - portion of the contents of the database, provided You do not Share - Adapted Material; - - b. if You include all or a substantial portion of the database - contents in a database in which You have Sui Generis Database - Rights, then the database in which You have Sui Generis Database - Rights (but not its individual contents) is Adapted Material; and - - c. You must comply with the conditions in Section 3(a) if You Share - all or a substantial portion of the contents of the database. - -For the avoidance of doubt, this Section 4 supplements and does not -replace Your obligations under this Public License where the Licensed -Rights include other Copyright and Similar Rights. - - -Section 5 -- Disclaimer of Warranties and Limitation of Liability. - - a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE - EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS - AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF - ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, - IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, - WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR - PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, - ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT - KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT - ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. - - b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE - TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, - NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, - INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, - COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR - USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR - DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR - IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. - - c. The disclaimer of warranties and limitation of liability provided - above shall be interpreted in a manner that, to the extent - possible, most closely approximates an absolute disclaimer and - waiver of all liability. - - -Section 6 -- Term and Termination. - - a. This Public License applies for the term of the Copyright and - Similar Rights licensed here. However, if You fail to comply with - this Public License, then Your rights under this Public License - terminate automatically. - - b. Where Your right to use the Licensed Material has terminated under - Section 6(a), it reinstates: - - 1. automatically as of the date the violation is cured, provided - it is cured within 30 days of Your discovery of the - violation; or - - 2. upon express reinstatement by the Licensor. - - For the avoidance of doubt, this Section 6(b) does not affect any - right the Licensor may have to seek remedies for Your violations - of this Public License. - - c. For the avoidance of doubt, the Licensor may also offer the - Licensed Material under separate terms or conditions or stop - distributing the Licensed Material at any time; however, doing so - will not terminate this Public License. - - d. Sections 1, 5, 6, 7, and 8 survive termination of this Public - License. - - -Section 7 -- Other Terms and Conditions. - - a. The Licensor shall not be bound by any additional or different - terms or conditions communicated by You unless expressly agreed. - - b. Any arrangements, understandings, or agreements regarding the - Licensed Material not stated herein are separate from and - independent of the terms and conditions of this Public License. - - -Section 8 -- Interpretation. - - a. For the avoidance of doubt, this Public License does not, and - shall not be interpreted to, reduce, limit, restrict, or impose - conditions on any use of the Licensed Material that could lawfully - be made without permission under this Public License. - - b. To the extent possible, if any provision of this Public License is - deemed unenforceable, it shall be automatically reformed to the - minimum extent necessary to make it enforceable. If the provision - cannot be reformed, it shall be severed from this Public License - without affecting the enforceability of the remaining terms and - conditions. - - c. No term or condition of this Public License will be waived and no - failure to comply consented to unless expressly agreed to by the - Licensor. - - d. Nothing in this Public License constitutes or may be interpreted - as a limitation upon, or waiver of, any privileges and immunities - that apply to the Licensor or You, including from the legal - processes of any jurisdiction or authority. - -======================================================================= - -Creative Commons is not a party to its public -licenses. Notwithstanding, Creative Commons may elect to apply one of -its public licenses to material it publishes and in those instances -will be considered the “Licensor.” The text of the Creative Commons -public licenses is dedicated to the public domain under the CC0 Public -Domain Dedication. Except for the limited purpose of indicating that -material is shared under a Creative Commons public license or as -otherwise permitted by the Creative Commons policies published at -creativecommons.org/policies, Creative Commons does not authorize the -use of the trademark "Creative Commons" or any other trademark or logo -of Creative Commons without its prior written consent including, -without limitation, in connection with any unauthorized modifications -to any of its public licenses or any other arrangements, -understandings, or agreements concerning use of licensed material. For -the avoidance of doubt, this paragraph does not form part of the -public licenses. - -Creative Commons may be contacted at creativecommons.org. diff --git a/build/markdown/README.md b/build/markdown/README.md deleted file mode 100644 index 28fe19e..0000000 --- a/build/markdown/README.md +++ /dev/null @@ -1,755 +0,0 @@ -# Document - -Version -: 0.2.0 - -Status -: Draft - -Author -: Tiara Rodney <[tiara@byteb4rb1e.me](mailto:tiara@byteb4rb1e.me)> - -License -: [CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0/deed.en) - -# Abstract - -This document defines the canonical format, semantics, and processing rules -for the repository-root `TODO` file. The file is a human-friendly, -append-only (allowing modifications) issue tracker that is parsed by TypeScript tooling using a MIME -envelope added at parse time. - -The raw `TODO` file is not a MIME document. A preprocessor wraps it into a -valid `multipart/mixed` MIME message before parsing. - -# Specification - -## Raw File Structure - -The raw `TODO` file consists of a sequence of *parts*, each beginning with: - -```default ---ISSUE -Content-Type: -``` - -Valid part types are: - -* `application/sprints` — defines sprint metadata -* `application/modules` — defines the repository module structure -* `application/bugzilla` — defines Bugzilla product/component mappings -* `application/issue` — defines a single issue - -Parts may appear in any order in the raw file. The preprocessor will reorder -them so that `application/sprints` appears first, followed by -`application/modules`, then `application/bugzilla`, then all -`application/issue` parts in original order. - -## MIME Envelope (Added by Preprocessor) - -Before parsing, the preprocessor wraps the raw file into a MIME multipart -message. - -Prolog added by the preprocessor: - -```default -MIME-Version: 1.0 -Content-Type: multipart/mixed; boundary="ISSUE" -``` - -Each raw `--ISSUE` boundary becomes a MIME boundary. The preprocessor -extracts each part’s `Content-Type` and body, reorders parts, and emits a -final closing boundary: - -```default ---ISSUE-- -``` - -The resulting MIME message is parsed using a standard MIME parser. - -## Part: `application/sprints` - -This part defines sprint metadata. - -The body MUST begin with: - -```default -Sprints: -``` - -followed by one or more sprint entries. - -### Sprint Entry Forms - -Both compact and expanded forms are valid. - -Compact form: - -```default -- Name: Sprint 1 - Range: 2026-02-01..2026-02-14 -``` - -Expanded form: - -```default -- - Name: Sprint 1 - Range: 2026-02-01..2026-02-14 -``` - -### Sprint Entry Grammar - -A sprint entry begins at a line matching: - -```default -^\s*-\s*(Name:.*)?$ -``` - -Key–value lines inside an entry match: - -```default -^\s+[A-Za-z][A-Za-z0-9]*:\s*(.*)$ -``` - -Required keys: - -* `Name: ` -* `Range: ..` - -The `Range` defines a closed interval `[start, end]`. - -## Part: `application/modules` - -This part defines the repository’s logical module structure. Each module maps -a name to an optional repository-relative path. - -At most one `application/modules` part MAY appear. Multiple -`application/modules` parts MUST be rejected. - -The body MUST begin with: - -```default -Modules: -``` - -followed by one or more module entries. - -### Module Entry Forms - -Compact form: - -```default -- Name: Specification - Path: src -``` - -Expanded form: - -```default -- - Name: Specification - Path: src -``` - -A module without a path (logical grouping): - -```default -- Name: Documentation -``` - -### Module Entry Grammar - -A module entry begins at a line matching: - -```default -^\s*-\s*(Name:.*)?$ -``` - -Key–value lines inside an entry match: - -```default -^\s+[A-Za-z][A-Za-z0-9]*:\s*(.*)$ -``` - -Required keys: - -* `Name: ` — unique module identifier. - -Optional keys: - -* `Path: ` — path relative to repository root. - If omitted, the module is a logical grouping without a fixed location. - -## Part: `application/bugzilla` - -This part defines a unidirectional mapping from repository modules to -Bugzilla products and components. The `TODO` file is the source of truth; -Bugzilla is a downstream mirror. - -At most one `application/bugzilla` part MAY appear. Multiple -`application/bugzilla` parts MUST be rejected. - -An `application/bugzilla` part MUST NOT appear unless an -`application/modules` part is also present. - -### Required Fields - -```default -URL: -Mappings: - - Module: - Product: - Component: -``` - -* **URL**: the base URL to the Bugzilla REST API. -* **Mappings**: one or more entries mapping a module name to a Bugzilla - product and component. Every `Module` value MUST reference a module - defined in the `application/modules` part. - -Product and component names containing spaces or special characters are -permitted; tooling MUST URL-encode them when constructing API requests. - -### Mapping Entry Grammar - -A mapping entry begins at a line matching: - -```default -^\s*-\s*(Module:.*)?$ -``` - -Required keys: - -* `Module: ` — references a module name. -* `Product: ` — Bugzilla product name. -* `Component: ` — Bugzilla component name. - -### Sync Model - -Synchronization is unidirectional: `TODO` → Bugzilla. The `TODO` file is -the canonical source of truth. - -When a Bugzilla bug is created for a `TODO` issue, the bug’s `url` field -MUST be set to a resolvable URL pointing to the `TODO` file on the -integration branch. The URL format is host-dependent: - -* Bitbucket: `/src//TODO#` -* GitHub: `/blob//TODO#` -* GitLab: `/-/blob//TODO#` - -The branch in the URL MUST be the integration branch (`develop`), -regardless of which branch the push is initiated from. - -Transition commit messages are pushed as Bugzilla comments. Each comment is -tagged with `git-` (first 7 characters of the commit hash) to -prevent duplicate pushes. A comment tag is applied only after the comment -and any associated status update have both succeeded. - -Work commits from issue branches are also pushed as Bugzilla comments, -forming a threaded work log. Work comments: - -* MUST NOT be pushed unless the issue status is `in-progress`. -* MUST NOT follow a `done` transition comment. - -Comment format (Markdown): - -```default -**** - - - -[``]() -``` - -The commit URL format is host-dependent: - -* Bitbucket: `/commits/` -* GitHub: `/commit/` -* GitLab: `/-/commit/` - -## Part: `application/issue` - -Each issue is represented as a structured block with strict field ordering. - -### Required Field Order - -The following fields MUST appear in exactly this order: - -```default -ID: -Type: -Title: -Status: -Priority: -Created: -Module: # OPTIONAL -Relationships: -DueStart: # OPTIONAL -DueEnd: # OPTIONAL -Description: - -AcceptanceCriteria: # OPTIONAL, set at in-progress - -Acceptance: # OPTIONAL, set at done - -``` - -### Field Semantics - -* **ID**: unique integer, strictly increasing. -* **Type**: one of `feature`, `bugfix`, `hotfix`. - \* `feature` and `bugfix` issues target the integration branch (`develop`). - \* `hotfix` issues target the stable branch (`main` or `master`). -* **Status**: one of `open`, `in-progress`, `done`, `hold`, `cancelled`. -* **Priority**: one of `low`, `medium`, `high`. -* **Created**: ISO date. -* **Module**: optional. When present, MUST reference a module name defined in - the `application/modules` part. If no `application/modules` part exists, - the field is ignored. -* **Relationships**: - \* Empty: - ```default - Relationships: - ``` - - * Or list: - ```default - Relationships: dependsOn:43, relatesTo:10 - ``` - * Valid kinds: `dependsOn`, `relatesTo`, `blocks`. - * All relationship target IDs MUST reference existing issue IDs in the - same `TODO` file. A target that does not exist MUST be rejected. - * A relationship targeting a `cancelled` issue SHOULD produce a warning - (stale reference). -* **DueStart / DueEnd**: - \* Optional. - \* If only one is present, the other is implicitly equal to it. -* **AcceptanceCriteria**: - \* Optional. Set when transitioning to `in-progress`. - \* Defines what must be true for the issue to be considered done. - \* Follows the same indentation rules as `Description`. - \* `AcceptanceCriteria:` occupies 20 characters. Content begins at column 21. - \* Continuation lines MUST be indented with 20 spaces. - \* Immutable after being set. -* **Acceptance**: - \* Optional. Set when transitioning to `done`. - \* Records what was delivered against the acceptance criteria. - \* Follows the same indentation rules as `Description`. - \* `Acceptance:` occupies 12 characters. Content begins at column 13. - \* Continuation lines MUST be indented with 12 spaces. - \* Immutable after being set. - -### Description Block - -* The first line appears on the same line as `Description:`. -* `Description:` occupies 13 characters. Content begins at column 14. -* Continuation lines MUST be indented with 13 spaces, aligning with column 14. -* Lines MUST NOT exceed 80 columns. Long text MUST be word-wrapped at the - 80-column boundary by the serializer. -* No blank lines allowed inside the description block. - -### Body - -Any lines after the description block are considered free-form body text. -The body MUST NOT contain another `ID:` field or a MIME boundary. - -### Issue Immutability - -The `Description` field is immutable after the issue is created. To change -the scope of an issue, the issue MUST be cancelled and a new issue created. - -Fields that MAY change after creation: - -* `Status` (via transition commits) -* `AcceptanceCriteria` (set once at `in-progress` transition, immutable after) -* `Acceptance` (set once at `done` transition, immutable after) - -Fields that MUST NOT change after creation: - -* `ID`, `Type`, `Title`, `Priority`, `Created`, `Description`, - `Module` - -## Git Workflow Rules - -### Branch Naming - -Branches for issues MUST follow: - -```default -/ -``` - -Examples: - -```default -feature/12 -bugfix/7 -``` - -### Modification Rules - -* All edits to `TODO` MUST occur on `develop`. -* Feature/bugfix/hotfix branches MUST rebase changes from `develop`. - -### Branch Lifecycle - -* A branch MUST NOT exist before its issue is created. -* A branch MUST be named exactly `/`. -* A branch MAY merge only when the issue status is `done`. - -## Status Transition Rules - -### Valid Transitions - -Not all status changes are permitted. The following table defines the -complete set of valid transitions: - -| From | Allowed transitions | -|---------------|-------------------------------------| -| `open` | `in-progress`, `hold`, `cancelled` | -| `in-progress` | `done`, `hold`, `open`, `cancelled` | -| `hold` | `open`, `in-progress`, `cancelled` | -| `done` | `open` | -| `cancelled` | `open` | - -Any transition not listed MUST be rejected. A no-op transition (same status) -is permitted. - -### Transition Commits - -Each status transition MUST be recorded as a dedicated commit that modifies -only the `TODO` file. The commit message MUST follow this format: - -```default -todo(): - - -``` - -Where: - -* `` is the issue’s integer ID. -* `` is the new status value. -* `` is a description whose content depends on the transition. - The body is required for all transitions except `open`, where it is - optional (see Transition Details). - -### Transition Details - -**\`\`todo(): open\`\`** — Issue creation. - -* Branch: MUST be on `develop`. -* Body: optional. If provided, it MUST match the issue’s `Description` - field. Because the description is already recorded in the `TODO` file - itself, the body MAY be omitted to avoid duplication. When omitted, the - commit consists of only the header line. - -**\`\`todo(): in-progress\`\`** — Start work. - -* Branch: MUST be on `develop`. -* Body: the acceptance criteria for the issue. -* The `AcceptanceCriteria` field on the issue is set from the body of - this commit. It defines what must be true for the issue to be considered - done. -* After this commit, the issue branch `/` may be created from - `develop`. - -**\`\`todo(): done\`\`** — Complete work. - -* Branch: MUST be on `/`. -* Body: acceptance statement — what was delivered against the acceptance - criteria. -* The `Acceptance` field on the issue is set from the body of this - commit. -* After this commit, the issue branch may be merged into `develop` using - `--no-ff`. - -**\`\`todo(): hold\`\`** — Pause work. - -* Branch: MUST be on `/`. -* Body: reason for holding. - -**\`\`todo(): cancelled\`\`** — Cancel issue. - -* Branch: MUST be on `develop` or `/`. -* Body: reason for cancellation. -* If the issue is `open` (no branch exists), the commit is on `develop`. -* If the issue is `in-progress` or `hold` (branch exists), the commit - may be on the issue branch. - -### Transition-Only Constraint - -A transition commit MUST modify only the `TODO` file. No other files may -be included in the commit. This ensures that every transition is -independently auditable. - -## Sprint Membership Logic - -Given: - -* Sprint interval `[S_start, S_end]` -* Issue interval `[I_start, I_end]` - -### Normalization - -* Only `DueEnd` → `I_start = I_end = DueEnd` -* Only `DueStart` → `I_start = I_end = DueStart` -* Neither → issue is not sprint-bound - -### Membership Condition - -An issue belongs to a sprint if: - -```default -I_start ≤ S_end AND I_end ≥ S_start -``` - -### Current Sprint for Date D - -1. All sprints where `S_start ≤ D ≤ S_end`. -2. If multiple match, choose the one with the latest `S_start`. -3. If none match, no active sprint. - -## Preprocessor Requirements - -The preprocessor MUST: - -* Read the raw `TODO` file. -* Split into parts using `--ISSUE`. -* Extract each part’s `Content-Type` and body. -* Reorder parts so that: - \* `application/sprints` appears first (if present) - \* `application/modules` appears second (if present) - \* `application/bugzilla` appears third (if present) - \* All `application/issue` parts follow in original order - \* Unknown part types are preserved in original order after issues -* Emit a MIME message with: - \* `MIME-Version: 1.0` - \* `Content-Type: multipart/mixed; boundary="ISSUE"` - \* Each part wrapped as: - ```default - --ISSUE - Content-Type: - - - ``` - - * Final boundary: - ```default - --ISSUE-- - ``` - -## Parser Requirements - -The parser MUST: - -* Use a MIME parser to extract parts. -* Dispatch based on `Content-Type`: - \* `application/sprints` → sprint parser - \* `application/modules` → module parser - \* `application/bugzilla` → Bugzilla tracker parser - \* `application/issue` → issue parser -* Enforce: - \* Field order - \* Required fields - \* Description indentation and column rules - \* Sprint entry grammar - \* Module entry grammar - \* Module references: if `application/modules` is present, every issue `Module` field MUST reference a defined module name - \* Bugzilla mapping references: if `application/bugzilla` is present, every mapping `Module` value MUST reference a defined module name - \* Relationship targets: every target ID MUST reference an existing issue ID - \* Stale relationships: a relationship targeting a `cancelled` issue SHOULD produce a warning -* Produce a `TodoFile` object: - ```default - { - sprints: Sprint[], - issues: Issue[], - modules?: Module[], - bugzilla?: BugzillaTracker - } - ``` - -## Error Handling - -The parser MUST reject: - -* Missing or malformed `Content-Type` headers -* Unknown MIME types -* Missing required issue fields -* Incorrect field order -* Invalid sprint ranges -* Invalid date formats -* Multiple `application/sprints` parts -* Multiple `application/modules` parts -* Multiple `application/bugzilla` parts -* `application/bugzilla` without `application/modules` -* Issue `Module` referencing undefined module -* Bugzilla mapping `Module` referencing undefined module -* Relationship target referencing non-existent issue ID -* Invalid status transition -* Duplicate issue IDs - -The parser SHOULD warn on: - -* Relationship targeting a `cancelled` issue (stale reference) - -Errors SHOULD include line numbers when possible. - -## CLI Reference - -The `@byteb4rb1e/mime-todo` CLI is the reference implementation of this -specification. It enforces all format, validation, transition, and commit -rules defined above. Both developers and automated agents MUST use the CLI -to interact with the `TODO` file rather than editing it manually. - -Install: - -```default -npm install -g @byteb4rb1e/mime-todo -``` - -### Issue Lifecycle - -Creating an issue (MUST be on `develop`): - -```default -mime-todo create --type feature --title "Add login" --plan "Implement OAuth2 flow" -``` - -This produces a `todo(): open` commit modifying only the `TODO` file. -The `--plan` text becomes the issue’s `Description` field. The commit -has no body because the description is already recorded in the issue itself. - -Starting work (MUST be on `develop`): - -```default -mime-todo start --acceptance-criteria "What must be true for this to be done" -``` - -This produces a `todo(): in-progress` commit. The -`--acceptance-criteria` text is stored in the issue’s -`AcceptanceCriteria` field and becomes the commit body. The issue branch -`/` may then be created by the user: - -```default -git checkout -b feature/ -``` - -Completing work (MUST be on `/`): - -```default -mime-todo done --acceptance "What was delivered against the criteria" -``` - -This produces a `todo(): done` commit. The `--acceptance` text is -stored in the issue’s `Acceptance` field and becomes the commit body. -The issue branch may then be merged into `develop` using `--no-ff`. - -Holding an issue (MUST be on `/`): - -```default -mime-todo hold --reason "Blocked on dependency" -``` - -Cancelling an issue (MUST be on `develop` or `/`): - -```default -mime-todo cancel --reason "Superseded by issue #5" -``` - -The CLI validates the current branch and the status transition before -committing. Invalid transitions or wrong branches are rejected with an -error. - -### Read-Only Commands - -These commands do not modify the `TODO` file and may be run from any -branch: - -```default -mime-todo list # list all issues -mime-todo show # show full issue details -mime-todo sprints # list all sprints -mime-todo issues-in-sprint # list issues in a sprint -``` - -### Bugzilla Integration - -Initializing products and components: - -```default -mime-todo init # check what exists -mime-todo init --dry-run # preview changes -mime-todo init --confirm --assignee user@example.com # create missing items -``` - -The `init` command reads the `application/bugzilla` part and ensures all -referenced products and components exist on the Bugzilla server. - -Pushing commits to Bugzilla: - -```default -mime-todo push # push all unpushed commits -mime-todo push HEAD~3 # push only the last 3 commits -mime-todo push --dry-run # preview without pushing -mime-todo push --strategy full # re-scan all bugs -``` - -On issue branches, `push` posts work commits as Bugzilla comments. Work -comments are only permitted when the issue is `in-progress` and no -`done` transition has been recorded. - -On `develop`, `push` posts transition commits as Bugzilla comments and -updates the bug’s status accordingly. - -Each comment includes a clickable link to the commit and is tagged with -`git-` for idempotency. Running `push` multiple times is -safe. - -### Agent Usage - -Agents MUST use the CLI for all `TODO` file interactions: - -* Creating issues: `mime-todo create` -* Transitioning issues: `mime-todo start`, `mime-todo done`, `mime-todo hold`, - `mime-todo cancel` -* Querying: `mime-todo list`, `mime-todo show`, `mime-todo sprints` -* Syncing to Bugzilla: `mime-todo push` - -Agents MUST NOT: - -* Edit the `TODO` file directly. -* Construct transition commits manually. -* Modify issue fields other than `Status` (and only via the CLI). -* Push to Bugzilla outside of the CLI’s `push` command. - -## Extensibility - -Defined part types: - -* `application/sprints` — sprint metadata -* `application/modules` — repository module structure -* `application/bugzilla` — Bugzilla product/component mappings -* `application/issue` — single issue - -Future part types MAY be added using: - -```default -application/ -``` - -The preprocessor MUST preserve unknown part types but MUST NOT reorder them. -Unknown types are placed after all defined types. - -# Changelog - -* **chore: update document meta** by *Tiara Rodney* at *2026-03-22 02:18:32* -* **Merge branch ‘bugfix/12’** by *Tiara Rodney* at *2026-03-22 01:42:38* -* **fix: replace todo with mime-todo in all CLI references** by *Tiara Rodney* at *2026-03-22 01:42:32* -* **Merge branch ‘feature/10’** by *Tiara Rodney* at *2026-03-22 01:38:33* -* **spec: define AcceptanceCriteria and Acceptance fields on issues** by *Tiara Rodney* at *2026-03-22 01:38:29* -* **chore: update CLI changes** by *Tiara Rodney* at *2026-03-15 04:11:01* - - body is redundant as it is the descritpion of issue -* **update** by *Tiara Rodney* at *2026-03-15 03:39:06*