hadara 0.3.0-rc.2 → 0.3.0

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.
package/README.md CHANGED
@@ -5,8 +5,8 @@
5
5
  </p>
6
6
 
7
7
  <p align="center">
8
- <img alt="Published npm release" src="https://img.shields.io/badge/npm-0.3.0--rc.1-blue">
9
- <img alt="Source candidate" src="https://img.shields.io/badge/source-0.3.0--rc.2-orange">
8
+ <img alt="Stable npm release" src="https://img.shields.io/badge/npm-0.3.0-blue">
9
+ <img alt="Source version" src="https://img.shields.io/badge/source-0.3.0-orange">
10
10
  <img alt="Node.js" src="https://img.shields.io/badge/node-%3E%3D22-brightgreen">
11
11
  <img alt="License" src="https://img.shields.io/badge/license-MIT-lightgrey">
12
12
  </p>
@@ -21,27 +21,21 @@ This repository is both the HADARA source checkout and the HADARA protocol works
21
21
 
22
22
  ## Release Status
23
23
 
24
- Current published npm release:
24
+ Current stable npm release:
25
25
 
26
26
  ```text
27
- hadara@0.3.0-rc.1
27
+ hadara@0.3.0
28
28
  ```
29
29
 
30
- Current source release candidate:
30
+ Previous npm release candidate:
31
31
 
32
32
  ```text
33
33
  hadara@0.3.0-rc.2
34
34
  ```
35
35
 
36
- Previous published npm release:
37
-
38
- ```text
39
- hadara@0.3.0-rc.0
40
- ```
41
-
42
36
  The 0.3.0 line is the Phase 7 Surface Refactor. It organizes HADARA's existing task, evidence, proof, lifecycle, release, and document surfaces so agents can distinguish primary lifecycle commands, diagnostics, advanced surfaces, canonical documents, historical documents, and safe Markdown update boundaries.
43
37
 
44
- Phase 7.x labels are internal implementation phases, not npm release-candidate labels. Publishing any later release still requires the approval-gated release path and explicit operator confirmation.
38
+ Phase 7.x labels are internal implementation phases, not npm release-candidate labels. The stable `0.3.0` package is published through the approval-gated release path with explicit operator confirmation.
45
39
 
46
40
  | Surface | Status |
47
41
  |---|---|
@@ -50,8 +44,9 @@ Phase 7.x labels are internal implementation phases, not npm release-candidate l
50
44
  | `hadara@0.2.0-rc.2` | Previous published npm RC. |
51
45
  | `hadara@0.2.0-rc.3` | Previous published npm RC. |
52
46
  | `hadara@0.3.0-rc.0` | Previous published npm RC; package metadata lacks the intended discovery fields. |
53
- | `hadara@0.3.0-rc.1` | Current published npm RC; T-0301 publish evidence verified `npm view` returned `0.3.0-rc.1`. |
54
- | `hadara@0.3.0-rc.2` | Current source candidate prepared by T-0310; publish remains approval-gated. |
47
+ | `hadara@0.3.0-rc.1` | Previous published npm RC; T-0301 publish evidence verified `npm view` returned `0.3.0-rc.1`. |
48
+ | `hadara@0.3.0-rc.2` | Previous published npm RC; T-0310 publish evidence verified `npm view` returned `0.3.0-rc.2`. |
49
+ | `hadara@0.3.0` | Current stable npm release. |
55
50
  | GitHub Release | Secondary target, approval-gated. |
56
51
  | Docker image | Deferred. |
57
52
  | PyPI/Python package | `hadara==0.2.0rc1` published preview bridge. |
@@ -63,10 +58,10 @@ No release command should publish, create a GitHub Release, build Docker images,
63
58
 
64
59
  Requires Node.js 22.
65
60
 
66
- Install the latest published RC:
61
+ Install the stable release:
67
62
 
68
63
  ```bash
69
- npm install -g hadara@0.3.0-rc.1
64
+ npm install -g hadara@0.3.0
70
65
  hadara help
71
66
  hadara doctor --json
72
67
  ```
@@ -74,8 +69,8 @@ hadara doctor --json
74
69
  Run without a global install:
75
70
 
76
71
  ```bash
77
- npx hadara@0.3.0-rc.1 help
78
- npx hadara@0.3.0-rc.1 doctor --json
72
+ npx hadara@0.3.0 help
73
+ npx hadara@0.3.0 doctor --json
79
74
  ```
80
75
 
81
76
  ## What HADARA Gives You
@@ -11,6 +11,7 @@ exports.parseManagedSections = parseManagedSections;
11
11
  const node_crypto_1 = __importDefault(require("node:crypto"));
12
12
  const node_fs_1 = __importDefault(require("node:fs"));
13
13
  const node_path_1 = __importDefault(require("node:path"));
14
+ const fs_1 = require("../core/fs");
14
15
  const START_MARKER = /^<!--\s*hadara:managed:start\s+([A-Za-z0-9_.-]+)\s+(\{.*\})\s*-->\s*$/;
15
16
  const END_MARKER = /^<!--\s*hadara:managed:end\s+([A-Za-z0-9_.-]+)\s*-->\s*$/;
16
17
  const KNOWN_TARGETS = [
@@ -134,7 +135,18 @@ function createDocsPatchPlanReport(projectRoot, options) {
134
135
  const patches = patch ? [patch] : [];
135
136
  if (options.mode === 'execute' && patch && issues.every((issue) => issue.severity !== 'error')) {
136
137
  const nextContent = replaceSectionBody(targetContent, section, contentFileResult.content);
137
- node_fs_1.default.writeFileSync(targetAbsolutePath, nextContent, 'utf8');
138
+ try {
139
+ (0, fs_1.atomicWriteTextFile)(projectRoot, targetPath, nextContent);
140
+ }
141
+ catch (error) {
142
+ issues.push({
143
+ severity: 'error',
144
+ code: 'MANAGED_PATCH_WRITE_FAILED',
145
+ path: targetPath,
146
+ sectionId: section.id,
147
+ message: `Could not apply managed patch atomically; target file was preserved if the atomic rename failed: ${error instanceof Error ? error.message : String(error)}`
148
+ });
149
+ }
138
150
  }
139
151
  return {
140
152
  schemaVersion: 'hadara.docs.patchPlan.v1',
@@ -334,8 +334,8 @@ function checkPackageMetadataReadiness(packageJson, licenseText, testStrategy, r
334
334
  packageJson?.version === '0.0.0-bootstrap' &&
335
335
  packageJson?.private === true &&
336
336
  bin.hadara === './dist/cli/main.js';
337
- const releaseCandidateMetadataOk = packageJson?.name === 'hadara' &&
338
- /^0\.\d+\.0-rc\.\d+$/.test(String(packageJson?.version ?? '')) &&
337
+ const publishablePackageMetadataOk = packageJson?.name === 'hadara' &&
338
+ (/^0\.\d+\.0-rc\.\d+$/.test(String(packageJson?.version ?? '')) || /^0\.\d+\.0$/.test(String(packageJson?.version ?? ''))) &&
339
339
  packageJson?.private === false &&
340
340
  packageJson?.license === 'MIT' &&
341
341
  bin.hadara === './dist/cli/main.js' &&
@@ -364,13 +364,13 @@ function checkPackageMetadataReadiness(packageJson, licenseText, testStrategy, r
364
364
  'Before adding more T-0128+ release/install/package-smoke readiness markers, prefer moving the structured readiness source to `docs/RELEASE_READINESS.md` or `docs/release-readiness.json`'
365
365
  ];
366
366
  const docsOk = includesAll(testStrategy, metadataMarkers) || includesAll(releaseReadiness, metadataMarkers);
367
- const ok = (bootstrapMetadataOk || releaseCandidateMetadataOk) && docsOk;
367
+ const ok = (bootstrapMetadataOk || publishablePackageMetadataOk) && docsOk;
368
368
  return {
369
369
  code: 'PACKAGE_METADATA_RELEASE_READINESS',
370
370
  name: 'Package metadata release readiness',
371
371
  status: ok ? 'passed' : readinessFailureStatus(mode),
372
372
  summary: ok
373
- ? 'Package name, release-candidate version, private transition, files target, license path, publish target, and installed CLI verification decisions are documented without publishing.'
373
+ ? 'Package name, publishable version, private transition, files target, license path, publish target, and installed CLI verification decisions are documented without publishing.'
374
374
  : 'Package metadata release-readiness decisions must be documented before publishability is accepted.'
375
375
  };
376
376
  }
@@ -14,7 +14,7 @@ function createReleasePublishReport(options) {
14
14
  const mode = options.mode ?? 'dry-run';
15
15
  const env = options.env ?? process.env;
16
16
  const metadata = readPackageMetadata(options.projectRoot);
17
- const metadataPublishable = !metadata.private && /^0\.\d+\.0-rc\.\d+$/.test(metadata.packageVersion);
17
+ const metadataPublishable = !metadata.private && (/^0\.\d+\.0-rc\.\d+$/.test(metadata.packageVersion) || /^0\.\d+\.0$/.test(metadata.packageVersion));
18
18
  const dryRun = (0, release_dry_run_1.createReleaseDryRunReport)(options.projectRoot);
19
19
  const approval = {
20
20
  required: true,
@@ -33,7 +33,9 @@ function createReleasePublishReport(options) {
33
33
  code: 'PACKAGE_PUBLISHABLE_METADATA',
34
34
  name: 'Package publishable metadata',
35
35
  status: metadataPublishable ? 'passed' : 'error',
36
- summary: metadataPublishable ? 'Package metadata is in release-candidate mode.' : 'Package metadata must be 0.x.0-rc.N with private false before publish/deploy readiness can pass.'
36
+ summary: metadataPublishable
37
+ ? 'Package metadata is in publishable version mode.'
38
+ : 'Package metadata must be 0.x.0-rc.N or 0.x.0 with private false before publish/deploy readiness can pass.'
37
39
  },
38
40
  {
39
41
  code: 'APPROVAL_RECORD',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hadara",
3
- "version": "0.3.0-rc.2",
3
+ "version": "0.3.0",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "description": "Portable AI-assisted development workbench for evidence-backed task capsules, handoffs, and release gates.",