@nan0web/release 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/README.md +24 -42
  2. package/bin/nan0release.js +27 -42
  3. package/package.json +48 -42
  4. package/project.yaml +79 -0
  5. package/src/README.md.js +90 -93
  6. package/src/Release/Document.js +13 -19
  7. package/src/Release/MarkdownToTest.js +35 -33
  8. package/src/Release/Person.js +3 -8
  9. package/src/Release/Scanner.js +179 -0
  10. package/src/Release.js +19 -12
  11. package/src/Team.js +9 -9
  12. package/src/architecture/ProjectManagementAsCode.js +8 -8
  13. package/src/cli/index.js +9 -0
  14. package/src/co/AppCommandOptions.js +4 -6
  15. package/src/commands/CloseCommand.js +67 -0
  16. package/src/commands/Command.js +48 -0
  17. package/src/commands/DepsCommand.js +143 -0
  18. package/src/commands/InitCommand.js +48 -56
  19. package/src/commands/PublishCommand.js +80 -119
  20. package/src/commands/SpecCommand.js +41 -0
  21. package/src/commands/StatusCommand.js +26 -0
  22. package/src/db/ReleaseDB.js +5 -5
  23. package/src/index.js +18 -0
  24. package/src/ui/cli/ReleaseCLi.js +52 -0
  25. package/src/utils/runSpawn.js +0 -0
  26. package/types/Release/Document.d.ts +2 -2
  27. package/types/Release/Person.d.ts +3 -3
  28. package/types/Release/Scanner.d.ts +90 -0
  29. package/types/Release.d.ts +37 -33
  30. package/types/ReleaseCLI.d.ts +29 -28
  31. package/types/Team.d.ts +3 -3
  32. package/types/architecture/ProjectManagementAsCode.d.ts +1 -1
  33. package/types/cli/index.d.ts +2 -0
  34. package/types/co/AppCommandMessage.d.ts +10 -11
  35. package/types/co/AppCommandOptions.d.ts +1 -2
  36. package/types/commands/BaseCommand.d.ts +23 -0
  37. package/types/commands/ChatCommand.d.ts +9 -9
  38. package/types/commands/ChatMessage.d.ts +36 -0
  39. package/types/commands/CloseCommand.d.ts +25 -0
  40. package/types/commands/Command.d.ts +28 -0
  41. package/types/commands/DepsCommand.d.ts +32 -0
  42. package/types/commands/DepsMessage.d.ts +28 -0
  43. package/types/commands/HostCommand.d.ts +7 -7
  44. package/types/commands/HostMessage.d.ts +44 -0
  45. package/types/commands/InitCommand.d.ts +24 -19
  46. package/types/commands/InitMessage.d.ts +24 -0
  47. package/types/commands/ListCommand.d.ts +8 -8
  48. package/types/commands/ListMessage.d.ts +30 -0
  49. package/types/commands/PublishCommand.d.ts +36 -47
  50. package/types/commands/PublishMessage.d.ts +39 -0
  51. package/types/commands/SealCommand.d.ts +7 -7
  52. package/types/commands/SealMessage.d.ts +28 -0
  53. package/types/commands/ServeCommand.d.ts +7 -7
  54. package/types/commands/ServeMessage.d.ts +30 -0
  55. package/types/commands/ShowCommand.d.ts +7 -7
  56. package/types/commands/SpecCommand.d.ts +25 -0
  57. package/types/commands/StatusCommand.d.ts +9 -0
  58. package/types/commands/SubCommand.d.ts +9 -7
  59. package/types/commands/ValidateCommand.d.ts +7 -7
  60. package/types/commands/ValidateMessage.d.ts +20 -0
  61. package/types/db/ReleaseDB.d.ts +2 -2
  62. package/types/index.d.ts +10 -0
  63. package/types/ui/cli/ReleaseCLi.d.ts +10 -0
  64. package/types/ui/cli/index.d.ts +0 -0
  65. package/types/utils/runSpawn.d.ts +0 -0
  66. package/.datasets/README.dataset.jsonl +0 -19
  67. package/.editorconfig +0 -20
  68. package/CHANGELOG.md +0 -6
  69. package/CONTRIBUTING.md +0 -42
  70. package/bin/commands/InitCommand.js +0 -10
  71. package/bin/lib/functions.js +0 -240
  72. package/bin/lib/functions.test.js +0 -138
  73. package/bin/release.js +0 -12
  74. package/bin/release.test.js +0 -73
  75. package/bin/temp/package.json +0 -1
  76. package/docs/system.uk.md +0 -413
  77. package/docs/uk/README.md +0 -284
  78. package/legacy/PrepareCommand.js +0 -154
  79. package/legacy/PrepareCommand.test.js +0 -189
  80. package/legacy/changelog.js +0 -446
  81. package/releases/1/0/v1.0.0/models/Person.js +0 -26
  82. package/releases/1/0/v1.0.0/models/Person.test.js +0 -44
  83. package/releases/1/0/v1.0.0/models/company.js +0 -11
  84. package/releases/1/0/v1.0.0/models/members.js +0 -14
  85. package/releases/1/0/v1.0.0/models/members.test.js +0 -21
  86. package/releases/1/0/v1.0.0/models/teams/DevTeam.js +0 -6
  87. package/releases/1/0/v1.0.0/models/teams/DevTeam.test.js +0 -15
  88. package/releases/1/0/v1.0.0/models/teams/index.js +0 -5
  89. package/releases/1/0/v1.0.0/release.js +0 -12
  90. package/releases/1/0/v1.0.0/release.md +0 -121
  91. package/releases/1/0/v1.0.0/release.test.js +0 -36
  92. package/releases/1/0/v1.0.0/test/YaRaSLove/git-native.test.js +0 -14
  93. package/releases/current.js +0 -3
  94. package/releases/index.js +0 -11
  95. package/src/Release/MarkdownToTest.test.js +0 -60
  96. package/src/ReleaseCLI.js +0 -122
  97. package/src/architecture/ProjectManagementAsCode.test.js +0 -128
  98. package/src/co/AppCommandMessage.js +0 -22
  99. package/src/commands/ChatCommand.js +0 -56
  100. package/src/commands/HostCommand.js +0 -63
  101. package/src/commands/ListCommand.js +0 -56
  102. package/src/commands/SealCommand.js +0 -51
  103. package/src/commands/ServeCommand.js +0 -53
  104. package/src/commands/ShowCommand.js +0 -58
  105. package/src/commands/SubCommand.js +0 -21
  106. package/src/commands/ValidateCommand.js +0 -66
  107. package/system.md +0 -571
  108. package/tsconfig.json +0 -23
  109. /package/{bin/lib/temp/pnpm-lock.yaml → src/ui/cli/index.js} +0 -0
@@ -0,0 +1,30 @@
1
+ export default class ListMessage extends Message {
2
+ static Body: {
3
+ new ({ json }?: { json?: boolean | undefined }): {
4
+ /** @type {boolean} */
5
+ json: boolean
6
+ }
7
+ json: {
8
+ help: string
9
+ defaultValue: boolean
10
+ type: string
11
+ }
12
+ }
13
+ constructor(input?: {})
14
+ /** @type {ListMessage.Body} */
15
+ body: {
16
+ new ({ json }?: { json?: boolean | undefined }): {
17
+ /** @type {boolean} */
18
+ json: boolean
19
+ }
20
+ json: {
21
+ help: string
22
+ defaultValue: boolean
23
+ type: string
24
+ }
25
+ }
26
+ /** @returns {AsyncGenerator<OutputMessage>} */
27
+ run(): AsyncGenerator<OutputMessage>
28
+ }
29
+ import { Message } from '@nan0web/co'
30
+ import { OutputMessage } from '@nan0web/co'
@@ -1,49 +1,38 @@
1
- export class PublishCommandOptions {
2
- /**
3
- * @param {any} input
4
- * @returns {PublishCommandOptions}
5
- */
6
- static from(input: any): PublishCommandOptions;
7
- constructor(input?: {});
8
- /** @type {string} */
9
- tag: string;
10
- }
11
- /**
12
- * @extends {CommandMessage}
13
- */
14
- export class PublishCommandMessage extends CommandMessage {
15
- constructor(input?: {});
16
- set opts(arg: PublishCommandOptions);
17
- /** @returns {PublishCommandOptions} */
18
- get opts(): PublishCommandOptions;
19
- }
20
- /**
21
- * @extends {Command}
22
- */
23
1
  export default class PublishCommand extends Command {
24
- static Message: typeof PublishCommandMessage;
25
- constructor(input?: {});
26
- /**
27
- * @docs
28
- * # `nan0release publish`
29
- *
30
- * Publishes current package to NPM and creates Git tags.
31
- *
32
- * Steps performed:
33
- * - Verifies no uncommitted changes
34
- * - Pulls latest changes
35
- * - Runs build and test scripts
36
- * - Creates Git tag if not exists
37
- * - Publishes to NPM registry
38
- * - Pushes changes and tags
39
- *
40
- * ```bash
41
- * nan0release publish
42
- * ```
43
- * @param {PublishCommandMessage} msg
44
- */
45
- run(msg: PublishCommandMessage): Promise<void>;
46
- #private;
2
+ static name: string;
3
+ static help: string;
4
+ static Body: typeof PublishBody;
5
+ /** @param {Partial<Command> & { body?: Partial<PublishBody> }} [input={}] */
6
+ constructor(input?: Partial<Command> & {
7
+ body?: Partial<PublishBody>;
8
+ });
9
+ /** @type {PublishBody} */
10
+ body: PublishBody;
11
+ }
12
+ import Command from './Command.js';
13
+ declare class PublishBody {
14
+ static major: {
15
+ help: string;
16
+ defaultValue: boolean;
17
+ };
18
+ static minor: {
19
+ help: string;
20
+ defaultValue: boolean;
21
+ };
22
+ static patch: {
23
+ help: string;
24
+ defaultValue: boolean;
25
+ };
26
+ constructor({ major, minor, patch }?: {
27
+ major?: boolean | undefined;
28
+ minor?: boolean | undefined;
29
+ patch?: boolean | undefined;
30
+ });
31
+ /** @type {boolean} */
32
+ major: boolean;
33
+ /** @type {boolean} */
34
+ minor: boolean;
35
+ /** @type {boolean} */
36
+ patch: boolean;
47
37
  }
48
- import { CommandMessage } from "@nan0web/co";
49
- import { Command } from "@nan0web/co";
38
+ export {};
@@ -0,0 +1,39 @@
1
+ export class PublisBody {
2
+ static major: {
3
+ help: string
4
+ defaultValue: boolean
5
+ }
6
+ static minor: {
7
+ help: string
8
+ defaultValue: boolean
9
+ }
10
+ static patch: {
11
+ help: string
12
+ defaultValue: boolean
13
+ }
14
+ constructor({
15
+ major,
16
+ minor,
17
+ patch,
18
+ }?: {
19
+ major?: boolean | undefined
20
+ minor?: boolean | undefined
21
+ patch?: boolean | undefined
22
+ })
23
+ /** @type {boolean} */
24
+ major: boolean
25
+ /** @type {boolean} */
26
+ minor: boolean
27
+ /** @type {boolean} */
28
+ patch: boolean
29
+ }
30
+ export default class PublishMessage extends Message {
31
+ static Body: typeof PublisBody
32
+ constructor(input?: {})
33
+ /** @type {PublisBody} */
34
+ body: PublisBody
35
+ /** @returns {AsyncGenerator<OutputMessage>} */
36
+ run(): AsyncGenerator<OutputMessage>
37
+ }
38
+ import { Message } from '@nan0web/co'
39
+ import { OutputMessage } from '@nan0web/co'
@@ -11,11 +11,11 @@
11
11
  * --message – optional retro‑reflection text
12
12
  */
13
13
  export default class SealCommand extends SubCommand {
14
- /**
15
- * Seal the current release.
16
- *
17
- * @param {Object} ctx – command context
18
- */
19
- run(ctx: any): Promise<void>;
14
+ /**
15
+ * Seal the current release.
16
+ *
17
+ * @param {Object} ctx – command context
18
+ */
19
+ run(ctx: any): Promise<void>
20
20
  }
21
- import SubCommand from "./SubCommand.js";
21
+ import SubCommand from './SubCommand.js'
@@ -0,0 +1,28 @@
1
+ export default class SealMessage extends Message {
2
+ static Body: {
3
+ new ({ message }?: { message?: string | undefined }): {
4
+ /** @type {string} */
5
+ message: string
6
+ }
7
+ message: {
8
+ help: string
9
+ defaultValue: string
10
+ }
11
+ }
12
+ constructor(input?: {})
13
+ /** @type {SealMessage.Body} */
14
+ body: {
15
+ new ({ message }?: { message?: string | undefined }): {
16
+ /** @type {string} */
17
+ message: string
18
+ }
19
+ message: {
20
+ help: string
21
+ defaultValue: string
22
+ }
23
+ }
24
+ /** @returns {AsyncGenerator<OutputMessage>} */
25
+ run(): AsyncGenerator<OutputMessage>
26
+ }
27
+ import { Message } from '@nan0web/co'
28
+ import { OutputMessage } from '@nan0web/co'
@@ -7,11 +7,11 @@
7
7
  * release serve [--port <number>]
8
8
  */
9
9
  export default class ServeCommand extends SubCommand {
10
- /**
11
- * Start the static server.
12
- *
13
- * @param {Object} ctx – command context
14
- */
15
- run(ctx: any): Promise<void>;
10
+ /**
11
+ * Start the static server.
12
+ *
13
+ * @param {Object} ctx – command context
14
+ */
15
+ run(ctx: any): Promise<void>
16
16
  }
17
- import SubCommand from "./SubCommand.js";
17
+ import SubCommand from './SubCommand.js'
@@ -0,0 +1,30 @@
1
+ export default class ServeMessage extends Message {
2
+ static Body: {
3
+ new ({ port }?: { port?: number | undefined }): {
4
+ /** @type {number} */
5
+ port: number
6
+ }
7
+ port: {
8
+ help: string
9
+ defaultValue: number
10
+ type: string
11
+ }
12
+ }
13
+ constructor(input?: {})
14
+ /** @type {ServeMessage.Body} */
15
+ body: {
16
+ new ({ port }?: { port?: number | undefined }): {
17
+ /** @type {number} */
18
+ port: number
19
+ }
20
+ port: {
21
+ help: string
22
+ defaultValue: number
23
+ type: string
24
+ }
25
+ }
26
+ /** @returns {AsyncGenerator<OutputMessage>} */
27
+ run(): AsyncGenerator<OutputMessage>
28
+ }
29
+ import { Message } from '@nan0web/co'
30
+ import { OutputMessage } from '@nan0web/co'
@@ -9,11 +9,11 @@
9
9
  * --full – dump the whole release.md file
10
10
  */
11
11
  export default class ShowCommand extends SubCommand {
12
- /**
13
- * Render the release information.
14
- *
15
- * @param {Object} ctx – command context
16
- */
17
- run(ctx: any): Promise<void>;
12
+ /**
13
+ * Render the release information.
14
+ *
15
+ * @param {Object} ctx – command context
16
+ */
17
+ run(ctx: any): Promise<void>
18
18
  }
19
- import SubCommand from "./SubCommand.js";
19
+ import SubCommand from './SubCommand.js'
@@ -0,0 +1,25 @@
1
+ export default class SpecCommand extends Command {
2
+ static name: string;
3
+ static help: string;
4
+ static Body: typeof SpecBody;
5
+ /** @param {Partial<Command> & { body?: Partial<SpecBody> }} [input={}] */
6
+ constructor(input?: Partial<Command> & {
7
+ body?: Partial<SpecBody>;
8
+ });
9
+ body: SpecBody;
10
+ run(): AsyncGenerator<OutputMessage, void, unknown>;
11
+ }
12
+ import Command from './Command.js';
13
+ declare class SpecBody {
14
+ static version: {
15
+ help: string;
16
+ defaultValue: string;
17
+ };
18
+ constructor({ version }?: {
19
+ version?: string | undefined;
20
+ });
21
+ /** @type {string} */
22
+ version: string;
23
+ }
24
+ import { OutputMessage } from '@nan0web/co';
25
+ export {};
@@ -0,0 +1,9 @@
1
+ export default class StatusCommand extends Command {
2
+ static name: string;
3
+ static help: string;
4
+ constructor(input?: {});
5
+ body: {};
6
+ run(): AsyncGenerator<OutputMessage, void, unknown>;
7
+ }
8
+ import Command from './Command.js';
9
+ import { OutputMessage } from '@nan0web/co';
@@ -1,8 +1,10 @@
1
- export default SubCommand;
2
- declare class SubCommand extends Command {
3
- constructor(options?: {});
4
- /** @type {ReleaseDB?} */
5
- db: ReleaseDB | null;
1
+ export default SubCommand
2
+ declare class SubCommand {
3
+ constructor(options?: {})
4
+ /** @type {Logger} */
5
+ logger: Logger
6
+ /** @type {ReleaseDB?} */
7
+ db: ReleaseDB | null
6
8
  }
7
- import { Command } from '@nan0web/co';
8
- import ReleaseDB from '../db/ReleaseDB.js';
9
+ import Logger from '@nan0web/log'
10
+ import ReleaseDB from '../db/ReleaseDB.js'
@@ -9,11 +9,11 @@
9
9
  * --ignore-fail – do not treat failed tasks as a validation error
10
10
  */
11
11
  export default class ValidateCommand extends SubCommand {
12
- /**
13
- * Execute validation.
14
- *
15
- * @param {Object} ctx – command context
16
- */
17
- run(ctx: any): Promise<void>;
12
+ /**
13
+ * Execute validation.
14
+ *
15
+ * @param {Object} ctx – command context
16
+ */
17
+ run(ctx: any): Promise<void>
18
18
  }
19
- import SubCommand from "./SubCommand.js";
19
+ import SubCommand from './SubCommand.js'
@@ -0,0 +1,20 @@
1
+ export class ValidateBody {
2
+ static ignoreFailTests: {
3
+ help: string
4
+ defaultValue: boolean
5
+ type: string
6
+ }
7
+ constructor({ ignoreFailTests }?: { ignoreFailTests?: boolean | undefined })
8
+ /** @type {boolean} */
9
+ ignoreFailTests: boolean
10
+ }
11
+ export default class ValidateMessage extends Message {
12
+ static Body: typeof ValidateBody
13
+ constructor(input?: {})
14
+ /** @type {ValidateBody} */
15
+ body: ValidateBody
16
+ /** @returns {AsyncGenerator<OutputMessage>} */
17
+ run(): AsyncGenerator<OutputMessage>
18
+ }
19
+ import { Message } from '@nan0web/co'
20
+ import { OutputMessage } from '@nan0web/co'
@@ -25,6 +25,6 @@ declare class ReleaseDB extends DBFS {
25
25
  /**
26
26
  * @returns {Array<string>} List of discovered release root paths
27
27
  */
28
- get releases(): string[];
28
+ get releases(): Array<string>;
29
29
  }
30
- import DBFS from "@nan0web/db-fs";
30
+ import DBFS from '@nan0web/db-fs';
@@ -0,0 +1,10 @@
1
+ import Release from './Release.js';
2
+ import ReleaseDocument from './Release/Document.js';
3
+ import Person from './Release/Person.js';
4
+ import Scanner from './Release/Scanner.js';
5
+ import MarkdownToTest from './Release/MarkdownToTest.js';
6
+ import { ProjectManagement } from './architecture/ProjectManagementAsCode.js';
7
+ import { ReleaseManager } from './architecture/ProjectManagementAsCode.js';
8
+ import { TaskTestSuite } from './architecture/ProjectManagementAsCode.js';
9
+ import { ChangelogTaskManager } from './architecture/ProjectManagementAsCode.js';
10
+ export { Release, ReleaseDocument, Person, Scanner, MarkdownToTest, ProjectManagement, ReleaseManager, TaskTestSuite, ChangelogTaskManager };
@@ -0,0 +1,10 @@
1
+ export default function createReleaseCLI(argv?: string[], logger?: Logger, fs?: {}): ReleaseCLi;
2
+ import Logger from '@nan0web/log';
3
+ declare class ReleaseCLi extends CLI {
4
+ constructor(input: any);
5
+ /** @type {DBFS} */
6
+ fs: DBFS;
7
+ }
8
+ import { CLI } from '@nan0web/ui-cli';
9
+ import DBFS from '@nan0web/db-fs';
10
+ export {};
File without changes
File without changes
@@ -1,19 +0,0 @@
1
- {"instruction":"How to install with pnpm?","output":"```bash\npnpm add @nan0web/release\n```\n","context":["h1:@nan0web/release","h2:Installation"],"input":"## Installation\n\n","tags":["@nan0web/release","Installation"],"proven":"assert-in-@nan0web/release"}
2
- {"instruction":"How to install with npm?","output":"```bash\nnpm install @nan0web/release\n```\n","context":["h1:@nan0web/release","h2:Installation"],"input":"## Installation\n\n","tags":["@nan0web/release","Installation"],"proven":"assert-in-@nan0web/release"}
3
- {"instruction":"How to install with yarn?","output":"```bash\nyarn add @nan0web/release\n```\n","context":["h1:@nan0web/release","h2:Installation"],"input":"## Installation\n\n","tags":["@nan0web/release","Installation"],"proven":"assert-in-@nan0web/release"}
4
- {"instruction":"How to initialize a new release version?","output":"```bash\nrelease init v1.0.0\n```\n","context":["h1:@nan0web/release","h2:CLI Usage"],"input":"## CLI Usage\n\nStart by initializing a new release:\n\n","tags":["@nan0web/release","CLI Usage"],"proven":"assert-in-@nan0web/release"}
5
- {"instruction":"How to show release information?","output":"```bash\nrelease show [--full]\n```\n","context":["h1:@nan0web/release","h2:CLI Usage"],"input":"## CLI Usage\n\nStart by initializing a new release:\n\nconst cli = new ReleaseCLI()\nShow release details:\n\n","tags":["@nan0web/release","CLI Usage"],"proven":"assert-in-@nan0web/release"}
6
- {"instruction":"How to list all releases?","output":"```bash\nrelease list [--json]\n```\n","context":["h1:@nan0web/release","h2:CLI Usage"],"input":"## CLI Usage\n\nStart by initializing a new release:\n\nconst cli = new ReleaseCLI()\nShow release details:\n\nconst release = new Release({\nversion: \"v1.0.0\",\ncreatedAt: new Date(\"2025-08-20\")\n})\nconsole.info(release.version) // v1.0.0\nList all releases in the project:\n\n","tags":["@nan0web/release","CLI Usage"],"proven":"assert-in-@nan0web/release"}
7
- {"instruction":"How to write a release chat message?","output":"```bash\nrelease chat write --user alice \"Issue with the build pipeline\"\n```\n","context":["h1:@nan0web/release","h2:CLI Usage"],"input":"## CLI Usage\n\nStart by initializing a new release:\n\nconst cli = new ReleaseCLI()\nShow release details:\n\nconst release = new Release({\nversion: \"v1.0.0\",\ncreatedAt: new Date(\"2025-08-20\")\n})\nconsole.info(release.version) // v1.0.0\nList all releases in the project:\n\nconst cli = new ReleaseCLI()\nAdd a chat message to the current release:\n\n","tags":["@nan0web/release","CLI Usage"],"proven":"assert-in-@nan0web/release"}
8
- {"instruction":"How to host release UI?","output":"```bash\nrelease host [--webui] [--port 3000]\n```\n","context":["h1:@nan0web/release","h2:CLI Usage"],"input":"## CLI Usage\n\nStart by initializing a new release:\n\nconst cli = new ReleaseCLI()\nShow release details:\n\nconst release = new Release({\nversion: \"v1.0.0\",\ncreatedAt: new Date(\"2025-08-20\")\n})\nconsole.info(release.version) // v1.0.0\nList all releases in the project:\n\nconst cli = new ReleaseCLI()\nAdd a chat message to the current release:\n\nconst cli = new ReleaseCLI()\nHost a static server for viewing releases:\n\n","tags":["@nan0web/release","CLI Usage"],"proven":"assert-in-@nan0web/release"}
9
- {"instruction":"How to serve release static assets?","output":"```bash\nrelease serve [--port 8080]\n```\n","context":["h1:@nan0web/release","h2:CLI Usage"],"input":"## CLI Usage\n\nStart by initializing a new release:\n\nconst cli = new ReleaseCLI()\nShow release details:\n\nconst release = new Release({\nversion: \"v1.0.0\",\ncreatedAt: new Date(\"2025-08-20\")\n})\nconsole.info(release.version) // v1.0.0\nList all releases in the project:\n\nconst cli = new ReleaseCLI()\nAdd a chat message to the current release:\n\nconst cli = new ReleaseCLI()\nHost a static server for viewing releases:\n\nconst cli = new ReleaseCLI()\nServe all release files for local inspection:\n\n","tags":["@nan0web/release","CLI Usage"],"proven":"assert-in-@nan0web/release"}
10
- {"instruction":"How to validate release tasks?","output":"```bash\nrelease validate [--ignore-fail]\n```\n","context":["h1:@nan0web/release","h2:CLI Usage"],"input":"## CLI Usage\n\nStart by initializing a new release:\n\nconst cli = new ReleaseCLI()\nShow release details:\n\nconst release = new Release({\nversion: \"v1.0.0\",\ncreatedAt: new Date(\"2025-08-20\")\n})\nconsole.info(release.version) // v1.0.0\nList all releases in the project:\n\nconst cli = new ReleaseCLI()\nAdd a chat message to the current release:\n\nconst cli = new ReleaseCLI()\nHost a static server for viewing releases:\n\nconst cli = new ReleaseCLI()\nServe all release files for local inspection:\n\nconst cli = new ReleaseCLI()\nValidate release tasks and integrity:\n\n","tags":["@nan0web/release","CLI Usage"],"proven":"assert-in-@nan0web/release"}
11
- {"instruction":"How to seal a release?","output":"```bash\nrelease seal [--message \"All core APIs are stable and tested\"]\n```\n","context":["h1:@nan0web/release","h2:CLI Usage"],"input":"## CLI Usage\n\nStart by initializing a new release:\n\nconst cli = new ReleaseCLI()\nShow release details:\n\nconst release = new Release({\nversion: \"v1.0.0\",\ncreatedAt: new Date(\"2025-08-20\")\n})\nconsole.info(release.version) // v1.0.0\nList all releases in the project:\n\nconst cli = new ReleaseCLI()\nAdd a chat message to the current release:\n\nconst cli = new ReleaseCLI()\nHost a static server for viewing releases:\n\nconst cli = new ReleaseCLI()\nServe all release files for local inspection:\n\nconst cli = new ReleaseCLI()\nValidate release tasks and integrity:\n\nconst release = new Release({\nversion: \"v1.0.0\",\ncreatedAt: new Date(\"2025-08-20\")\n})\nSeal the release with retro reflection:\n\n","tags":["@nan0web/release","CLI Usage"],"proven":"assert-in-@nan0web/release"}
12
- {"instruction":"How to instantiate a Release?","output":"```js\nimport { Release } from '@nan0web/release'\nconst release = new Release({\n\tversion: \"v1.0.0\",\n\tcreatedAt: \"2025-08-20T10:00:00Z\"\n})\nconsole.info(release.version) // ← v1.0.0\nconsole.info(release.createdAt instanceof Date) // ← true\n\n```\n","context":["h1:@nan0web/release","h2:Core Concepts","h3:1. Release as Object"],"input":"### 1. Release as Object\n\nA `Release` is a structured class containing:\n\n- `version`: release identifier (vX.Y.Z).\n- `createdAt`, `startAt`, `planAt`, `completeAt`: datetime milestones.\n- `document`: parsed markdown document with structure-aware parsing.\n\nEach property is typed and validated automatically via JSDoc and runtime parsing.\n\n","tags":["@nan0web/release","Core Concepts","1. Release as Object"],"proven":"assert-in-@nan0web/release"}
13
- {"instruction":"How to parse release notes markdown into structured data?","output":"```js\nimport { ReleaseDocument } from '@nan0web/release'\nconst md = `# v1.0.0 - 2025-08-20\n\n## Overview\nRelease milestone includes UI polish and core API stabilization.\n\n### Tasks\n### Done **Implement core UI design** [ui.core-design]\n### InProgress **Fix responsive issues in mobile layout** [ui.mobile-fixes]`\n\nconst doc = ReleaseDocument.from(md)\nconsole.info(doc.version) // ← v1.0.0\nconsole.info(doc.date instanceof Date) // ← true\nconsole.info(doc.document.children instanceof Array) // ← true\n\n```\n","context":["h1:@nan0web/release","h2:Core Concepts","h3:2. Release Document Parsing"],"input":"### 2. Release Document Parsing\n\nA `ReleaseDocument` extends `@nan0web/markdown` with:\n\n- Structured parsing of markdown release notes\n- Extraction of sections and tasks\n- Team and role parsing from markdown frontmatter or code\n\n","tags":["@nan0web/release","Core Concepts","2. Release Document Parsing"],"proven":"assert-in-@nan0web/release"}
14
- {"instruction":"How to create a Person with typed properties?","output":"```js\nimport { Person } from '@nan0web/release'\nconst person = new Person({\n\tname: [\"Alice\", \"Developer\"],\n\tgender: \"female\",\n\tcontacts: [\"mailto:alice@example.com\"]\n})\nconsole.info(person.name.firstName) // ← Alice\nconsole.info(person.contacts.length >= 0) // ← true\n\n```\n","context":["h1:@nan0web/release","h2:Core Concepts","h3:3. Person & Team Structures"],"input":"### 3. Person & Team Structures\n\nA `Person` instance includes:\n\n- `name`: HumanName\n- `gender`: HumanGender\n- `contacts`: array of HumanContact\n\n","tags":["@nan0web/release","Core Concepts","3. Person & Team Structures"],"proven":"assert-in-@nan0web/release"}
15
- {"instruction":"How to register and validate tasks as tests?","output":"```js\nimport { ProjectManagement } from '@nan0web/release'\nconst pm = new ProjectManagement()\npm.registerTask(\"task-1\", \"./tests/task1.test.js\")\npm.registerTask(\"task-2\", \"./tests/task2.test.js\")\n\nconst mockResults = {\n\tpassed: [\"task-1\"],\n\tfailed: [],\n\tpending: [\"task-2\"]\n}\n\npm.validateProjectState = async () => mockResults\nconst results = await pm.validateProjectState()\n\nconsole.info(results.passed.includes(\"task-1\")) // ← true\nconsole.info(results.pending.includes(\"task-2\")) // ← true\n\n```\n","context":["h1:@nan0web/release","h2:Architecture: Project Management as Code","h3:Task Management"],"input":"### Task Management\n\nTasks are registered as `taskId` → `testFilePath` in `ProjectManagement`.\nTheir status is derived by running `node:test` suites.\n\n","tags":["@nan0web/release","Architecture: Project Management as Code","Task Management"],"proven":"assert-in-@nan0web/release"}
16
- {"instruction":"How to execute a release after validation?","output":"```js\nimport { ReleaseManager, ProjectManagement } from '@nan0web/release'\nconst pm = new ProjectManagement()\nconst rm = new ReleaseManager(pm)\n\nrm.calculateVersion = () => \"v1.0.1\"\nrm.publish = async () => true\n\nconst result = await rm.executeRelease(\"patch\")\nconsole.info(result.version) // ← v1.0.1\nconsole.info(result.published) // ← true\n\n```\n","context":["h1:@nan0web/release","h2:Architecture: Project Management as Code","h3:Release Processing"],"input":"### Release Processing\n\nThe `ReleaseManager` coordinates releases and validates readiness.\nIt ensures:\n\n- All registered tests pass\n- Version is correctly incremented\n- Git tag is applied if all validations succeed\n\n","tags":["@nan0web/release","Architecture: Project Management as Code","Release Processing"],"proven":"assert-in-@nan0web/release"}
17
- {"instruction":"How to parse changelog and extract tasks?","output":"```js\nimport { ChangelogTaskManager } from '@nan0web/release'\nconst ctm = new ChangelogTaskManager()\nconst changelog = `# Changelog\n\n## [1.0.0] - 2025-08-20\n### Added\n- Initial structure [core.init]\n- Release notes support [docs.release-notes]`\n\nconst tasks = ctm.parseChangelog(changelog)\nconsole.info(Array.isArray(tasks)) // ← true\nconsole.info(tasks.length >= 0) // ← true\n\n```\n","context":["h1:@nan0web/release","h2:Architecture: Project Management as Code","h3:Changelog Integration"],"input":"### Changelog Integration\n\nUsing `ChangelogTaskManager`, you can:\n\n- Extract task definitions from changelog entries\n- Generate corresponding test files\n- Automate task progression in CI\n\n","tags":["@nan0web/release","Architecture: Project Management as Code","Changelog Integration"],"proven":"assert-in-@nan0web/release"}
18
- {"instruction":"How to run playground demo?","output":"```bash\ngit clone https://github.com/nan0web/release.git\ncd release\npnpm install\npnpm run playground\n```\n","context":["h1:@nan0web/release","h2:CLI Playground"],"input":"## CLI Playground\n\nTry the package in the terminal:\n\n","tags":["@nan0web/release","CLI Playground"],"proven":"assert-in-@nan0web/release"}
19
- {"instruction":"How to check project status before publishing?","output":"```bash\nnpm test\nnpm run test:coverage\nnpm run test:status\n```\n","context":["h1:@nan0web/release","h2:Project Status"],"input":"## Project Status\n\nTo verify the project is ready, run:\n\n","tags":["@nan0web/release","Project Status"],"proven":"assert-in-@nan0web/release"}
package/.editorconfig DELETED
@@ -1,20 +0,0 @@
1
- root = true
2
-
3
- [*]
4
- indent_style = tab
5
- indent_size = 2
6
- charset = utf-8
7
- end_of_line = lf
8
- trim_trailing_whitespace = true
9
- insert_final_newline = true
10
-
11
- [*.md]
12
- trim_trailing_whitespace = false
13
-
14
- [*.{jsx}]
15
- indent_style = tab
16
- indent_size = 2
17
-
18
- [*.{nano,yaml}]
19
- indent_style = space
20
- indent_size = 2
package/CHANGELOG.md DELETED
@@ -1,6 +0,0 @@
1
- # Changelog
2
-
3
- All notable changes to this project will be documented in this file.
4
-
5
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
- ---
package/CONTRIBUTING.md DELETED
@@ -1,42 +0,0 @@
1
- # Contributing
2
-
3
- ## Developer Certificate of Origin and License
4
- By contributing, You accept and agree to the following terms and conditions for your present and future contributions submitted.
5
- Except for the license granted herein, You reserve all right, title, and interest in and to your Contributions.
6
- All contributions are subject to the Developer Certificate of Origin and license as set out in the LICENSE file.
7
-
8
- ## Code of Conduct
9
- As contributors and maintainers of this project, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.
10
-
11
- We are committed to making participation in this project a harassment-free experience for everyone, regardless of:
12
- - Level of experience,
13
- - Gender,
14
- - Gender identity and expression,
15
- - Sexual orientation,
16
- - Disability,
17
- - Personal appearance,
18
- - Body size,
19
- - Race,
20
- - Ethnicity,
21
- - Age,
22
- - Religion.
23
-
24
- > We recognize all people as the foundation of humanity, and our actions contribute to the continued existence and growth of our shared humanity.
25
-
26
- ### Release versioning
27
- - Keep releases close to the minor versions and publish patches only if required.
28
-
29
- ### Examples of unacceptable behavior by participants:
30
- - Use of sexual language or imagery.
31
- - Derogatory comments or personal attacks.
32
- - Trolling, public or private harassment.
33
- - Insults or other unprofessional conduct.
34
-
35
- ### Enforcement
36
- Project maintainers have the right and responsibility to:
37
- - Remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions not aligned with this Code of Conduct.
38
- - Remove maintainers who violate this Code of Conduct.
39
-
40
- Instances of unacceptable behavior can be reported by contacting the project team.
41
-
42
- This Code of Conduct is adapted from the [Contributor Covenant, version 1.1.0](https://contributor-covenant.org/version/1/1/0/).
@@ -1,10 +0,0 @@
1
- import { Command } from "@nan0web/co"
2
-
3
- export default class InitCommand extends Command {
4
- constructor() {
5
- super({
6
- name: "init",
7
- help: "Initializes the release version by creating file structure and default release.md"
8
- })
9
- }
10
- }