@vectros-ai/blueprints 0.6.3 → 0.6.4

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/dist/index.mjs CHANGED
@@ -1037,9 +1037,10 @@ var DATA_PLANE_ACTIONS = [
1037
1037
  "folders:r",
1038
1038
  "folders:c"
1039
1039
  ];
1040
+ var EDITOR_ACTIONS = [...DATA_PLANE_ACTIONS, "records:d", "documents:d", "folders:d"];
1040
1041
  var agenticSdlc = {
1041
1042
  name: "agentic-sdlc",
1042
- version: "1.0.0",
1043
+ version: "1.2.0",
1043
1044
  description: "A whole-SDLC system of record for an AI development team \u2014 decisions, designs, references, runbooks, post-mortems (as documents) plus controls, conventions, gotchas, and a glossary (as records), cross-linked and recalled by meaning.",
1044
1045
  contextId: "agentic-sdlc",
1045
1046
  contextName: "Agentic SDLC Knowledge Base",
@@ -1474,6 +1475,19 @@ var agenticSdlc = {
1474
1475
  fieldType: "date",
1475
1476
  description: "ISO-8601 last-reviewed date. Range-queryable.",
1476
1477
  renderHints: { label: "Reviewed on", widget: "date", order: 12 }
1478
+ },
1479
+ {
1480
+ // Provenance for sync: the source file this record was distilled from. A
1481
+ // record can't carry an in-file marker the way a document can (many records
1482
+ // come from one file), so it names its source instead — a change to that file
1483
+ // finds (equality lookup) and re-extracts exactly its records. Equality, not
1484
+ // range: file-level is the sync unit (re-extraction reprocesses the whole file),
1485
+ // and the schema keeps its single range lookup for the date row.
1486
+ fieldId: "sourceRef",
1487
+ fieldType: "string",
1488
+ filterable: true,
1489
+ description: "The source file (repo path) this record was extracted from \u2014 its provenance; a change to that file re-extracts its records. The specific section is encoded in the record externalId.",
1490
+ renderHints: { label: "Source ref", widget: "text", order: 13 }
1477
1491
  }
1478
1492
  ],
1479
1493
  lookupFields: [
@@ -1483,7 +1497,8 @@ var agenticSdlc = {
1483
1497
  "area",
1484
1498
  "verifiedBy",
1485
1499
  "relatedDecision",
1486
- { fieldName: "reviewedOn", rangeEnabled: true }
1500
+ { fieldName: "reviewedOn", rangeEnabled: true },
1501
+ "sourceRef"
1487
1502
  ]
1488
1503
  },
1489
1504
  {
@@ -1560,9 +1575,23 @@ var agenticSdlc = {
1560
1575
  fieldType: "date",
1561
1576
  description: "ISO-8601 \u2014 when last revised. Range-queryable.",
1562
1577
  renderHints: { label: "Updated on", widget: "date", order: 9 }
1578
+ },
1579
+ {
1580
+ // Provenance for sync — see the note on `control.sourceRef`.
1581
+ fieldId: "sourceRef",
1582
+ fieldType: "string",
1583
+ filterable: true,
1584
+ description: "The source file (repo path) this record was extracted from \u2014 its provenance; a change to that file re-extracts its records. The specific section is encoded in the record externalId.",
1585
+ renderHints: { label: "Source ref", widget: "text", order: 10 }
1563
1586
  }
1564
1587
  ],
1565
- lookupFields: ["area", "status", "establishedBy", { fieldName: "updatedOn", rangeEnabled: true }]
1588
+ lookupFields: [
1589
+ "area",
1590
+ "status",
1591
+ "establishedBy",
1592
+ { fieldName: "updatedOn", rangeEnabled: true },
1593
+ "sourceRef"
1594
+ ]
1566
1595
  },
1567
1596
  {
1568
1597
  // A GOTCHA / sharp edge: a symptom, its cause, and the fix. A tight typed
@@ -1616,9 +1645,22 @@ var agenticSdlc = {
1616
1645
  fieldType: "date",
1617
1646
  description: "ISO-8601 \u2014 when first hit. Range-queryable.",
1618
1647
  renderHints: { label: "Discovered on", widget: "date", order: 7 }
1648
+ },
1649
+ {
1650
+ // Provenance for sync — see the note on `control.sourceRef`.
1651
+ fieldId: "sourceRef",
1652
+ fieldType: "string",
1653
+ filterable: true,
1654
+ description: "The source file (repo path) this record was extracted from \u2014 its provenance; a change to that file re-extracts its records. The specific section is encoded in the record externalId.",
1655
+ renderHints: { label: "Source ref", widget: "text", order: 8 }
1619
1656
  }
1620
1657
  ],
1621
- lookupFields: ["area", "status", { fieldName: "discoveredOn", rangeEnabled: true }]
1658
+ lookupFields: [
1659
+ "area",
1660
+ "status",
1661
+ { fieldName: "discoveredOn", rangeEnabled: true },
1662
+ "sourceRef"
1663
+ ]
1622
1664
  },
1623
1665
  {
1624
1666
  // A glossary TERM — a definition keyed by the term itself. Structure-dominant:
@@ -1678,6 +1720,14 @@ var agenticSdlc = {
1678
1720
  fieldType: "date",
1679
1721
  description: "ISO-8601 \u2014 when last revised. Range-queryable.",
1680
1722
  renderHints: { label: "Updated on", widget: "date", order: 7 }
1723
+ },
1724
+ {
1725
+ // Provenance for sync — see the note on `control.sourceRef`.
1726
+ fieldId: "sourceRef",
1727
+ fieldType: "string",
1728
+ filterable: true,
1729
+ description: "The source file (repo path) this record was extracted from \u2014 its provenance; a change to that file re-extracts its records. The specific section is encoded in the record externalId.",
1730
+ renderHints: { label: "Source ref", widget: "text", order: 8 }
1681
1731
  }
1682
1732
  ],
1683
1733
  // `term` is a UNIQUE equality lookup — exact "define X" + a one-per-term
@@ -1686,7 +1736,8 @@ var agenticSdlc = {
1686
1736
  { fieldName: "term", unique: true },
1687
1737
  "area",
1688
1738
  "relatedDecision",
1689
- { fieldName: "updatedOn", rangeEnabled: true }
1739
+ { fieldName: "updatedOn", rangeEnabled: true },
1740
+ "sourceRef"
1690
1741
  ]
1691
1742
  }
1692
1743
  ],
@@ -1704,11 +1755,13 @@ var agenticSdlc = {
1704
1755
  // grants the human none by default. Bind it after bootstrap with:
1705
1756
  // vectros access grant --principal usr_<your-user-id> --context agentic-sdlc --role editor
1706
1757
  // (or the admin app's Access > Contexts > agentic-sdlc > Profiles > Create).
1707
- // Editor PARITY with the service key (same DATA_PLANE_ACTIONS) so a human
1708
- // curator can browse AND write/correct the KB; still no :d and no control-plane
1709
- // action, so the scope gate accepts it exactly like the accessProfile.
1758
+ // The editor gets the full data plane so a human curator can browse, write/correct,
1759
+ // AND hard-delete the KB (EDITOR_ACTIONS = the service key's set + delete). The
1760
+ // service key deliberately lacks delete and archives instead; the trusted human
1761
+ // owner may permanently remove genuine strays. Still no control-plane action, so
1762
+ // the scope gate accepts it as a data-plane-only role.
1710
1763
  roles: {
1711
- editor: [{ allowedActions: DATA_PLANE_ACTIONS }]
1764
+ editor: [{ allowedActions: EDITOR_ACTIONS }]
1712
1765
  },
1713
1766
  servicePrincipal: {
1714
1767
  externalId: "agentic-sdlc",