filegrc 0.16.3 → 0.16.5
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/package.json +1 -1
- package/src/agent.js +2 -1
- package/src/audit-preparation.js +6 -1
- package/src/cli.js +71 -33
- package/src/index.js +1 -0
- package/src/program-path.js +141 -75
- package/src/program-readiness.js +194 -25
- package/src/reconciliation.js +1 -0
- package/src/retention-schedule-approval.js +5 -5
- package/src/state.js +1 -0
- package/src/web.js +72 -22
- package/src/workflow.js +1 -0
package/src/program-path.js
CHANGED
|
@@ -1,53 +1,103 @@
|
|
|
1
1
|
import { ACTIVE_MODEL_VERSION, modelSupports } from "../model/index.js";
|
|
2
2
|
|
|
3
3
|
export const RESOURCE_INSTRUCTIONS = {
|
|
4
|
-
program: "
|
|
5
|
-
person: "Record
|
|
6
|
-
appointment: "
|
|
7
|
-
team: "
|
|
8
|
-
system: "
|
|
9
|
-
component: "
|
|
10
|
-
vendor: "
|
|
11
|
-
classification: "
|
|
12
|
-
"information-type": "
|
|
13
|
-
framework: "
|
|
14
|
-
requirement: "
|
|
15
|
-
commitment: "Record
|
|
16
|
-
"requirement-mapping": "
|
|
17
|
-
"reporting-route-set": "
|
|
18
|
-
policy: "
|
|
19
|
-
document: "Complete
|
|
20
|
-
control: "
|
|
21
|
-
"complementary-control": "
|
|
22
|
-
evidence: "
|
|
23
|
-
"risk-assessment": "
|
|
24
|
-
risk: "
|
|
25
|
-
obligation: "
|
|
26
|
-
"retention-schedule-item": "
|
|
27
|
-
"obligation-event": "
|
|
28
|
-
"policy-review": "Record
|
|
29
|
-
meeting: "Record
|
|
30
|
-
exception: "Record
|
|
31
|
-
asset: "
|
|
32
|
-
"vendor-review": "
|
|
33
|
-
"access-grant": "Record
|
|
34
|
-
"access-review": "Review access
|
|
35
|
-
"service-account": "
|
|
36
|
-
training: "
|
|
37
|
-
attestation: "Record
|
|
38
|
-
"vulnerability-scan": "Record
|
|
39
|
-
vulnerability: "Track confirmed
|
|
40
|
-
"penetration-test": "Record
|
|
41
|
-
incident: "Record
|
|
42
|
-
"backup-test": "Record
|
|
43
|
-
exercise: "Record
|
|
44
|
-
finding: "
|
|
45
|
-
"action-item": "
|
|
46
|
-
audit: "
|
|
47
|
-
"audit-request": "
|
|
48
|
-
"data-request": "Record
|
|
49
|
-
"control-test": "Record a management
|
|
50
|
-
"audit-population": "Record
|
|
4
|
+
program: "Set the Program goal, owners, Systems, Frameworks, criteria decisions, and risk method.",
|
|
5
|
+
person: "Record the person’s actual job title and current status.",
|
|
6
|
+
appointment: "Assign a named authority to one Person with its start date and scope.",
|
|
7
|
+
team: "Confirm the Team’s members and chair.",
|
|
8
|
+
system: "Define the service boundary, exclusions, owners, and information it handles.",
|
|
9
|
+
component: "Record a material service or evidence source and its role in each linked System.",
|
|
10
|
+
vendor: "Record each material external provider and the Components it supplies.",
|
|
11
|
+
classification: "Confirm the handling categories and apply them to information and evidence.",
|
|
12
|
+
"information-type": "Name a stable category of information, set its default Classification, and link its uses.",
|
|
13
|
+
framework: "Select the criteria Framework and version used by the Program.",
|
|
14
|
+
requirement: "Review whether this criterion applies to the Program and record the decision and rationale.",
|
|
15
|
+
commitment: "Record a real customer or service promise and link the Systems and Controls that fulfill it.",
|
|
16
|
+
"requirement-mapping": "Compare the supplemental source with the Requirement or Control, record the relationship and rationale, then review the source revisions.",
|
|
17
|
+
"reporting-route-set": "Replace the reporting-route placeholders with real normal and fallback channels, name the responsible role, and commit the proposal.",
|
|
18
|
+
policy: "Replace Policy placeholders with actual commitments, then have a separate approver approve the exact Markdown revision.",
|
|
19
|
+
document: "Complete the Document Markdown and intended values, assign an owner, and have a separate approver approve the exact revision.",
|
|
20
|
+
control: "Open this Control’s current next steps. Set up the activity, record how it works, and mark it Implemented when it works.",
|
|
21
|
+
"complementary-control": "Record each real customer or carved-out provider dependency, or confirm that the current scope has none.",
|
|
22
|
+
evidence: "Record a real artifact or approved reference, link its source and supported work, then have another person verify it.",
|
|
23
|
+
"risk-assessment": "Assess the in-scope service, record conclusions, and obtain an independent review.",
|
|
24
|
+
risk: "Name the threat and impact, assign an owner, rate the risk, and record its response.",
|
|
25
|
+
obligation: "Confirm the owner, cadence or trigger, deadline, and proof, then enable the rule when its Control is ready.",
|
|
26
|
+
"retention-schedule-item": "Set the Information Types, scope, cutoff, period, disposition, and sources for one retention rule.",
|
|
27
|
+
"obligation-event": "Record the actual event date and subject, then complete its linked Work Queue actions.",
|
|
28
|
+
"policy-review": "Record the review date, reviewer, decision, and any required follow-up.",
|
|
29
|
+
meeting: "Record attendees, decisions, minutes, and assigned follow-up for the meeting.",
|
|
30
|
+
exception: "Record the scope, owner, approval, and expiry before the departure begins.",
|
|
31
|
+
asset: "Record an important Asset’s owner, custody, location, and status.",
|
|
32
|
+
"vendor-review": "Review one Vendor’s current risk and evidence, then record the decision and follow-up.",
|
|
33
|
+
"access-grant": "Record the approved privilege, recipient, Component, and provisioning or removal dates.",
|
|
34
|
+
"access-review": "Review the current access list, record each decision, and assign the required changes.",
|
|
35
|
+
"service-account": "Record a non-human account’s owner, purpose, System, privilege, and expiry.",
|
|
36
|
+
training: "Complete the content and audience, then have a separate approver approve the exact revision.",
|
|
37
|
+
attestation: "Record the person’s dated acknowledgement of the exact active content revision.",
|
|
38
|
+
"vulnerability-scan": "Record the scan scope, date, result, and supporting evidence.",
|
|
39
|
+
vulnerability: "Track a confirmed weakness through its owner, response, and closure proof.",
|
|
40
|
+
"penetration-test": "Record the test provider, scope, period, results, evidence, and follow-up.",
|
|
41
|
+
incident: "Record the event, response decisions, dates, evidence, and follow-up.",
|
|
42
|
+
"backup-test": "Record the restore target, date, result, evidence, and follow-up.",
|
|
43
|
+
exercise: "Record the scenario, participants, date, result, and follow-up.",
|
|
44
|
+
finding: "Record a confirmed gap that needs its own owner, due date, remediation, and verified closure.",
|
|
45
|
+
"action-item": "Assign separate follow-up with an owner, deadline, source record, and completion proof.",
|
|
46
|
+
audit: "After engaging the CPA firm, record the agreed type, scope, Systems, criteria, and period.",
|
|
47
|
+
"audit-request": "Record the auditor’s request, owner, due date, and approved response.",
|
|
48
|
+
"data-request": "Record the request scope, decision, response, and supporting evidence.",
|
|
49
|
+
"control-test": "Record a management test only when it was performed and reviewed; link its result and evidence.",
|
|
50
|
+
"audit-population": "Record the complete Type 2 population, source query, count, fixed export, and reconciliation."
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export const RESOURCE_OUTPUTS = {
|
|
54
|
+
program: "A Program record with the selected goal, scope, owners, criteria decisions, and risk method.",
|
|
55
|
+
person: "A Person record with their actual job title and current status.",
|
|
56
|
+
appointment: "A dated Appointment that names the holder, authority, and scope.",
|
|
57
|
+
team: "A Team record with its current members and chair.",
|
|
58
|
+
system: "A bounded System record with its services, data, owners, and exclusions.",
|
|
59
|
+
component: "A Component record linked to each System it supports, with a role and rationale.",
|
|
60
|
+
vendor: "A Vendor record for each material provider relationship.",
|
|
61
|
+
classification: "Reviewed handling categories used by the program's records.",
|
|
62
|
+
"information-type": "An Information Type with its default Classification and actual uses.",
|
|
63
|
+
framework: "The Framework and version selected for the Program.",
|
|
64
|
+
requirement: "A reviewed applicability decision on the Program for each selected Requirement.",
|
|
65
|
+
commitment: "A Commitment linked to the Systems and Controls that fulfill it.",
|
|
66
|
+
"requirement-mapping": "A reviewed mapping with its comparison, rationale, and source revisions.",
|
|
67
|
+
"reporting-route-set": "A proposed set of normal and fallback reporting routes with an owner and approval path.",
|
|
68
|
+
policy: "An independently approved Policy bound to its exact Markdown revision.",
|
|
69
|
+
document: "A governed Document with reviewed Markdown, an owner, and a separate approver.",
|
|
70
|
+
control: "An implemented Control with its actual procedure, scope, owner, source, and start date.",
|
|
71
|
+
"complementary-control": "A recorded customer or provider dependency, or a current review confirming none.",
|
|
72
|
+
evidence: "A verified Evidence Artifact linked to its source and supported work.",
|
|
73
|
+
"risk-assessment": "A completed, independently reviewed Risk Assessment with its conclusions.",
|
|
74
|
+
risk: "A rated Risk with an owner, response, and linked treatment Controls.",
|
|
75
|
+
obligation: "An enabled schedule or event rule with an owner, deadline, and required proof.",
|
|
76
|
+
"retention-schedule-item": "A reviewed retention row with its scope, cutoff, period, disposition, and sources.",
|
|
77
|
+
"obligation-event": "A dated Policy Event with its linked Work Queue actions.",
|
|
78
|
+
"policy-review": "A dated review with its decision, reviewer, and follow-up.",
|
|
79
|
+
meeting: "Meeting minutes with attendees, decisions, and assigned follow-up.",
|
|
80
|
+
exception: "A time-limited Exception with approval, scope, and expiry.",
|
|
81
|
+
asset: "An inventory record with the Asset's owner, custody, and status.",
|
|
82
|
+
"vendor-review": "A dated Vendor Review with a decision, evidence, and follow-up.",
|
|
83
|
+
"access-grant": "A current Access Grant showing approval, privilege, and lifecycle dates.",
|
|
84
|
+
"access-review": "A dated Access Review with decisions and assigned changes.",
|
|
85
|
+
"service-account": "A Service Account record with its owner, purpose, privilege, and expiry.",
|
|
86
|
+
training: "Approved Training content bound to its exact revision.",
|
|
87
|
+
attestation: "A person's dated acknowledgement bound to the exact content revision.",
|
|
88
|
+
"vulnerability-scan": "A dated scan record with scope, results, and linked evidence.",
|
|
89
|
+
vulnerability: "A tracked weakness with its owner, response, and closure proof.",
|
|
90
|
+
"penetration-test": "A test record with scope, provider, results, and follow-up.",
|
|
91
|
+
incident: "An Incident record with response decisions, dates, evidence, and follow-up.",
|
|
92
|
+
"backup-test": "A dated restore test with its result, evidence, and follow-up.",
|
|
93
|
+
exercise: "A dated exercise with participants, result, and follow-up.",
|
|
94
|
+
finding: "A confirmed Finding with an owner, due date, remediation, and verified closure.",
|
|
95
|
+
"action-item": "An assigned Action Item with a deadline and completion proof.",
|
|
96
|
+
audit: "An Audit record with the CPA-agreed type, scope, and period.",
|
|
97
|
+
"audit-request": "An owned Audit Request with a due date and approved response.",
|
|
98
|
+
"data-request": "A Data Request record with its scope, decision, and response.",
|
|
99
|
+
"control-test": "A reviewed management Control Test with results and linked evidence.",
|
|
100
|
+
"audit-population": "A reconciled Type 2 population linked to its fixed source export."
|
|
51
101
|
};
|
|
52
102
|
|
|
53
103
|
export const RESOURCE_PAGE_SUMMARIES = {
|
|
@@ -68,7 +118,7 @@ export const RESOURCE_PAGE_SUMMARIES = {
|
|
|
68
118
|
"retention-schedule-item": "Review each structured retention rule.",
|
|
69
119
|
policy: "Tailor the starter Policy and have someone other than its owner approve it.",
|
|
70
120
|
document: "Adapt and approve plans.",
|
|
71
|
-
control: "
|
|
121
|
+
control: "Put each Control in place and record how it works.",
|
|
72
122
|
"complementary-control": "Record customer or provider responsibilities, or confirm there are none.",
|
|
73
123
|
audit: "Record the CPA engagement and scope.",
|
|
74
124
|
"audit-request": "Track fieldwork requests and responses.",
|
|
@@ -82,11 +132,11 @@ export const PROGRAM_PATH = [
|
|
|
82
132
|
number: 1,
|
|
83
133
|
title: "Define Scope",
|
|
84
134
|
description: "Ownership, criteria, and service boundary",
|
|
85
|
-
summary: "
|
|
135
|
+
summary: "A reviewed Program scope with owners, criteria, Systems, and material providers.",
|
|
86
136
|
sections: [
|
|
87
|
-
{ id: "ownership", title: "Program Ownership", description: "Confirm who owns the program, plus the normal security reporting channel and its fallback.", steps: ["Confirm the
|
|
88
|
-
{ id: "criteria", title: "Program and Criteria", description: "Define the Program, confirm its Frameworks, record Program-scoped Requirement applicability, and connect customer commitments that shape the System or Control design.", steps: ["
|
|
89
|
-
{ id: "boundary", title: "System Boundary", description: "Start with the bounded System. Add Components that materially deliver the service, support Controls, produce authoritative Evidence, or support relevant operations. Keep Vendor relationships and specific Assets separate.", steps: ["
|
|
137
|
+
{ id: "ownership", title: "Program Ownership", description: "Confirm who owns the program, plus the normal security reporting channel and its fallback.", steps: ["Confirm the program lead, policy owner, independent reviewer, and oversight team.", "Replace the reporting-channel placeholders with real normal and fallback routes, then commit the proposal."], types: ["person", "appointment", "team", "reporting-route-set"], defaultOpen: true },
|
|
138
|
+
{ id: "criteria", title: "Program and Criteria", description: "Define the Program, confirm its Frameworks, record Program-scoped Requirement applicability, and connect customer commitments that shape the System or Control design.", steps: ["Set the Program goal, owners, risk method, and tentative timing.", "Review each selected criterion for this service and record its applicability decision.", "Replace the starter Commitment prompt with the real promise; add only needed supplemental mappings."], types: ["program", "framework", "requirement", "commitment", "requirement-mapping"], defaultOpen: true },
|
|
139
|
+
{ id: "boundary", title: "System Boundary", description: "Start with the bounded System. Add Components that materially deliver the service, support Controls, produce authoritative Evidence, or support relevant operations. Keep Vendor relationships and specific Assets separate.", steps: ["Define the service and exclusions in a bounded System selected by the Program.", "Add material Components and Vendors with their actual System relationships.", "Record the Information Types and Classifications the service uses."], types: ["system", "component", "vendor", "classification", "information-type"], defaultOpen: false }
|
|
90
140
|
],
|
|
91
141
|
resourceTypes: ["person", "appointment", "team", "reporting-route-set", "program", "framework", "requirement", "commitment", "requirement-mapping", "system", "component", "vendor", "classification", "information-type"],
|
|
92
142
|
commands: [
|
|
@@ -108,10 +158,10 @@ export const PROGRAM_PATH = [
|
|
|
108
158
|
number: 2,
|
|
109
159
|
title: "Approve Policies",
|
|
110
160
|
description: "Approve governed content and retention decisions",
|
|
111
|
-
summary: "
|
|
161
|
+
summary: "Approved Policies, program Documents, Training content, and retention decisions.",
|
|
112
162
|
sections: [
|
|
113
|
-
{ id: "policy-content", title: "Policies", description: "
|
|
114
|
-
{ id: "retention", title: "Data Retention Schedule", description: "
|
|
163
|
+
{ id: "policy-content", title: "Policies", description: "Approve the program's governing content.", instructions: "Open each Policy, program Document, and Training record. Replace placeholders, confirm the owner and intended values, then have a separate person approve the exact Markdown revision.", output: "Approved content bound to the reviewed revisions.", steps: ["Replace placeholders with the company's real rules, plans, and training material.", "Confirm the owner, separate approver, linked Controls, audience, and intended values.", "Record the independent approval and date against each exact Markdown revision."], types: [], relatedLinks: [{ type: "policy", label: "Policies", href: "#/policies" }], defaultOpen: true },
|
|
164
|
+
{ id: "retention", title: "Data Retention Schedule", description: "Approve the schedule document and its completed rows together.", steps: ["Review the governing schedule and any legal hold or exception rules.", "Complete a row for each distinct information use, cutoff, retention period, and disposition.", "Have a separate reviewer approve the complete document and row set."], types: [], utility: "retention-schedule", defaultOpen: true }
|
|
115
165
|
],
|
|
116
166
|
resourceTypes: [],
|
|
117
167
|
supportingResourceTypes: ["policy", "document", "training", "retention-schedule-item"],
|
|
@@ -132,12 +182,12 @@ export const PROGRAM_PATH = [
|
|
|
132
182
|
number: 3,
|
|
133
183
|
title: "Implement Controls",
|
|
134
184
|
description: "Implement and prepare to operate",
|
|
135
|
-
summary: "
|
|
185
|
+
summary: "Implemented Controls with ready evidence sources and enabled work schedules.",
|
|
136
186
|
sections: [
|
|
137
|
-
{ id: "controls", title: "Controls", description: "
|
|
138
|
-
{ id: "complementary-controls", title: "Complementary Controls", description: "Record customer or provider responsibilities that form part of the implementation boundary, or confirm there are none.", steps: ["
|
|
139
|
-
{ id: "evidence-sources", title: "Evidence Sources", description: "Check that every Control points to an authoritative source that can produce its expected evidence.", steps: ["
|
|
140
|
-
{ id: "obligations", title: "Obligations", description: "Configure the calendar and event schedules that operate the Controls.", steps: ["
|
|
187
|
+
{ id: "controls", title: "Controls", description: "Put each selected Control into use and record what is actually in place.", steps: ["Open each Control for its specific setup action and current missing checks.", "Configure the activity and record its procedure, Systems, owner, and evidence sources.", "Mark it Implemented with its real start date after its sources and schedules are ready."], types: ["control"], defaultOpen: true },
|
|
188
|
+
{ id: "complementary-controls", title: "Complementary Controls", description: "Record customer or provider responsibilities that form part of the implementation boundary, or confirm there are none.", steps: ["Identify any customer or carved-out provider action an in-scope Control depends on.", "Record each dependency, or confirm that the current scope has none."], types: ["complementary-control"], defaultOpen: true },
|
|
189
|
+
{ id: "evidence-sources", title: "Evidence Sources", description: "Check that every Control points to an authoritative source that can produce its expected evidence.", steps: ["For each Control family, link an active Component with the required source kind, access owners, and retrieval instructions."], types: [], utility: "evidence-sources", defaultOpen: true },
|
|
190
|
+
{ id: "obligations", title: "Obligations", description: "Configure the calendar and event schedules that operate the Controls.", steps: ["Check the owner, trigger or cadence, due window, and required proof for each Obligation.", "Enable the rules that will run the implemented Controls."], types: ["obligation"], defaultOpen: true }
|
|
141
191
|
],
|
|
142
192
|
resourceTypes: ["control", "complementary-control", "obligation"],
|
|
143
193
|
commands: [
|
|
@@ -160,17 +210,17 @@ export const PROGRAM_PATH = [
|
|
|
160
210
|
number: 4,
|
|
161
211
|
title: "Operate the Program",
|
|
162
212
|
description: "Run the work and retain dated proof",
|
|
163
|
-
summary: "
|
|
213
|
+
summary: "Dated operating records and linked proof for work actually performed.",
|
|
164
214
|
sections: [
|
|
165
|
-
{ id: "risk", title: "Risk", description: "Maintain the program’s risk assessments and risk register as the service, threats, suppliers, and control needs change.", steps: ["Complete and approve
|
|
166
|
-
{ id: "queue", title: "Work Queue", description: "Complete recurring occurrences, Policy Event tasks, and assigned follow-up within their required windows.", steps: ["Complete due
|
|
167
|
-
{ id: "evidence", title: "Evidence Artifacts", description: "Create records only for real exports, reports, screenshots, signed files, or approved external references collected during operation.", steps: ["Create an Evidence Artifact when
|
|
168
|
-
{ id: "governance", title: "Governance", description: "Record formal reviews, oversight meetings, and approved policy or control exceptions.", steps: ["Complete scheduled policy reviews and oversight meetings.", "
|
|
169
|
-
{ id: "inventories", title: "Assets and Vendors", description: "Maintain the asset inventory and recurring reviews of supplier relationships during operation.", steps: ["Keep
|
|
170
|
-
{ id: "access-training", title: "Access and Training Completion", description: "Inventory service accounts and retain access decisions, Training assignments, and acknowledgements produced during operation.", steps: ["Catalog
|
|
171
|
-
{ id: "security", title: "Security Operations", description: "Record vulnerability work, applicable penetration testing, and incident response activity for the period.", steps: ["
|
|
172
|
-
{ id: "resilience", title: "Resilience", description: "Preserve proof that backups, restoration, continuity, and incident exercises work as designed.", steps: ["
|
|
173
|
-
{ id: "issues", title: "Issues and Remediation", description: "Keep observations in the source report and track only confirmed gaps that need a separate remediation lifecycle.", steps: ["Create a Finding
|
|
215
|
+
{ id: "risk", title: "Risk", description: "Maintain the program’s risk assessments and risk register as the service, threats, suppliers, and control needs change.", steps: ["Complete and approve the required Risk Assessments.", "Record each risk that needs a response, owner, and treatment Controls."], types: ["risk-assessment", "risk"], defaultOpen: true },
|
|
216
|
+
{ id: "queue", title: "Work Queue", description: "Complete recurring occurrences, Policy Event tasks, and assigned follow-up within their required windows.", steps: ["Complete due Work Queue occurrences with dated proof.", "Trigger a Policy Event when its real-world event occurs, then complete the linked Action Items."], types: ["obligation-event", "data-request"], utility: "obligation-board", defaultOpen: true },
|
|
217
|
+
{ id: "evidence", title: "Evidence Artifacts", description: "Create records only for real exports, reports, screenshots, signed files, or approved external references collected during operation.", steps: ["Create an Evidence Artifact only when a real file or approved external reference exists.", "Link its source Component, supported Controls and work record, and fixed artifact or reference.", "Record the collector and Classification, then verify the artifact."], types: ["evidence"], defaultOpen: true },
|
|
218
|
+
{ id: "governance", title: "Governance", description: "Record formal reviews, oversight meetings, and approved policy or control exceptions.", steps: ["Complete scheduled policy reviews and oversight meetings with decisions and evidence.", "Create separate Action Items only for follow-up with its own owner and deadline.", "Approve any time-limited Exception before the departure begins."], types: ["policy-review", "meeting", "exception"], defaultOpen: false },
|
|
219
|
+
{ id: "inventories", title: "Assets and Vendors", description: "Maintain the asset inventory and recurring reviews of supplier relationships during operation.", steps: ["Keep important Assets and Vendor relationships current.", "Complete Vendor Reviews on schedule or after material changes, with a decision and evidence."], types: ["asset", "vendor-review"], defaultOpen: false },
|
|
220
|
+
{ id: "access-training", title: "Access and Training Completion", description: "Inventory service accounts and retain access decisions, Training assignments, and acknowledgements produced during operation.", steps: ["Catalog Service Accounts that need separate tracking.", "Record access decisions and removals as they occur; complete scheduled Access Reviews.", "Keep Training assignments and Attestations tied to the exact active content revision."], types: ["service-account", "access-grant", "access-review", "attestation"], defaultOpen: false },
|
|
221
|
+
{ id: "security", title: "Security Operations", description: "Record vulnerability work, applicable penetration testing, and incident response activity for the period.", steps: ["Record required scans and tests with their real scope, results, and evidence.", "Track confirmed weaknesses and their remediation.", "Start the Incident workflow when a qualifying event occurs."], types: ["vulnerability-scan", "vulnerability", "penetration-test", "incident"], defaultOpen: false },
|
|
222
|
+
{ id: "resilience", title: "Resilience", description: "Preserve proof that backups, restoration, continuity, and incident exercises work as designed.", steps: ["Run scheduled restore tests and continuity or incident exercises.", "Record the result and evidence, then assign follow-up for failed objectives."], types: ["backup-test", "exercise"], defaultOpen: false },
|
|
223
|
+
{ id: "issues", title: "Issues and Remediation", description: "Keep observations in the source report and track only confirmed gaps that need a separate remediation lifecycle.", steps: ["Create a Finding for a confirmed gap that needs a separate owner, deadline, or closure review.", "Use Action Items only for separately assigned tasks.", "Close the Finding after remediation is independently verified."], types: ["finding"], defaultOpen: false }
|
|
174
224
|
],
|
|
175
225
|
resourceTypes: [
|
|
176
226
|
"risk-assessment",
|
|
@@ -238,10 +288,10 @@ export const PROGRAM_PATH = [
|
|
|
238
288
|
number: 5,
|
|
239
289
|
title: "Audit",
|
|
240
290
|
description: "Firm, formal period, fieldwork, and report",
|
|
241
|
-
summary: "
|
|
291
|
+
summary: "A CPA engagement record and a reviewable, period-bound evidence packet.",
|
|
242
292
|
sections: [
|
|
243
|
-
{ id: "engagement", title: "Engagement", description: "Record the actual CPA engagement, formal scope and dates, requests, and management responses.", steps: ["
|
|
244
|
-
{ id: "fieldwork", title: "Fieldwork", description: "
|
|
293
|
+
{ id: "engagement", title: "Engagement", description: "Record the actual CPA engagement, formal scope and dates, requests, and management responses.", steps: ["After engaging the CPA firm, create the Audit with its agreed type, scope, and date or period.", "Track firm requests with owners, due dates, and approved responses."], types: ["audit", "audit-request"], defaultOpen: true },
|
|
294
|
+
{ id: "fieldwork", title: "Fieldwork", description: "Complete engagement documents, populations, requests, and the evidence packet.", steps: ["Complete engagement Documents and, for Type 2, reconcile each population to its fixed export.", "Review dated operating records and verified Evidence Artifacts for the agreed period; link samples and answer requests.", "Build and review the indexed packet from a clean Git revision."], types: ["audit-population", "control-test"], relatedLinks: [{ type: "document", label: "Audit Documents", href: "#/resources/document?stage=audit&documentScope=audit", summary: "Complete and approve engagement Documents, then link the required ones from each Audit.", instructions: "Complete each required engagement Document, link it from its Audit, obtain separate approval of the exact Markdown revision, then activate that approved revision for that Audit.", output: "Active Audit Documents linked to their Audits and bound to their approved revisions." }], utility: "audit-packet", defaultOpen: true }
|
|
245
295
|
],
|
|
246
296
|
resourceTypes: ["audit", "audit-request", "audit-population", "control-test"],
|
|
247
297
|
utilities: [
|
|
@@ -257,9 +307,12 @@ export const PROGRAM_PATH = [
|
|
|
257
307
|
],
|
|
258
308
|
commands: [
|
|
259
309
|
"filegrc guide audit --json",
|
|
310
|
+
"filegrc guide document --json",
|
|
311
|
+
"filegrc list document --json",
|
|
260
312
|
"filegrc scaffold audit --title \"YEAR SOC 2 TYPE\"",
|
|
261
313
|
"filegrc create AUDIT-MUTATION.json --json",
|
|
262
314
|
"filegrc prepare-audit AUDIT_ID --json",
|
|
315
|
+
"filegrc activate-documents --scaffold --audit AUDIT_ID",
|
|
263
316
|
"filegrc audit-readiness AUDIT_ID --json",
|
|
264
317
|
"filegrc evidence-packet --audit AUDIT_ID --preview --json"
|
|
265
318
|
]
|
|
@@ -321,14 +374,27 @@ export function buildAgentProgramPath(model) {
|
|
|
321
374
|
title: definition.pluralTitle,
|
|
322
375
|
summary: RESOURCE_PAGE_SUMMARIES[type] || definition.description,
|
|
323
376
|
instructions: RESOURCE_INSTRUCTIONS[type] || definition.description,
|
|
377
|
+
output: RESOURCE_OUTPUTS[type] || `A validated ${definition.title} record.`,
|
|
324
378
|
use: definition.description,
|
|
325
379
|
policyBasis: definition.guidance.policyBasis,
|
|
326
380
|
guide: `npx filegrc guide ${type} --json`,
|
|
327
381
|
list: `npx filegrc list ${type} --json`
|
|
328
382
|
};
|
|
329
383
|
});
|
|
384
|
+
const relatedPages = stage.sections.flatMap((section) => section.relatedLinks || [])
|
|
385
|
+
.filter((link) => link.instructions)
|
|
386
|
+
.map((link, index) => ({
|
|
387
|
+
order: `${stage.number}.${String.fromCharCode(97 + stage.resourceTypes.length + index)}`,
|
|
388
|
+
type: link.type,
|
|
389
|
+
title: link.label,
|
|
390
|
+
summary: link.summary,
|
|
391
|
+
instructions: link.instructions,
|
|
392
|
+
output: link.output,
|
|
393
|
+
guide: `npx filegrc program-path --json`,
|
|
394
|
+
list: `npx filegrc list ${link.type} --json`
|
|
395
|
+
}));
|
|
330
396
|
const utilityPages = (stage.utilities || []).map((utility, index) => ({
|
|
331
|
-
order: stage.id === "run" ? null : `${stage.number}.${String.fromCharCode(97 + stage.resourceTypes.length + index)}`,
|
|
397
|
+
order: stage.id === "run" ? null : `${stage.number}.${String.fromCharCode(97 + stage.resourceTypes.length + relatedPages.length + index)}`,
|
|
332
398
|
utility: utility.id,
|
|
333
399
|
title: utility.title,
|
|
334
400
|
summary: utility.summary,
|
|
@@ -340,7 +406,7 @@ export function buildAgentProgramPath(model) {
|
|
|
340
406
|
return {
|
|
341
407
|
...stage,
|
|
342
408
|
commands: stage.commands.map(agentCommand),
|
|
343
|
-
pages: stage.id === "run" ? utilityPages : [...resourcePages, ...utilityPages],
|
|
409
|
+
pages: stage.id === "run" ? utilityPages : [...resourcePages, ...relatedPages, ...utilityPages],
|
|
344
410
|
...(stage.id === "run" ? { operatingRecords: resourcePages } : {})
|
|
345
411
|
};
|
|
346
412
|
});
|