fdeops 4.0.1 → 4.0.2

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/bin/fde.js CHANGED
@@ -846,7 +846,7 @@ function parseReality(md, maxLen) {
846
846
  if (prose) {
847
847
  return {
848
848
  line: '',
849
- missing: 'UNREADABLE - reality.md does not match the schema (Working theory / Evidence / Differs from brief). Not showing the brief as truth.',
849
+ missing: 'UNREADABLE - reality.md does not match the schema. Use **Working theory:** / **Evidence:** / **Differs from brief how:** from templates/.fde/reality.md. Not showing the brief as truth.',
850
850
  }
851
851
  }
852
852
  return { line: '', missing: '' }
@@ -2880,7 +2880,7 @@ function successContractIssues(success) {
2880
2880
  if (explicit) return explicit[1].trim().length > 3 && target.test(explicit[2])
2881
2881
  const stimulus = /\b(?:test|drill|replay|runs?|request|sample|given|when|simulate|inject|compare|restore|verified|observed|measured)\b/i.test(check)
2882
2882
  || /^\d+\s+[a-z]/i.test(check)
2883
- const result = /\b(?:returns?|rejects?|matches?|equals?|arrives?|alerts?|restores?|passes?|fails?|contains?|produces?|shows?|remains?|receives?)\b/i.test(check)
2883
+ const result = /\b(?:returns?|rejects?|matches?|equals?|arrives?|alerts?|restores?|passes?|fails?|contains?|produces?|shows?|remains?|receives?|observe)\b/i.test(check)
2884
2884
  || /\b(?:zero|no duplicate|no missing)\s+[a-z]/i.test(check)
2885
2885
  return stimulus && result && target.test(check)
2886
2886
  })
@@ -33,6 +33,9 @@ function boundedSections(sections, maxBytes = DEFAULT_BYTES) {
33
33
  const footer = '\n\nCONTEXT: selected excerpts, not the complete record or proof of approval. Use fde recall <topic> for relevant evidence. If policy or constraints are truncated, retrieve them before acting. Verify conflicting decisions.\n'
34
34
  let out = ''
35
35
  const filled = sections.filter(s => s && s.trim())
36
+ // Preserve complete packets before allocating fair shares to oversized ones.
37
+ const complete = filled.join('\n\n') + footer
38
+ if (Buffer.byteLength(complete) <= maxBytes) return complete
36
39
  for (let i = 0; i < filled.length; i++) {
37
40
  const available = maxBytes - Buffer.byteLength(out + footer) - 2
38
41
  const share = Math.max(0, Math.floor(available / (filled.length - i)))
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fdeops-ingest-mcp",
3
- "version": "4.0.1",
3
+ "version": "4.0.2",
4
4
  "private": true,
5
5
  "description": "Thin stdio MCP sink for FDEOps ingest (stage → propose → apply). Zero runtime dependencies.",
6
6
  "bin": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fdeops",
3
- "version": "4.0.1",
3
+ "version": "4.0.2",
4
4
  "description": "Client delivery tools for Forward Deployed Engineers. One @fde skill, local Markdown engagement records, and an offline dashboard for decisions, evidence, approvals, and next actions.",
5
5
  "bin": {
6
6
  "fdeops": "bin/install.js",
package/plugin.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
3
3
  "name": "fdeops",
4
- "version": "4.0.1",
4
+ "version": "4.0.2",
5
5
  "description": "Forward deployed engineering skills for AI coding agents. One @fde skill for the client work around the code. You confirm; then it lands in .fde/ on your laptop.",
6
6
  "author": {
7
7
  "name": "Subash Natarajan",
@@ -49,7 +49,7 @@ That's the load-bearing wall. Also establish: the single highest risk right now
49
49
 
50
50
  **`terrain.md`** - the map as understood now. Honest beats complete: mark unknowns explicitly.
51
51
 
52
- **`reality.md`** - real problem vs stated brief, even if the delta is small.
52
+ **`reality.md`** - real problem vs stated brief, even if the delta is small. Preserve the initialized template. If creating or repairing the file, put each bold colon field on its own line with its content after the label: `**Working theory:**`, `**Evidence:**`, `**Differs from brief how:**`.
53
53
 
54
54
  **`context.md`** - updated so anyone walking in is operational in five minutes.
55
55
 
@@ -1,6 +1,8 @@
1
1
  # Success definition
2
2
 
3
- <!-- Agreed definition of done. Out-of-scope is as important as in-scope. -->
3
+ <!-- Agreed definition of done. Out-of-scope is as important as in-scope.
4
+ Example for Done when: Input: replay duplicate event A twice and unique B on staging. Pass when: exactly one dispatch per ID is observed.
5
+ Record the customer-side signer separately; this check is not evidence of acceptance. -->
4
6
 
5
7
  **Done when:**
6
8
  **Primary value bucket:** <!-- cost-save | risk-mitigation | revenue-uplift (pick one) -->