From 923d34f2c3d384f4a935c0fec935075c32ad6380 Mon Sep 17 00:00:00 2001 From: Travis Salas Cox Date: Sun, 26 Apr 2026 12:29:14 -0500 Subject: [PATCH 1/3] Make all generated content Status aware so that we can start to deal with proposed vs accepted vs deprecated components and specifications. --- .gitignore | 4 + assessments/FinOps Foundation/assessment.xlsx | Bin 36012 -> 29638 bytes assessments/FinOps Foundation/framework.md | 430 +----------------- .../history/2026-04-26.json.gz | Bin 0 -> 8276 bytes assessments/FinOps++/assessment.xlsx | Bin 35395 -> 29552 bytes assessments/FinOps++/framework.md | 394 +--------------- .../FinOps++/history/2026-04-26.json.gz | Bin 0 -> 8469 bytes components/actions/001.md | 2 + components/actions/002.md | 2 + components/actions/003.md | 2 + components/actions/004.md | 2 + components/actions/005.md | 2 + components/actions/006.md | 2 + components/actions/007.md | 2 + components/actions/008.md | 2 + components/actions/009.md | 2 + components/actions/010.md | 2 + components/actions/011.md | 2 + components/actions/012.md | 2 + components/actions/013.md | 2 + components/actions/014.md | 2 + components/actions/015.md | 2 + components/actions/016.md | 2 + components/actions/017.md | 2 + components/actions/018.md | 2 + components/actions/019.md | 2 + components/actions/020.md | 2 + components/actions/021.md | 2 + components/actions/022.md | 2 + components/actions/023.md | 2 + components/actions/024.md | 2 + components/actions/025.md | 2 + components/actions/026.md | 2 + components/actions/027.md | 2 + components/actions/028.md | 2 + components/actions/029.md | 2 + components/actions/030.md | 2 + components/actions/031.md | 2 + components/actions/032.md | 2 + components/actions/033.md | 2 + components/actions/034.md | 2 + components/actions/035.md | 2 + components/actions/036.md | 2 + components/actions/037.md | 2 + components/actions/038.md | 2 + components/actions/039.md | 2 + components/actions/040.md | 2 + components/actions/041.md | 2 + components/actions/042.md | 2 + components/actions/043.md | 2 + components/actions/044.md | 2 + components/actions/045.md | 2 + components/actions/046.md | 2 + components/actions/047.md | 2 + components/actions/048.md | 2 + components/actions/049.md | 2 + components/actions/050.md | 2 + components/actions/051.md | 2 + components/actions/052.md | 2 + components/actions/053.md | 2 + components/actions/054.md | 2 + components/actions/055.md | 2 + components/actions/056.md | 2 + components/actions/057.md | 2 + components/actions/058.md | 2 + components/actions/059.md | 2 + components/actions/060.md | 2 + components/actions/061.md | 2 + components/actions/062.md | 2 + components/actions/063.md | 2 + components/actions/064.md | 2 + components/actions/065.md | 2 + components/actions/066.md | 2 + components/actions/067.md | 2 + components/actions/068.md | 2 + components/actions/069.md | 2 + components/actions/070.md | 2 + components/actions/071.md | 2 + components/actions/072.md | 2 + components/actions/073.md | 2 + components/actions/074.md | 2 + components/actions/075.md | 2 + components/actions/076.md | 2 + components/actions/077.md | 2 + components/actions/078.md | 2 + components/actions/079.md | 2 + components/actions/080.md | 2 + components/actions/081.md | 2 + components/actions/082.md | 2 + components/actions/083.md | 2 + components/actions/084.md | 2 + components/actions/085.md | 2 + components/actions/086.md | 2 + components/actions/087.md | 2 + components/actions/088.md | 2 + components/actions/089.md | 2 + components/actions/090.md | 2 + components/actions/091.md | 2 + components/actions/092.md | 2 + components/actions/093.md | 2 + components/actions/094.md | 2 + components/actions/095.md | 2 + components/actions/096.md | 2 + components/actions/097.md | 2 + components/actions/098.md | 2 + components/actions/099.md | 2 + components/actions/100.md | 2 + components/actions/101.md | 2 + components/actions/102.md | 2 + components/actions/103.md | 2 + components/actions/104.md | 2 + components/actions/105.md | 2 + components/actions/106.md | 2 + components/actions/107.md | 2 + components/actions/108.md | 2 + components/actions/109.md | 2 + components/actions/110.md | 2 + components/actions/111.md | 2 + components/actions/112.md | 2 + components/actions/113.md | 2 + components/actions/114.md | 2 + components/actions/115.md | 2 + components/actions/116.md | 2 + components/actions/117.md | 2 + components/actions/118.md | 2 + components/actions/119.md | 2 + components/actions/120.md | 2 + components/actions/121.md | 2 + components/actions/122.md | 2 + components/actions/123.md | 2 + components/actions/124.md | 2 + components/actions/125.md | 2 + components/actions/126.md | 2 + components/actions/127.md | 2 + components/actions/128.md | 2 + components/actions/129.md | 2 + components/actions/130.md | 2 + components/actions/131.md | 2 + components/actions/132.md | 2 + components/actions/133.md | 2 + components/actions/134.md | 2 + components/actions/135.md | 2 + components/actions/136.md | 2 + components/actions/137.md | 2 + components/actions/138.md | 2 + components/actions/139.md | 2 + components/capabilities/001.md | 2 + components/capabilities/002.md | 2 + components/capabilities/003.md | 2 + components/capabilities/004.md | 2 + components/capabilities/005.md | 2 + components/capabilities/006.md | 2 + components/capabilities/007.md | 2 + components/capabilities/008.md | 2 + components/capabilities/009.md | 2 + components/capabilities/010.md | 2 + components/capabilities/011.md | 2 + components/capabilities/012.md | 2 + components/capabilities/013.md | 2 + components/capabilities/014.md | 2 + components/capabilities/015.md | 2 + components/capabilities/016.md | 2 + components/capabilities/017.md | 2 + components/capabilities/018.md | 2 + components/capabilities/019.md | 2 + components/capabilities/020.md | 2 + components/capabilities/021.md | 2 + components/capabilities/022.md | 2 + components/capabilities/023.md | 2 + components/domains/001.md | 2 + components/domains/002.md | 2 + components/domains/003.md | 2 + components/domains/004.md | 2 + components/profiles/001.md | 2 + components/profiles/002.md | 2 + tools/commands/generate/group.py | 52 ++- tools/commands/generate/helpers.py | 21 +- tools/composers/archive.py | 4 +- tools/composers/excel.py | 4 +- tools/composers/markdown.py | 4 +- tools/templates/actions.md.j2 | 2 + tools/templates/capabilities.md.j2 | 2 + tools/templates/domains.md.j2 | 2 + tools/templates/profiles.md.j2 | 2 + tools/tests/test_assessment_generation.py | 6 +- 185 files changed, 429 insertions(+), 834 deletions(-) create mode 100644 assessments/FinOps Foundation/history/2026-04-26.json.gz create mode 100644 assessments/FinOps++/history/2026-04-26.json.gz diff --git a/.gitignore b/.gitignore index 5fbbe5b9..c3b90772 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,10 @@ # output extensions to ignore *.ods +# suffixes to ignore +*-proposed* +*-deprecated* + # Python related things to ignore build/ finopspp.egg-info/ diff --git a/assessments/FinOps Foundation/assessment.xlsx b/assessments/FinOps Foundation/assessment.xlsx index cfffe537f2e8aeaf5b98cac17edb0a20732fad2c..e9e07cb68cd9f0ae0ab9aa5bafe88b7c753d8748 100644 GIT binary patch delta 18516 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 U1NO;Q$cZE1OtS8hrlaEEKiPNRkN^Mx delta 24864 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 HznuRMCo89k diff --git a/assessments/FinOps Foundation/framework.md b/assessments/FinOps Foundation/framework.md index 319d1b0f..3ed8505b 100644 --- a/assessments/FinOps Foundation/framework.md +++ b/assessments/FinOps Foundation/framework.md @@ -1,6 +1,6 @@ # 001: FinOps Foundation Maturity Assessment Framework -**Creation Date:** 2026-04-12 +**Creation Date:** 2026-04-26 **Specification Version:** 1.0.0 @@ -28,36 +28,12 @@ Classic profile featuring controls provided by the finops foundation - - - - - - - - - - - -
- 102: Draft Cloud Financial Policies -

Specification Version: 0.7.0

-
- 103: Publish Guidelines & Guardrails -

Specification Version: 0.7.0

-
- 104: Educate Stakeholders on Policy -

Specification Version: 0.7.0

-
105: Monitor Compliance & Report Breaches

Specification Version: 1.7.0

- 106: Iterate Policies Based on Feedback -

Specification Version: 0.7.0

-
@@ -92,12 +68,6 @@ Classic profile featuring controls provided by the finops foundation

Specification Version: 1.0.0

- - - 117: Reassess Progress & Update Priorities -

Specification Version: 0.7.0

- - @@ -108,36 +78,12 @@ Classic profile featuring controls provided by the finops foundation - - - - - - - - - - - -
- 097: Assess Skills & Training Needs -

Specification Version: 0.8.0

-
- 098: Develop Role-Based Learning Content -

Specification Version: 0.8.0

-
- 099: Offer Certifications & Informal Learning -

Specification Version: 0.8.0

-
100: Leverage Vendor Training Resources

Specification Version: 1.7.0

- 101: Track Training Impact & Refresh Content -

Specification Version: 0.8.0

-
@@ -154,36 +100,6 @@ Classic profile featuring controls provided by the finops foundation

Specification Version: 1.7.0

- - - 092: Create Implementation Roadmap -

Specification Version: 0.8.0

- - - - - 093: Integrate Cost Data in Workflows -

Specification Version: 0.8.0

- - - - - 094: Publish FinOps KPIs -

Specification Version: 0.8.0

- - - - - 095: Drive Stakeholder Engagement -

Specification Version: 0.8.0

- - - - - 096: Automate Tasks & Review Maturity -

Specification Version: 0.8.0

- - @@ -194,16 +110,10 @@ Classic profile featuring controls provided by the finops foundation - - - @@ -218,12 +128,6 @@ Classic profile featuring controls provided by the finops foundation

Specification Version: 1.7.0

- - -
- 124: Assess Tooling Needs & Criteria -

Specification Version: 0.7.0

-
125: Evaluate Build vs Buy Options -

Specification Version: 2.0.0

+

Specification Version: 2.0.1

- 128: Monitor Adoption & Iterate Tools -

Specification Version: 0.7.0

-
@@ -280,36 +184,12 @@ Classic profile featuring controls provided by the finops foundation - - - - - - - - - - - - - - - - - - - - -
- 107: Map Invoices to Allocation Model -

Specification Version: 0.8.0

-
- 108: Reconcile Rates & Track Completion -

Specification Version: 0.8.0

-
109: Design Chargeback with Finance

Specification Version: 1.7.0

- 110: Automate Chargeback Data Flows -

Specification Version: 0.8.0

-
- 111: Distribute Reports & Track Accuracy -

Specification Version: 0.8.0

-
112: Resolve Variances & Increase Coverage @@ -332,24 +212,6 @@ Classic profile featuring controls provided by the finops foundation

Specification Version: 1.0.0

- 137: Define Decision Rights & Guardrails -

Specification Version: 0.0.1

-
- 138: Build Multi-Year Investment Forecast -

Specification Version: 0.0.1

-
- 139: Establish Decision Support Cadence -

Specification Version: 0.0.1

-
@@ -388,60 +250,12 @@ Classic profile featuring controls provided by the finops foundation

Specification Version: 1.7.0

- - - 064: Implement Iteratively & Measure Results -

Specification Version: 0.7.0

- - - - - 065: Publish Benefits & Update References -

Specification Version: 0.7.0

- - - - - 066: Strengthen Architecture Collaboration -

Specification Version: 0.7.0

- - - - - 118: Create Workload Selection Criteria -

Specification Version: 0.8.0

- - - - - 119: Define Success Criteria & Scope -

Specification Version: 0.8.0

- - 120: Enforce Tagging at Onboarding

Specification Version: 1.7.0

- - - 121: Align Timelines with Budgets -

Specification Version: 0.8.0

- - - - - 122: Start with Lower Environments -

Specification Version: 0.8.0

- - - - - 123: Review Outcomes & Adjust Patterns -

Specification Version: 0.8.0

- - @@ -452,42 +266,6 @@ Classic profile featuring controls provided by the finops foundation - - - - - - - - - - - - - - - - - -
- 085: Aggregate Emissions Data -

Specification Version: 0.6.0

-
- 086: Define Sustainability Metrics -

Specification Version: 0.6.0

-
- 087: Carbon Impact Workload Decisions -

Specification Version: 0.6.0

-
- 088: Carbon Aware Data Guidance -

Specification Version: 0.6.0

-
- 089: Sustainability Data Continuous Improvement -

Specification Version: 0.6.0

-
- 090: Tie Sustainability to Cost Efficiency -

Specification Version: 0.6.0

-
@@ -504,36 +282,12 @@ Classic profile featuring controls provided by the finops foundation

Specification Version: 1.7.0

- - - 074: Document Licensing Models -

Specification Version: 0.8.0

- - - - - 075: Integrate Billing with Procurement -

Specification Version: 0.8.0

- - 076: Validate Utilization & Remediate

Specification Version: 1.7.0

- - - 077: Influence Workload Design Choices -

Specification Version: 0.8.0

- - - - - 078: Publish License Spend & Utilization -

Specification Version: 0.8.0

- - @@ -556,24 +310,6 @@ Classic profile featuring controls provided by the finops foundation

Specification Version: 1.7.0

- - - 081: Purchase Commitments Regularly -

Specification Version: 0.7.0

- - - - - 082: Track ROI & Notify Owners -

Specification Version: 0.7.0

- - - - - 083: Allocate Upfront Costs Transparently -

Specification Version: 0.7.0

- - 084: Leverage Spot & Negotiated Discounts @@ -590,12 +326,6 @@ Classic profile featuring controls provided by the finops foundation - - - - - - - - - - - -
- 067: Define Optimization Strategy -

Specification Version: 0.8.0

-
068: Inventory & Classify Workloads @@ -608,24 +338,6 @@ Classic profile featuring controls provided by the finops foundation

Specification Version: 1.7.0

- 070: Partner on Scheduling Actions -

Specification Version: 0.8.0

-
- 071: Gamify Adoption & Celebrate Wins -

Specification Version: 0.8.0

-
- 072: Track KPIs & Document Playbooks -

Specification Version: 0.8.0

-
@@ -646,42 +358,12 @@ Classic profile featuring controls provided by the finops foundation - - - - - - - - - - - - - - -
- 049: Select KPIs & Measurement Scope -

Specification Version: 0.7.0

-
- 050: Validate Tagging for Comparability -

Specification Version: 0.7.0

-
- 051: Choose Internal vs External Benchmarks -

Specification Version: 0.7.0

-
- 052: Stand Up Internal Benchmarking -

Specification Version: 0.7.0

-
053: Track Trends & Compare Over Time

Specification Version: 1.7.0

- 054: Translate Gaps to Initiatives -

Specification Version: 0.7.0

-
@@ -704,30 +386,6 @@ Classic profile featuring controls provided by the finops foundation

Specification Version: 1.7.0

- - - 045: Increase Shared Cost Coverage -

Specification Version: 0.8.0

- - - - - 046: Publish Budget vs Actual Reports -

Specification Version: 0.8.0

- - - - - 047: Automate Budget Threshold Alerts -

Specification Version: 0.8.0

- - - - - 048: Review & Adapt Budget Strategy -

Specification Version: 0.8.0

- - @@ -738,12 +396,6 @@ Classic profile featuring controls provided by the finops foundation - - - - - -
- 037: Establish Forecasting Approach -

Specification Version: 0.7.0

-
038: Collect Business Drivers Regularly @@ -928,12 +580,6 @@ Classic profile featuring controls provided by the finops foundation

Specification Version: 1.7.0

- 015: Iterate Strategies & Communicate -

Specification Version: 0.7.0

-
@@ -962,30 +608,12 @@ Classic profile featuring controls provided by the finops foundation

Specification Version: 1.7.0

- - - 026: Record Anomaly Context & Timeline -

Specification Version: 0.7.0

- - - - - 027: Analyze Root Causes & Fix Issues -

Specification Version: 0.7.0

- - 028: Track Metrics & Avoidance Rates

Specification Version: 1.7.0

- - - 029: Tune Thresholds to Reduce Noise -

Specification Version: 0.7.0

- - @@ -996,36 +624,12 @@ Classic profile featuring controls provided by the finops foundation - - - - - - - - - - - - - - - diff --git a/assessments/FinOps Foundation/history/2026-04-26.json.gz b/assessments/FinOps Foundation/history/2026-04-26.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..0c47c455fed654b0ab0ea2f4378f23bb6658c62c GIT binary patch literal 8276 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 z zuK`X_pAu`fOpqPG7=TrXWUjJXnc5*(J)kzX;V!i76a{9iSJkt@g%p+8IwIEIXhn8c z!TA3MSK+Zil08lPKzK~~KtB#gnpn?r%>hZ*uS!aTJo-ithYeA&90V%QmCd;)OTu^R zBL5oCOJ26RvS#Z`Tp~M#pUhp_;u>oz`FG|Cx;fmlB$L994sH$NJp3HjLj!-hrlv## zr87Gh!biRQ0wbk@q1Grxvnj+5Lh7s{T^%s`>bNVBQ({2})KXBcg3R!;pbB8rfYBbi z#UfX9_U9|d-V+nr=Io>VF$K%@6jT#41PywglmfP;H!obP3Y?*V+PdAR^}|DPYeUc^ z!+Tt6yA>MrKaWpy<7WjXS4*EKDWunCe%V{IA-&Q{{Bhl`prAj9JOBdV_5y|{-AF?`yLN=|XpG5o~+#_j6{9ht~Lqvb278poU_`lwbt zGjWGPBHjCbO#AMFM7qDAX@59}W&b!6*jt_nZ~+8~8ESxj;`>@PFoFFg+kyZONK2sT zWK4~0kkARys(W$hE)q1oe3*w2TUqIct^(=rf%1Xq`j{Gx^{N0&#yv==VaUj6>K<9G z%BYMQPslrhR!d;97UZw4ujZv%c()JmD4mR52QL(Ot|^pFfaHEqV2J|p%RcaoJ~`zb z7mTbogO+kDa61)pxhL2v!YY6nTdY>ev~BfBrS0hin~M@#rL`!VYs~xM`&dnK*Qv{m z*1_Dy-nCn~>LXom0kklD%QL8R+8NS1tBz<0zTF1wL1d#I*Hg_zt3GbEFu;mWe0zKX zbu!!I;Mf+|uZb(x*%~;-!IGT9b-7X=>nnVr&Vae*W|&y0Lq6)DXdhio)PKhlf1PAW zG;(~1UZzqKYU@xog(E&J32Iyr_=wWnZ4JPR-2Hc9drRN;jk6)S&*eZ>S1k-B-8y6a zWqik2*rE#zI++!|N$Ax?gIj>41STHVO}Qd4yx6R|G^__J{ljEo%nadh?^#hWb~^`c z<4#dzTJ&Uu774zKdkLJ2A8S=cC2nR5>(s0I4z`6s$$%#*t5B`9^`!_9<5EG3!{BnV zGs?YvBmt>=xLnV}S}YdniS=5G&O}MpXF+CQ)rQL!l5b;= z58W@dqMf<3Wt|xksJg%Erc95$?XREFJT)e;osh~Hw~&zr!iR#a_(EiBE?FqGJG)To zW7WBQslH5edb^IiH96bU1-wv_@Lm&t(V)cwnT==E(Ja&L?S<{3hVuF6Or}_9fw5BD zieG@{8F;?b!$LN6kok)~*G&fW3sM{`ezG+pG?B9wiSHJM@dK0JnjFYh2L8n=QwHD9 zb|CZ%t*d+M{T{KlP+x~I2Us{jvGGT_pl%|d?R-p^><>RC*UK7TF7+@n>@1TJ|1ovm zm)I|Lc`i~C%5DBTkcx1hTm7I@5{%t#D659<*t6MxD*&b_oxsw@SB~TXXZD~ zfeR`+8VF>)+wM+2#Vxo}$z=dtRZaVE{giB$fZfA&R5}c7^>k5LEuJZTeOB^yc!|H! z%yr6gSFks6l4bJy&sB!Z*@p27Vine5OnzuQ1un@))_;nu|H3J)0N09pe6Q_{=q_(A zomsP2Du|!us0p{0DE)nLFJ4*U69^u{t)o0Qk*@Bg4CNULDi%+^1D80VY?@E$*w0vv z;u(1a7))HQg2;SDX*ZwJd$A?Pi`=KULe+1p#>??PyvNxKkOn+mCTGlJC%S#NPN|_G zdWoIvVkyUU{pd>OyP18O2k^(ql<%RrMaQ}2oIzGZukapvXFcH)uL1dQYVCuNEa(!p z41MEtTVfDyu+BAH*(c-j#cUK$!vIFg?Z8)t`V-q3w&ye%ZBoEHf6c(774+_cQgQ%X zV(~a-2S&}^YulZrk|b<53NYJ8E?L1dh*O%qobyHn*XZdzF>_HL|j; z``{9Lv7tgvS2fVZ3F7kYQG9zE73^DJ#=!V{UR=IDvm7N}_@+@{%Hmy)xmX1G}xR4Ap;OdAuW=dJOSX zx{4xx3sFR`S`gn67a(bynh$TcyI-$(oP7Q%C2zudvwBUqhtR85U?L~whAV!0hOj;g zR?P9P6kbyN{r^C9{cTonq~PHpU03fO-kW;(kqUTDBJvNTcKF*u_wItuRCQrHx;0?g zpgnWZoY>o5t_RI~ngKFC9#D&5ote z_|V(9Cf-m>h_tDQWBa*VbiGGiV+JF(eR?S8gMud645WU?O`Gzn1`q3=Nn)uz5BY!F8(hX~We$VWihqBGe>#{Sk7Ivom0%M^rd5p@;5&4Lvmf zQapQ6MRadLo_(+&&pup`XHV14{!`OrJxdkN?Jz4{_JLa&W|I;&|JE3;jWI^t#~U#y zXEjJ_!yA)B_Zad(tVoPRV*24tIGAzi5?j`LQYU!*VoP8_E-?3i953;z#i)8Ae3X{*&EedKg)L-BZt+-aI& z9^h-u1>D4-d@t3vrmv%h*v9@-JiuI}?mK>Hy4KPbY6eB`wdy_2Tj9G229m4hU1NRW=SL zVeHpcir<-*J`FibRirWTi4Iy!%#H4?)G2Q^&#RA8qj~djXqH#d(%cPR--$5? zD;5M@<*LwylYk+zJk3JI-}6$xlnJC#jc1BS{)DO}`*9&)mz;QtqOOcYkvw zgRui8o9A(`bg%3Wj^xHQWe?hlYRmIr`b8vR543U;^QQe3q%Bk6Yt?;zmAW?{mm8q% zX|=VQO#WLPs<^SYAeocZ5F<0+HZw9r6R_NLaeGTU+y)dJ06pF%aIfo(*Le)Z(Ae9+U6O@NTOEV9TUqrY9Qu_j7Mz~u1)r{-Ot@x25CmK8|BRFSlxvu1}D$!tf!^C zTL!fM83RV_xuF5mpGfzPek`i;zUZt#wcLwMkthIHLbd&NwQA*FHwqcVUeO>l2-hd4SCeXAZ^*%&xrT!myOsdGTAXJdGuNP*#UI1?s6sR z^b-YM(7w`wLFh-eYg*(T6|R5&o_yoFt90x(mvOaJ`}uKTQ z%*ga;IizyQYvf$ZPg<4}G1E7`KP29NSt4Jbp*o>*??W-~|DU2VzP~Zve5+9HjjRFz zSaxc-uj9_ulwa{C$Mje3fF(LP2DTW;@SfA?cV{#`JrNL!PlIs`!@~4P1eFh(P2A|6vHgSS%7Qfy#7$U$ORzsjqOdvF3f@}ugTp$!!wg-7T zjjwcs1a*W&AP_2Nm2iY~%*y`%g`RVd5D^Ha&oLp(5tp<=J3`{fA=eDBsm+g{Fjla_ zle3zd!j}>VRkBi>#ee>TRO%iP><){ZBVOF}O3WXr+pZq||G*m}CUlEAhujBhXCTjk zMVve(oFsBq)diegD`udh?}KjJ5rk|(^$a{ec4>d|*`y+miyoCf-wD=~px#2oTq z$0|s#?4K)DVrov>##7WDVdKkYU}~dT*DTzW7Ft3P((|aa_Qv%C$2fdp9@)DER*UZ> z8xx*X<8pd=EsizsDfS-6+7{f+ z5Z3w{tu&Ob+qLGh9zDrFJp8^DRa1n5#sUBU@E;#hz%qx9@E#rj5YYw_hQ@q0fgrGGR7@AGGc1l^QGlX!$}D+8h4)VR>{cm z53}1=-EG^C(NJRjQclq`LjQ+ zs@CPj!7kTk)EqYLTN-rZbpq?WLPfh?+YZ~Z&R9FDz>bY-J-!d7&huQ0AP{K%N$Y3k zS*}CviN{d;lD$q7&1?Hlp=AT7lV$(+qWNnn)X2Z)++V8UA~9%I%|@2Ker1|Cadiu9 zs$3i|NO1U>&0X-^QT6-I@$&k~AN_je-hB0W=l51hX6Myz@9^m1iz4v7v)sw+=Y`&C zQd`zI>lvxl4Q{B3oiByG(S_YrA5YdIZc~=U&F+DxJ}XOIW`3p}(6vkN{QljtN}6$> z?8|uII&g#KV0=C%*mJVl^GVKzcW7gwPkA%?X16#tVU4YXp?~^9UP|t_#;BIlx1sW$va^6wE+4j&NS5VvgQFVi^mrZ8QFK9 zi$Fo}dkwM3=)AMN>!RoF!|1b_^!E;m0n)Jgyfs+v&Jz;JHPKp}8=rtbGJ`lio4Z)& zOx*=T9p`18_yNwZ3CYwzpz9Cp`!;2MJ4@C)C*HPYPp6+9xh=q=@XRp%2*#F*x|O{E zTvTjZr!6nmv&*O9j@JB%J*;#(TXg`Yva*7WX}Ua&5)!u$vJw;b6DFI>oH>G$5H~** z4L|o2Cma4}5O0sUzmqG5klO`G?0S(jL^V#?j6{Pz)=WQ#!D#5WqqM?w5Tk3X|Cmq_ z>d_c}q$_p>aR=~TbH#cv(|I8^@anqdZ+xCnz(d<{)Un1`CIV%P6>%$dhtE1ty9qb z>57I;5i#T27*R8?l%HfXFa4Ragr8g3J&v7I`@K*>y*kj32O}BBdh*%I0<`j_{3p!H z&1bn4xwA8IKgH%YDZi|l4VvaQS?i1X`#8HvOa$5%D@psKp!;f|HcQ3N&=tXa;f{|g z$epc=`^h$YN%^JCY*06QeE=HnbL}qnF@v~E5@=HA%Wr!Ks|U4n=Q3L!S|T?tdkFv8 zM)?!Cjk>PsoRk$#|V zGa2ZUN}4?JZHE7|fGT|sZSq6|i_{Uiwr_t5$#CFgM7%_%?n2!Nx?1Kum;k*bqqI)8 zeluRI+sZIkf$&U^->N8-SEiqkawqol2#~NSj92C#EBpOGx?d=W`qbq5 zC3KnQG6v||*3@G9#aIf3&AW6p07bir83yE8gxO|DK4BbI&G>Dbd59KZp;Qf>dKHyM z6_zGwtelZTw+31#CRsv0&NI6R8(=douK(1`$fm&9Gh_DG5(*FEV@a-|Q(+vLW%xA5 zAU#LLc^nO|!3Z&rpvFyTgJ9feM45)*+;Z@>X2!UNO|QyqO5el2hVCn)!Xm@BMTXyt zR86$#^THBK3S_Mx)sX_)ZgeQXr0cttY8N$+Bvh6mkT~fLPp;IYF-&OCOR0D5zlz7>a;u)V4`sC$obddadDROH$QehiEJfs-`D9 zp&|qE!0VKoeMQeQ#0mOnSZ0Wf&8HIBAp8E;29*v-$ZJig`@6U*e_qisny6(Y7vE?; zc8<>JME2lHA`_qy^ODX7Q6p=2jUw`r4pZS2O$~>oQS4G$cP*?;exKKA75$6tNSDBH zS26N0>;pUpi#9k# zQ}xezgOuh2e7!A1HATr3hN|$O2J&Tcol=!MfhzZaMgUUoF^VepZw=)uP1>tuP1W*j z(jr%AplVBxMxwg)x3b*b3Rv$E+y^az*fIjuXIr)t!2{0t9(W-c!HD@}6K)IL9CO_n z*zM?P_Sz`6Y8<30>bz?}J%ESbN*5XL!?fyKzB8h+dIEO)36BdrZH<2@k0g_S4lrXv zH*mx=(WRsblvXgI%0D1dLk4K}LChBeA?A(6xZ%}&>P-d2xUtlbVKhO|njlEcBz!G? z$Z{D#Wg_25+8|C3&Eb$Opz-={Aw{0Ds`n!ui}DmE$dPm+ENIS+rH3r74U*CZNocS1 zq`OfJ*+Mr)C;yT&ALnl*2&(os@Uxg1vc1f%g%}dRdib=X?~>>K)sAkFUweOPXCV#m9V$(A6cNAN;m8j>!!j7+1r0)Z~sFEr5QOCLD5(cWuFvfuO6lJ zA6a6om^o!|x|1J$kn%*qGQj%4519cJVF?8+cv6KGyGc;}K}mU(9aoJ^Z6`UrLN&Zn zJe0}9#NY$U`4j z>JeXVPf6qeBm2Rl5O<*Xu87E&dBIk0pIO9gDCPhmi~95(i6hBxNMNZItCcz2AuG%w zE5zZWsTnEi9boLg09Ng%n1jZn`dVS?$J@v>d5~9ee%;SO#vNSXPudSor@A(m5IKN| z95jfOPtGa9vV1EDaX9qhDMY|=uZvV1XRb|awPh~ZFJsdXQ!f87^s=i| zva49Kt8z{ywNcK^*hI|g2#oxhP6y1)Th?7Q`HePlt?5O~V&=a$S;#4mqT`B~_pKHA zS7`WGO8Guqco4l*YT90<>&Tc&H2!e^AD6b8-pF)j2jnE|7hu?s#C}I?pZy`*szCOJ zV77$0{zLi*x>PGEG7&=8+vg!AfJp}4aT91Y~l~XWECUdx@ zV!<*^!E$MShWWkw$D%0Kggx~!3o;gDI2|)H2U&JSe%NT;ikHc}Wik=>0W+8uZz`Fx zr{`Lw;#vh_as9XKOxeS5{qw%m!Hbe2B3i};dAU77B6F@zYf#`*@kYkkpGEcOmgGQ( zq(F!0KzU2eefT$h`BtSK4dY*JI#}g+C_^{^j!p3oFOq%fCr*8k?RM@PPaX>Tnu zQM6f7Cuo%?pqa-6$2Umbvc-6{^DT=f8eN7|h=@yfTjfk*{Rt&y z24ZR-%5DF;nep;#J=8~KZB!By-KAyw;%4fLxK5L}lvc>TCX(((e>538?niH={hU_k z%0et=(6!R)TJ%4#^3loIOd!R-F%wC=ZzAinMD4Rw;+_8At&<6@_lNgU&^V0l^#p>t z{RdiIk79dKNL%&+f3GQvONZp13(d@B@s~f#c*@Io(#z0fup2$XQ~LD|QIuRJC1M*r z==lPMU+)6;XA@4Zk{jR>##Fy&Qc(IVnaa-OCN-B)oq?#%G=Nmf97SDG3C*}v9|N1U zUGFM9uLN#u%*aq%1bKpF63vfGatyuKOX-vz({H3-WVm1CcfTPqrCZpypT?$%>fXcs z(X7Wz!a=5gZ5ywTcAJE9DeeK$PlCzx97zUUlvb+4%Nnlt@~-#vuJ?&zpl1q+3B!b@ zwCpk7ZrmQ3E1*Yi2^`z_CZnbZ@+?VTGhFr<>dA+hM>!~^!r?ZmCM&ciD`m!+=J#R6 z8{c}GaoPTvX`+7>{(<8fPi(tBqHGZ|3_OESzTtHL&n=RUs)?%_d-w8t_w;)oH*ZE# z39E>EAG2NBP|YKFVg~Bq;0rE8o`}Y%*}**!Q1;|MgM}||t%=}*SxYITRHFVJN0n1gr_ZC?$dNLPT-x3VGPtFtGx60eI%Ggf2{k!$N;i_IG^ovhWSyF2BZfS;@5EGIAh zwjJyC@;jmr^BLzZj!g#ZOjgJH#(cvO%Y_v>4lvq_qu`3e%}n{y`)@zFc!!(Wh?F@f zF|>emv)6OtKU&UNo?pXSFW%dJMzlS!W(}?z`$>f|TRX=QthFjPKW?ua#JL@GSwsum z7?AM-u zcKo8})?~nSk!JxE-n2hC9bA5Hoan+AAr=POTog72>ag-I#@tbJ;)!ZKf$noFJ;zTS z%D1(It!Qj-HCJh0THhBvnsk}}QpZf6SCEMM@F@@E6@PQJ`J4>2os-pMf3A2-XIK#S zc!tp8e_bRbZ71jcLC#EIChS}Oy@%6+HTuQ>{ICz`dgX%O?`(hNe0t?96jH>FU$PFg zB9DZx>6$QfQR=@dfh9X;m(@9DM6R1-znaHAnTwY)*jD8EGTC%vA-u}6+4i3D*cV}< z&~K8blU^>RgypOFW)~1R%d|1Sd@eBcYMI4+a0k}=$^<6){3-MeNZySU4Xj@iH1*ub z48Qdaz^{D^VxFfMqvyS2`2y!P*Bt>=bVo+q^hDJirVLGx{W~{L_pz-o;iO&Q7M|Nu znN>C3*|D!@+uA;4*i+;4NeZ8n&wH=Cx%B-m-095vVAD!N1izuQ-Gz%mIIh3-8!$qvvs!5fNTeV$5j& z%W13A;z2@BJakW?+*0D3%$?8576fRE{^95$Pol`lL`meb9N&Wx{2X4bijkvpEk}J< zo0(R_E>0fwqVkTnnjkI*^Re%_-a{p$z{*`&NZTn%rHJ6)QtF2;Hz^>M^VArC}<4uv#DtFxK z!mB3Y{BpbvZsXdK3?^lC|m|EoIKTH@4qZRTec?a z)nM?BTXNgc3f|i+3%P&0X|42w_=EZ|>%{&7mn`1@BX3(M`vrprah=_1nPeVqPi$*J z1u=}!Y~Azip8t81x5>e~_+ylepOUmVGzWscpC2xDk%3{Uo}2fWQBA+E-=KKprL^M@ zu;V31W6nwN-1~vGq|e&V$2+)QO0Ulp8iygx)myPg z;8e2Cqh$ioxC^o?>&ikxD!U316e^!H8R#mHt19!WE9 zgTZyR5y!_}V1mjjd8hFIJN0sGTV8u!RaNl6tN#-o{S%hf)dnADc7b70VFEmmH5U`6 z0hM;o#{}iIM^$#f{Qsr@zolnYcKP7ey4vvLl`b$&rQOT1zR=wLe2bcaqRf}_+7ETX z|Di6gJ^3fBt*Z?^26ur`Do>t|1^x+7E{m%F2?egX{!dLlxa*$=_}m31sXTc(_ARfy zs5&Y5CyhM*CyYc0@DSEq1X)A;zv|VTyV>}nTFK6bH+#Qj*n-jLLLYWK5j)n-AD!Tr z4g1=MO^K=v$4s=r^*0Z#$%DJrH^w2)hGi}D+NYCbd0V6*X9LPwD0$}yDycM*sTZi z!yp@j$?o;_nw^SV>3J3QMgEQNF|IiCk4@R9+BfR5^4#;_T#JsP?MrJfoRTL@Y+Pl- zJRyDop}@jSp|>wZlY7H|9xsQhE~;+lAMUEEEK7mW4bReLAH@cAf9ZY>OxqY*z4;@O zWAa=2v(}Mv>Acq0WM7YYz2x7@IP(JRhg+m&VuG2~%a=67@gASlt+`oZG8z}%Sy|w7 z=F7@lkP8_Gtnb!QVOS<9iAZ-qm}+;LRbDoKO$;kyIDW}*kBD-AHZ0o>_g&YtsjX6Y zBeDQ0*Poh6AHI=ij(0;bX#qy`xZ)jWm}+n#AoaBS(aF&}hl5>O)gVumBH?pWuefTs z0h6=`*GAFTZrW1cz(a*U{4_Lnzk;3fYhx&?#wHjIHbMXp7e>6pQnSbql7#~57dPK( z!TCVHy4_M0r`~69n359CF_$8(53XDUTp3Uc22!+s%V7q-0%^$U2L9J$5A3Mcoe2ti zaSnv<1(~gjrU&_>NL@iwM5ogXgUTWPu-K3DR=M3&IIG$6>_1s_e>=g~o2(mOT)QKd zRINTgweRkbLbw{Xz!^$U&mR+9@=mT&I|W0ya0{Il4$bhPbtu+DYxb7jE~*@L%-sMB zZ=p}PBAG%`A?`_UnzfyFA!k3$6+|@x&YCDj$x76? zT*)nx{whSY32z06I7yg_o8}AKaBBhUiWHiRvlKUI_3byf?cFf!JLxp0ng*B^s_WLh zriXme>P4HZN#t61y0)yc^^^IC_b4Db=Cr1hiAx8kb|m>fA4(T;RteZALi#(Jq{~+t z@!F)8uOhtb*6(>(zr8GfMT%@%e&WmFD!~E$0B4J9k&;)&$SMyQNF_a<5?6jjj1rwK zDaR}|WqWZQM6JT-hwuZC7hixp{ZYOQVA(J`VOpU`F1V8D#>~>-@2#UbP7diiZ53Ui zg7nTFLDA)zZa-5(h)rQrp9r$7s#|D?&5+=Ob>%I_aCL>b+?MFWo%B)-D5976w$PcJCX$g!?^%j_wkM;tZSX&0OST;4| zR9SQe;;AHf`XVkjXxg;IfhX*P9JCF9GoV5h{u!!nrCy^n9iBgg*pn2{b@jG!swb!A z^9k5?-moVl#d=m{^{fhVJ{G&A8a>GL`qd@jf|+*$+e6cae#_?D(hI*@#VMt>bH6%y zw>CLz>sI^ePP#h7prZhf(sudu2<{}gP{R#>4Qb;z$PHkuV1rtCQZJzeXD91(Gj|tT z0xzR~pdKz~Vyhbpyozi;>6 z*3J!8T(b?>>h%aFDyZQBKxMm=#3npP;fQ4^v41zE=99Voi8X;0s~oLC{*jR`3q9wP zQTx@N-sV7L;2yWo~g)B~8!I&LZPce#u5|7Zq(yJO6mL zespEk`tMSvtc|2%T=BJz|E-bo04*#)hU za<0InT(VCsGNJ$lS(2E*GofD61f@?alDJA@g*2j{AL*ML*2*^%>j=*X!EJEP?&UT- zqa!h6}C>Hu{T}7-hbgj*>NC=pG-rlh8I;p4}3#T7>n>FlA!s zcl~6rRS^vD0Pl^mZt+3M#0hGe~4lg#pcoyp@`_LO{-70 zUp@9rX12Y{jgEr5W6R1|;-Gfyo1bFFGgUb7&uQe5Gb%1~IP)6H4}&!}=JU0Ph;j&w zIt+-Yeh1YE>k#8lB7zdtBrS<65n^&3Rn`mVTh$(B;lJ@!L5WXIqX6NE?W)lBfQW>ThfU{sXiPkU=GFB#Oat8w za9BK&x^!3bOHb?{-C?r7wz!{Vn5;DkVAOH-Op2j8=!nIM=#qZhAe#P)07)1}mjA%u znV`~@;3d1Ku_9>oV=;(!iAJ6vY_|>81H?Vqy3sRvr6W#lhGo2OIRrIlHA-@Kz0!FV0 zbCs`Ib02;e6VtitNTF`01-88K&0>(S*S6I!ILFhAa@58Xl&1=?Yw{*x5XvXB}$ z&dc90UfV}GXU~aoPwjc{)2U&}=$AKWK)W_GR)A#1NfWBAhTL8Eds8=e52Z$3o2Bi3 z&1h?NZXL^(f_9bGk74Ge)s^0m8{i*90~xQGd#$XZv@bo_&i<|?y$&7*b5oWRoI%Y) z(4UuW(EC&DK`PE$2bX(g6pK(TUe~f@ZR6E=<f>%TvwCc<&E|qi;yYld| zp}h!S5zSy3eMpoOvLUnaAQhRb_x&~x*Rl@3)Ezf&3pCnr|CU>W54oYKngu#c?KkD( z;P1&8bagD5iXh61_O9&yEs2mZ9cDhXLX`C~+bQBVKWQxqMU4$PnTDPbe8T+l35_Av zX*FOoO6n+#%w!`#VgivZ&{~~=vnuJS-A=h}QWs;*rH|UJN3X$+-FS!x@<16s)(-NQ zCZ|hD1;KR+X(jMe*Z zLeqUAMjZRIm@zclM=YvmNo}B)+&e)I5lUOUkq9--PdvwNp`LCO6+e}L& zf?>IDval0f*l*GNED!iXdv53l%WfQFz_xCj9P=D-t`ck}U7&>OoAt(-0t-?r4e$W& zwl-ya@&vjaVKHGnob~lMx2aHidf-C3k<8C_Sby$Cp7$cy7)26B8)KYiVN)><8TwM9 zPK<>r*-I8~5FXaQB=;Ayl#3Z7<)i~45n)_x3jM-sa)WH6l@iE}h2ATwAcvR*JH<7h zNv&QT>s%*87MX({fViI}d36?s`jZ?%9j4x6JL{rObrSCQ_`2q?n>miRny``F zSeThWg;tCc1-TTR3Piivx|y&;vjDJ-a%xlY9a0!^5kg-JTD9NnvHE1 z$UCT>w9x8a1P|DPAKq6_<=V3yCs0;CP;=|K+evtkYD;Ik=fi=xA3|BCR$KgpWZz?_ zC6B3~&JgFqcQEsm>{gyt*!qn^O>SG=0pW1~5$4;CxsRBsTka=4gY1LIMJ#~jN;*9X z9l=HyNv%{sLV9ZV7ANHowO8m{bvyp#wlP+`#BeQKD%}RD`yu8g;`m~ zh6O`72;4i0p~OEXI)kB3pw~m~Nz)~0<2dLF@B9bg9zxk7xO(fYOW1=EV?X10_l*OV zkxsn&&;vUGn>9=ImAKe#lOs3El$6gFNuPUH;!s-_Ed2M!Mw zPvtF2hXH;<`f<7<`b@G)uUmhHPL(cGJ9L#C#k0ES1OpILp$Y|TP)gLbG#Ej0(trKU zuT7{Unms9$rd^rlpTs7EA1lLxHGZh3*o)^$*wKd_gX6Sx2ALzvZ>RBdF8!2++Ij&p zir*tWaTp6q5xlSNM^S54CJn@w)0rJ=QAyuV=l~`Ykv9C`jddG{uHBttn%6Wa;F8hV zA{e9;isf*0WwDgnd$gu0VT)7Mgyl)56}At;&ALLRK;lB4q2I7(*6a=o-9Qco%`rbl)*Bhy&RU~A4$baqOR za{#hxBhbI4K*wVCPY|dn%=+RK`c|71c^ZL?lI21U4RlG(t;17{kEo@rzRD#qv3rpJ zCR9a~Lnua5Q-CpFu4L9&i0qla{ywpUfm8M)YC`-vTJTo_oGYqgIo_yaj#zLfKIBT7 z8zX;>4vbh=VjOaEPP@H*rlteQTG#9Yl|3*lZ?s{p!&kvUJBrYVmV&{&-9$t6d(103 zNgCaZvJP%5@?F;=Sr$#+}94Mnc=w{9IFmTmsJ5A!eT;w$-@WfH}!c z#5!H$s^DTuF0`hdV!HTk30&elY5Tv_EB&K+08hd+a)#+MJIW+7^BMIF1Y{ffxLja- z3FFms{GRZa`$rhz08v#3B4j+0(pvmY3iH=?1c5^<^Y)pib?fa0NhF75hbFqj5deKL zA-fiwX>{i(1SmjkxE>ifN0^2?9lT70tEA5BW_tT;y{X~?8S2oyOs8(!2iBVv&~Rsb zwLd?&MkSEnoO2(H)kPeyto8U^LmJ57e7a&fnE7C&Ds@6(+;cFL%eTcbE0{t&bMMNc zk=*SFRrOkU;p|lpO=N5 zOvX6>HKK=4thl{ifn)c~v=bRfzS2d1&i~GfD`UySu)~ixW8dHI%#7{lx6JujX`inyDZ7psI7}x zAAM}Ur5a~|)u9>Abs|}*eXRc~l$TT1rh~bo#c715n?8DyN%&gz7vBL;L>?35AiI{Y zG#LZNbzk3Kws~nwWbQ+cCz3U==*aV4%KMSC^dwrqK3e*tIhK30_+jVUMaxm2re?P; z3f~_a!ZhuToiBnn*5<UA7DIIVabED>xLVrPD|`~X{8*@uJOkNmn$P0; zOD(LFvf95Dxqgcila5ydvXap9CUL!vk6}6L%OF8FEgaz!HzAslh}@bc^b4tH@rOsK z%4aFs=?zvyV4WxZb@~)8W#}In@10xi$rwRp$)aC~&4~}WlXiwjGJ4}G9Rrg_6?I04 zEB!`%s?k3)HrwvsxTSH)ht-mY;3}Q47G?@rxfB{~bB>!xm*R8=Wc0c)?os>sK@{h}Pm)VQ;Mzu0w!dWgu}$k1pgOFbH4X9vAF|sMp>cfoa7iUaALJy3Pe_EC zCXzPKp*=-+{%18D`91to^pdbf8k;;n9G7OH-ukEDq1>=4uGLwJ`xE+UX7k`KdyUdg z&8I^|hyb5GxpYA{noPoSL8-qh3Kpyifp@_%{7MXt&`qQEK*XQSkd72VO?Yjxv)(fUpUmOkO6t=2o0k9*d=OZ{F`0kl)? zGF#tcgtG^FPuB?MpHB=jx6>K2Ej~{qJl70hiz*pX;Lc=Iyc0vwUheeP?Pe>^TmRN~ zgrAyuF|Gs}@=hfJM&#{D-Q4)4 ze8y$d02=(mD9ZA+dDnaGI-NLIv@>`VnfeLwMx-yIu6WcMH&h}_Zuh}3`E(AWQZ(}y zr;F=KD&H2?C0UdfUfG#dFN!DlLD8%7G;MbdK+-g2_)zZ`VXeTqbnC0}?%ihjBC0=ZNm6(P-T%%GQ**2X76O{kPVxs7AU zfzX7_)Do4Kho;eAzRC!mH{rNls~c0QXqMis%hzP(Q`!uX?YcI$@YvZkax}?$T$LnJ z@?BQ=&rFrRRU4Mdt;#s3rb=0)lH&6DIm-{Hbtr!|Z{2LBQit8fKq0Por@+obyy$Zl zk7IZ|jY<9%6kPtfr=$oGe=4Z~I(o^k3RqtK=CEAsFe~~x9`ng{FAFP3t)YH8l96a` zIS$O2EN|edx32WV=7f!?w+9ua*zFfHtzF~Lx0Rnv2!_rp+7nYVY3Gr%3Y!2OHt3U+4NFF$>2PvJ_F&g zwC`kRJ!^x_fBT#NzUED}sWzBIeC?q)!OD4Z0>cepyUdy{mdE)ljO7e{Ob9h3?L;{f zg*z&&KNLd|SOU30R!M)ecHF5$$G#)#wL_j))OU-EFJoet^K?31C?ICT46OH*fxjj^ z3s+0L3iCdBM9B@q#~S2g$+sgMeg<}nRn3ihueX20D z3sJI_OEc1}WrF|KtuRU~^-9~l4u4IDtYX`oU*x0V-ukpxx?%P_Z5SLS+>(5&NA?Y) z24fg2mrw z+CpXjwZiI{&m3{JoHzVaLjX6hcX-@A-8%}laYkL0Z=e|ggAjFycNwv`|0ocCII~Xu zYj8sX$G6@E?`+GpF!J!-Dn1~{0G@pfzNc~nhI2FP(v*v&<;&4WS-3r>Pqir#R%x<5svugD{dmY=0itfnr;(VYbg5viAOe3caDtH5s7GIPCL>+wix z7*o?`ii_lDv>hLv;m*#}Ur=juItxf(&l#bD%5U^g1sV<@YswY$cmN~UxENhwQuV%l zHfP%;r4Oo$9$8T#GN?l`govY2O!X~DYMn~{d>*?J?=o!^Goy+Ij}&7ux``}3eVcQT ztrA<54mJ$?CM^yQYqpyLD;82IAsah$TVGwVsV)uY!JZiMHf3L+q5eiAq~Lf^LhDg! zA||fiD-Ko>mTruK4gro6g+N(nx0=BaPL3bus7Euz6sBedMSYje*%wSJJn_^GuG0PX zG6Ks3$Q=fp0b%xzM`&pE)B~?Ssnq(IW_2lE?WY0=tdMD)yDr)Cc|GNxOZAXazr25X zpBu_oc0agpYq0L|O3f@-4(2nd&C8HtBC0}tx;uRL9suo3b^*2ef_-I*QcsO8ADYO^ zW(^_kmw_mn9f3fPx7^}QyHwIz7E)pV*O>Xc7u32<#4S;H-q(Hh$9K)w7y#;q_az@B zk!TWtT!I+uF@S&M&uIX=?EdA?vuWI$x$~uWSBfQOxNbsx$WD?2J9tw#Gty6F0p4jR zU4BZ^4~b>(Q9$F9HUCQAq+#rMFtm?H zX?;fH5tYU@6cJb>`MLJ&hhchgSw-LA)%>&j;jVaz)PeLBR-K4w#tI&2m4YX%LJg^Z zmkutHU3u<_b5DPc9QJw?%$f-@M*SE3Eaf88tD`pn+WDiBIQgRjfvei-kk*}=WKRep zHV>;VDX*T{Nlqz)Hlkflp+C<@f8L|fE4g%FO?rrk@4V>pZDM7@IhKU4qT+B9lc*xp z@laSy1+rAzZ%upt70D3weE`y`+K>eJG3oY|F^WN#T6#$5e<_;B7AI@!22-g02>nQ6 zIsX8Dqd@(`G& zFQ5{GPx7Fk4mMv{?;dN83;t$2UwLHo0Yy1H9?M`|As~Dq+r=P1f}mw$m$g1@k$ zdzwdY0?9yvB3WhCGn!1FstWd@0JWPw0^w($<8|HXL*;`-zQ3=L@^8d*FRa3uhZlKQ zlWg8E@gZ;I^RH0lFD4Hll(+pn#zKe&UnwrMBNB9EDX^>*RN^`MbWgvB+@H{o?;o$a z*xpxPw1N(n{QBS4l)SGe)jtC(Pff1dmEhESjn-}6+9QVt8NT6Yp<1B|;=q8}k9Dyw z&Es+Irtbn&&gz~?i%^UV`(FgJPJ@DkpV6ioWl15Q&Zi?2P>B()=4nL6*B3WA>fc%{ zb9sOjDP^Qz87&(l|9+e-E!$89_KGT=5MR;>s%~X%+S|Ik+xl(B%_;b`N1|COyloqh z-#c>TrL|E~1jw-(4GzCP7m@+Q}=DM zFZmp^t#0Uf-AY6_iB9xwRZ*r){W=fDKNzERrK6c%%p4wC+h?VL#@zpqg5Jx$^V$ze z&;+#CAb9^vPYdF@V8?tgZlA;CAyGWBE+$O1k*A@Csv*t(|c}`j(IjPy3K`WC-yri&j zppnNc-M!>9N7{>D!=%Y~(K7$8XEg<;{Sy0e_Goq_d8Uh;v^O#~&Lh;yfKX+mmz zV(c-VXm;FQXR|*)KI?)La|36AQ~$*UwoL1ClS@qyv$3U6DrQGAwfIF*C4}vzUYfE0 zqRnUSRL8vtcH9PcN?!M(f4RF0WIwjS16T;y*4eZPV3l~IHyn{t9g7P&*Mg2B8VtFN z!6rfi+{WN-AwihgSj+De>5g1xSiSCj-nW)L?nOsIP1fK7piw!F5^qu$RjV;L@m97R zN0E1gO=T_rD1trO8f@aO$+bR(tMQQ~4uub~lyEc(zLZe0`%aK;9nZJJ#Td+fdqxlU zA-X6>QRJPOX)7a2cVr6i8woy&aDkop{}&b=MRZZ!f6!lWu6whs^9|6291XC`pnuSG zdF}SP@BWFQM=d3kHB$0nTlXFS{xms~83uZ3UI~~jzd<&A^__r*J{cS+2eAN2f#bG) zY-nK@0SHAM%**tS=&eu=!xh028v3r7Gc@QefeCX0fiDayJ5*a5@l_dbo}Qn%H>-G_ zU=B;BxkordFs9bvE84i9b(v>mlOKDUjccaWib#YqdA+dPk_q9QCUl*}LsTi`{6-vN zJ;`;W8x954#;m3bihi)GG@vQA0e`1nIkm!kMN>D03I2qGCj!tA#F+j>{}|OQT1yNF zF|!sAMj<)Wi(}mYs5}ivh_|~k;QJzi7Ml3L4~B6AwI_{^Ji2CoiGa*Tn~_=?6{ux9 zL7589BgFN_Up2N*C`f88M3{EJ@nZCAkluZ3o23{OL6b)ki+7nEIXr!`pl%UU7LVqj zez5smdkv?LreJx}Hkg~lmPNG<;Nush>a5ll<*;92_t~?rvfR2 z2}07+fG)XlKsjLykOOp}cs?A^=0`G(5o9cg1LBTA1DT7WA^krbLBSQQAmwl=NMm*o z=p%yU1dU1%{Fe(vHtN=dH{zpDF9T06K zKV*>}=*kfr9=zzMJijP=vVVt;Dx&;jU{HqX2ht6Vvl0+07k21O&Z-ia z+}**&)R{avw_0ZMzILg})g4kybtyou+T^_*T1>^Mle;^mC)d_+P3G&=VoFT|bMtGt uCdUK0;psrGsSGHQsxmS#1ON+NK@$HH delta 22917 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 NzMS}KQUB=bzW`qIgVF#1 diff --git a/assessments/FinOps++/framework.md b/assessments/FinOps++/framework.md index 217640f8..675928be 100644 --- a/assessments/FinOps++/framework.md +++ b/assessments/FinOps++/framework.md @@ -1,6 +1,6 @@ # 002: FinOps++ Maturity Assessment Framework -**Creation Date:** 2026-04-12 +**Creation Date:** 2026-04-26 **Specification Version:** 0.0.1 @@ -52,12 +52,6 @@ Finops++ profile that is an extension and reorganization of the finops foundatio

Specification Version: 1.0.0

-
- -
- 001: Inventory All Data Sources -

Specification Version: 0.7.1

-
- 002: Choose Data Landing Tooling -

Specification Version: 0.7.0

-
- 003: Create Landing Zones & Controls -

Specification Version: 0.7.0

-
004: Define Data Granularity & Frequency

Specification Version: 1.7.0

- 005: Document Normalization Rules -

Specification Version: 0.7.0

-
006: Implement Data Quality Checks @@ -1038,12 +642,6 @@ Classic profile featuring controls provided by the finops foundation

Specification Version: 1.7.0

- 008: Optimize Pipelines for Timeliness -

Specification Version: 0.7.0

-
135: Define ingestion frequency; include mandatory metadata. @@ -1060,12 +658,6 @@ Classic profile featuring controls provided by the finops foundation - - - - - - - - - - - -
- 016: Gather Requirements & Define KPIs -

Specification Version: 0.8.0

-
017: Enrich Billing with Business Logic @@ -1078,30 +670,12 @@ Classic profile featuring controls provided by the finops foundation

Specification Version: 1.7.0

- 019: Publish Documentation & Support -

Specification Version: 0.8.0

-
020: Embed Reports in Workflows

Specification Version: 1.7.0

- 021: Track Adoption & Manage Changes -

Specification Version: 0.8.0

-
- 022: Iterate Based on Feedback -

Specification Version: 0.8.0

-
- 117: Reassess Progress & Update Priorities -

Specification Version: 0.7.0

-
@@ -68,36 +62,12 @@ Finops++ profile that is an extension and reorganization of the finops foundatio - - - - - - - - - - - -
- 097: Assess Skills & Training Needs -

Specification Version: 0.8.0

-
- 098: Develop Role-Based Learning Content -

Specification Version: 0.8.0

-
- 099: Offer Certifications & Informal Learning -

Specification Version: 0.8.0

-
100: Leverage Vendor Training Resources

Specification Version: 1.7.0

- 101: Track Training Impact & Refresh Content -

Specification Version: 0.8.0

-
@@ -114,36 +84,6 @@ Finops++ profile that is an extension and reorganization of the finops foundatio

Specification Version: 1.7.0

- - - 092: Create Implementation Roadmap -

Specification Version: 0.8.0

- - - - - 093: Integrate Cost Data in Workflows -

Specification Version: 0.8.0

- - - - - 094: Publish FinOps KPIs -

Specification Version: 0.8.0

- - - - - 095: Drive Stakeholder Engagement -

Specification Version: 0.8.0

- - - - - 096: Automate Tasks & Review Maturity -

Specification Version: 0.8.0

- - @@ -154,16 +94,10 @@ Finops++ profile that is an extension and reorganization of the finops foundatio - - - @@ -178,12 +112,6 @@ Finops++ profile that is an extension and reorganization of the finops foundatio

Specification Version: 1.7.0

- - -
- 124: Assess Tooling Needs & Criteria -

Specification Version: 0.7.0

-
125: Evaluate Build vs Buy Options -

Specification Version: 2.0.0

+

Specification Version: 2.0.1

- 128: Monitor Adoption & Iterate Tools -

Specification Version: 0.7.0

-
@@ -240,36 +168,12 @@ Finops++ profile that is an extension and reorganization of the finops foundatio - - - - - - - - - - - - - - - - - - - - -
- 107: Map Invoices to Allocation Model -

Specification Version: 0.8.0

-
- 108: Reconcile Rates & Track Completion -

Specification Version: 0.8.0

-
109: Design Chargeback with Finance

Specification Version: 1.7.0

- 110: Automate Chargeback Data Flows -

Specification Version: 0.8.0

-
- 111: Distribute Reports & Track Accuracy -

Specification Version: 0.8.0

-
112: Resolve Variances & Increase Coverage @@ -292,24 +196,6 @@ Finops++ profile that is an extension and reorganization of the finops foundatio

Specification Version: 1.0.0

- 137: Define Decision Rights & Guardrails -

Specification Version: 0.0.1

-
- 138: Build Multi-Year Investment Forecast -

Specification Version: 0.0.1

-
- 139: Establish Decision Support Cadence -

Specification Version: 0.0.1

-
@@ -348,60 +234,12 @@ Finops++ profile that is an extension and reorganization of the finops foundatio

Specification Version: 1.7.0

- - - 064: Implement Iteratively & Measure Results -

Specification Version: 0.7.0

- - - - - 065: Publish Benefits & Update References -

Specification Version: 0.7.0

- - - - - 066: Strengthen Architecture Collaboration -

Specification Version: 0.7.0

- - - - - 118: Create Workload Selection Criteria -

Specification Version: 0.8.0

- - - - - 119: Define Success Criteria & Scope -

Specification Version: 0.8.0

- - 120: Enforce Tagging at Onboarding

Specification Version: 1.7.0

- - - 121: Align Timelines with Budgets -

Specification Version: 0.8.0

- - - - - 122: Start with Lower Environments -

Specification Version: 0.8.0

- - - - - 123: Review Outcomes & Adjust Patterns -

Specification Version: 0.8.0

- - @@ -418,36 +256,12 @@ Finops++ profile that is an extension and reorganization of the finops foundatio

Specification Version: 1.7.0

- - - 074: Document Licensing Models -

Specification Version: 0.8.0

- - - - - 075: Integrate Billing with Procurement -

Specification Version: 0.8.0

- - 076: Validate Utilization & Remediate

Specification Version: 1.7.0

- - - 077: Influence Workload Design Choices -

Specification Version: 0.8.0

- - - - - 078: Publish License Spend & Utilization -

Specification Version: 0.8.0

- - @@ -470,24 +284,6 @@ Finops++ profile that is an extension and reorganization of the finops foundatio

Specification Version: 1.7.0

- - - 081: Purchase Commitments Regularly -

Specification Version: 0.7.0

- - - - - 082: Track ROI & Notify Owners -

Specification Version: 0.7.0

- - - - - 083: Allocate Upfront Costs Transparently -

Specification Version: 0.7.0

- - 084: Leverage Spot & Negotiated Discounts @@ -504,12 +300,6 @@ Finops++ profile that is an extension and reorganization of the finops foundatio - - - - - - - - - - - -
- 067: Define Optimization Strategy -

Specification Version: 0.8.0

-
068: Inventory & Classify Workloads @@ -522,24 +312,6 @@ Finops++ profile that is an extension and reorganization of the finops foundatio

Specification Version: 1.7.0

- 070: Partner on Scheduling Actions -

Specification Version: 0.8.0

-
- 071: Gamify Adoption & Celebrate Wins -

Specification Version: 0.8.0

-
- 072: Track KPIs & Document Playbooks -

Specification Version: 0.8.0

-
@@ -586,12 +358,6 @@ Finops++ profile that is an extension and reorganization of the finops foundatio

Specification Version: 1.7.0

- - - 015: Iterate Strategies & Communicate -

Specification Version: 0.7.0

- - @@ -620,30 +386,12 @@ Finops++ profile that is an extension and reorganization of the finops foundatio

Specification Version: 1.7.0

- - - 026: Record Anomaly Context & Timeline -

Specification Version: 0.7.0

- - - - - 027: Analyze Root Causes & Fix Issues -

Specification Version: 0.7.0

- - 028: Track Metrics & Avoidance Rates

Specification Version: 1.7.0

- - - 029: Tune Thresholds to Reduce Noise -

Specification Version: 0.7.0

- - @@ -654,36 +402,12 @@ Finops++ profile that is an extension and reorganization of the finops foundatio - - - - - - - - - - - - - - - @@ -780,42 +474,12 @@ Finops++ profile that is an extension and reorganization of the finops foundatio @@ -838,30 +502,6 @@ Finops++ profile that is an extension and reorganization of the finops foundatio

Specification Version: 1.7.0

- - - - - - - - - - - -
- 001: Inventory All Data Sources -

Specification Version: 0.7.1

-
- 002: Choose Data Landing Tooling -

Specification Version: 0.7.0

-
- 003: Create Landing Zones & Controls -

Specification Version: 0.7.0

-
004: Define Data Granularity & Frequency

Specification Version: 1.7.0

- 005: Document Normalization Rules -

Specification Version: 0.7.0

-
006: Implement Data Quality Checks @@ -696,12 +420,6 @@ Finops++ profile that is an extension and reorganization of the finops foundatio

Specification Version: 1.7.0

- 008: Optimize Pipelines for Timeliness -

Specification Version: 0.7.0

-
135: Define ingestion frequency; include mandatory metadata. @@ -718,12 +436,6 @@ Finops++ profile that is an extension and reorganization of the finops foundatio - - - - - - - - - - - -
- 016: Gather Requirements & Define KPIs -

Specification Version: 0.8.0

-
017: Enrich Billing with Business Logic @@ -736,30 +448,12 @@ Finops++ profile that is an extension and reorganization of the finops foundatio

Specification Version: 1.7.0

- 019: Publish Documentation & Support -

Specification Version: 0.8.0

-
020: Embed Reports in Workflows

Specification Version: 1.7.0

- 021: Track Adoption & Manage Changes -

Specification Version: 0.8.0

-
- 022: Iterate Based on Feedback -

Specification Version: 0.8.0

-
- - - - - - - - - - - - - - -
- 049: Select KPIs & Measurement Scope -

Specification Version: 0.7.0

-
- 050: Validate Tagging for Comparability -

Specification Version: 0.7.0

-
- 051: Choose Internal vs External Benchmarks -

Specification Version: 0.7.0

-
- 052: Stand Up Internal Benchmarking -

Specification Version: 0.7.0

-
053: Track Trends & Compare Over Time

Specification Version: 1.7.0

- 054: Translate Gaps to Initiatives -

Specification Version: 0.7.0

-
- 045: Increase Shared Cost Coverage -

Specification Version: 0.8.0

-
- 046: Publish Budget vs Actual Reports -

Specification Version: 0.8.0

-
- 047: Automate Budget Threshold Alerts -

Specification Version: 0.8.0

-
- 048: Review & Adapt Budget Strategy -

Specification Version: 0.8.0

-
@@ -872,12 +512,6 @@ Finops++ profile that is an extension and reorganization of the finops foundatio - - - diff --git a/assessments/FinOps++/history/2026-04-26.json.gz b/assessments/FinOps++/history/2026-04-26.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..db75c6bed69563f0c6b137d0b44417ee67e12e43 GIT binary patch literal 8469 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 DZlMTt literal 0 HcmV?d00001 diff --git a/components/actions/001.md b/components/actions/001.md index f06cce28..333902bb 100644 --- a/components/actions/001.md +++ b/components/actions/001.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.1 +**Status:** Proposed + **Slug:** 1-inventory-sources **Implementation Types:** diff --git a/components/actions/002.md b/components/actions/002.md index 8d9e4e44..9024a0ff 100644 --- a/components/actions/002.md +++ b/components/actions/002.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.0 +**Status:** Proposed + **Slug:** 2-choose-tooling **Implementation Types:** diff --git a/components/actions/003.md b/components/actions/003.md index faa3a3eb..8ddcd296 100644 --- a/components/actions/003.md +++ b/components/actions/003.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.0 +**Status:** Proposed + **Slug:** 3-create-landing **Implementation Types:** diff --git a/components/actions/004.md b/components/actions/004.md index 4a190117..f324609f 100644 --- a/components/actions/004.md +++ b/components/actions/004.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 4-define-granularity **Implementation Types:** diff --git a/components/actions/005.md b/components/actions/005.md index c51da662..9bed42bb 100644 --- a/components/actions/005.md +++ b/components/actions/005.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.0 +**Status:** Proposed + **Slug:** 5-document-normaliza **Implementation Types:** diff --git a/components/actions/006.md b/components/actions/006.md index da9a2266..b8520453 100644 --- a/components/actions/006.md +++ b/components/actions/006.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 6-implement-checks **Implementation Types:** diff --git a/components/actions/007.md b/components/actions/007.md index 6b72a2f8..cea266f8 100644 --- a/components/actions/007.md +++ b/components/actions/007.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 7-build-ingestion **Implementation Types:** diff --git a/components/actions/008.md b/components/actions/008.md index c6cd0368..9494a19d 100644 --- a/components/actions/008.md +++ b/components/actions/008.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.0 +**Status:** Proposed + **Slug:** 8-optimize-pipelines **Implementation Types:** diff --git a/components/actions/009.md b/components/actions/009.md index 974dd246..eb630467 100644 --- a/components/actions/009.md +++ b/components/actions/009.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 9-define-metadata **Implementation Types:** diff --git a/components/actions/010.md b/components/actions/010.md index 75d8ea1b..2ea50753 100644 --- a/components/actions/010.md +++ b/components/actions/010.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 10-identify-shared **Implementation Types:** diff --git a/components/actions/011.md b/components/actions/011.md index 53f2e7df..da3c73dc 100644 --- a/components/actions/011.md +++ b/components/actions/011.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 11-allocation-taxonomy **Implementation Types:** diff --git a/components/actions/012.md b/components/actions/012.md index 3328d726..d9722885 100644 --- a/components/actions/012.md +++ b/components/actions/012.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 12-implement-tagging **Implementation Types:** diff --git a/components/actions/013.md b/components/actions/013.md index e69d777b..6f5ba1d2 100644 --- a/components/actions/013.md +++ b/components/actions/013.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 13-validate-compliance **Implementation Types:** diff --git a/components/actions/014.md b/components/actions/014.md index 7042bf89..a1718340 100644 --- a/components/actions/014.md +++ b/components/actions/014.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 14-automate-tagging **Implementation Types:** diff --git a/components/actions/015.md b/components/actions/015.md index 6c66172e..63addd44 100644 --- a/components/actions/015.md +++ b/components/actions/015.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.0 +**Status:** Proposed + **Slug:** 15-iterate-strategy **Implementation Types:** diff --git a/components/actions/016.md b/components/actions/016.md index 39ea54d0..6051d57d 100644 --- a/components/actions/016.md +++ b/components/actions/016.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 16-gather-requiremen **Implementation Types:** diff --git a/components/actions/017.md b/components/actions/017.md index 70c2488c..3ae99e68 100644 --- a/components/actions/017.md +++ b/components/actions/017.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 17-enrich-billing **Implementation Types:** diff --git a/components/actions/018.md b/components/actions/018.md index 7b43df7f..2a964d96 100644 --- a/components/actions/018.md +++ b/components/actions/018.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 18-build-dashboards **Implementation Types:** diff --git a/components/actions/019.md b/components/actions/019.md index c69004e8..7f142711 100644 --- a/components/actions/019.md +++ b/components/actions/019.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 19-document-support **Implementation Types:** diff --git a/components/actions/020.md b/components/actions/020.md index 79d838a4..4e6d02c4 100644 --- a/components/actions/020.md +++ b/components/actions/020.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 20-embed-reports **Implementation Types:** diff --git a/components/actions/021.md b/components/actions/021.md index 93fe2ee8..cec0d345 100644 --- a/components/actions/021.md +++ b/components/actions/021.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 21-track-adoption **Implementation Types:** diff --git a/components/actions/022.md b/components/actions/022.md index 46063fde..26892cc6 100644 --- a/components/actions/022.md +++ b/components/actions/022.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 22-iterate-feedback **Implementation Types:** diff --git a/components/actions/023.md b/components/actions/023.md index 1f65791c..7ba9efaa 100644 --- a/components/actions/023.md +++ b/components/actions/023.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 23-configure-detect **Implementation Types:** diff --git a/components/actions/024.md b/components/actions/024.md index 485819ad..efcd7ca1 100644 --- a/components/actions/024.md +++ b/components/actions/024.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 24-define-severity **Implementation Types:** diff --git a/components/actions/025.md b/components/actions/025.md index 4fca6958..03977855 100644 --- a/components/actions/025.md +++ b/components/actions/025.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 25-automate-alert **Implementation Types:** diff --git a/components/actions/026.md b/components/actions/026.md index cbf996b9..06f51633 100644 --- a/components/actions/026.md +++ b/components/actions/026.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.0 +**Status:** Proposed + **Slug:** 26-record-anomaly **Implementation Types:** diff --git a/components/actions/027.md b/components/actions/027.md index c5a07a83..6e66e658 100644 --- a/components/actions/027.md +++ b/components/actions/027.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.0 +**Status:** Proposed + **Slug:** 27-analyze-root **Implementation Types:** diff --git a/components/actions/028.md b/components/actions/028.md index 143537f1..9138ba8a 100644 --- a/components/actions/028.md +++ b/components/actions/028.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 28-track-metrics **Implementation Types:** diff --git a/components/actions/029.md b/components/actions/029.md index 81a75d8d..88c58d52 100644 --- a/components/actions/029.md +++ b/components/actions/029.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.0 +**Status:** Proposed + **Slug:** 29-tune-thresholds **Implementation Types:** diff --git a/components/actions/030.md b/components/actions/030.md index 76d24674..b3ad887f 100644 --- a/components/actions/030.md +++ b/components/actions/030.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + **Slug:** 30-define-estimating **Implementation Types:** diff --git a/components/actions/031.md b/components/actions/031.md index d582bdb9..281116ae 100644 --- a/components/actions/031.md +++ b/components/actions/031.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + **Slug:** 31-agree-pricing **Implementation Types:** diff --git a/components/actions/032.md b/components/actions/032.md index 0fc67048..34f1f486 100644 --- a/components/actions/032.md +++ b/components/actions/032.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + **Slug:** 32-select-estimation **Implementation Types:** diff --git a/components/actions/033.md b/components/actions/033.md index 12fd286c..10b54493 100644 --- a/components/actions/033.md +++ b/components/actions/033.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + **Slug:** 33-sustainability-impact **Implementation Types:** diff --git a/components/actions/034.md b/components/actions/034.md index bf07b083..5ffec43c 100644 --- a/components/actions/034.md +++ b/components/actions/034.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 34-scenario-process **Implementation Types:** diff --git a/components/actions/035.md b/components/actions/035.md index 60d6d1f9..d4786a66 100644 --- a/components/actions/035.md +++ b/components/actions/035.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 35-report-accuracy **Implementation Types:** diff --git a/components/actions/036.md b/components/actions/036.md index 4358ed0c..79c9f102 100644 --- a/components/actions/036.md +++ b/components/actions/036.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + **Slug:** 36-coach-engineering **Implementation Types:** diff --git a/components/actions/037.md b/components/actions/037.md index e6f830b1..1b67c8d8 100644 --- a/components/actions/037.md +++ b/components/actions/037.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.0 +**Status:** Proposed + **Slug:** 37-forecast-approach **Implementation Types:** diff --git a/components/actions/038.md b/components/actions/038.md index 5f632c20..7946f927 100644 --- a/components/actions/038.md +++ b/components/actions/038.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 38-collect-drivers **Implementation Types:** diff --git a/components/actions/039.md b/components/actions/039.md index 489efef8..411cd973 100644 --- a/components/actions/039.md +++ b/components/actions/039.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 39-run-forecasts **Implementation Types:** diff --git a/components/actions/040.md b/components/actions/040.md index af34816a..1484ce4e 100644 --- a/components/actions/040.md +++ b/components/actions/040.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 40-compare-variance **Implementation Types:** diff --git a/components/actions/041.md b/components/actions/041.md index 2a7bb2b0..137a5cd2 100644 --- a/components/actions/041.md +++ b/components/actions/041.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 41-automate-variance **Implementation Types:** diff --git a/components/actions/042.md b/components/actions/042.md index f49aa592..54139d40 100644 --- a/components/actions/042.md +++ b/components/actions/042.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 42-feed-learnings **Implementation Types:** diff --git a/components/actions/043.md b/components/actions/043.md index 52e52167..900ca976 100644 --- a/components/actions/043.md +++ b/components/actions/043.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 43-define-budgeting **Implementation Types:** diff --git a/components/actions/044.md b/components/actions/044.md index 6604b924..e629f3d1 100644 --- a/components/actions/044.md +++ b/components/actions/044.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 44-integrate-rolling **Implementation Types:** diff --git a/components/actions/045.md b/components/actions/045.md index a22f71c6..64793c6b 100644 --- a/components/actions/045.md +++ b/components/actions/045.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 45-allocation-coverage **Implementation Types:** diff --git a/components/actions/046.md b/components/actions/046.md index 8ea089bc..98713c9d 100644 --- a/components/actions/046.md +++ b/components/actions/046.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 46-publish-budget **Implementation Types:** diff --git a/components/actions/047.md b/components/actions/047.md index 9e544bc5..2591b98f 100644 --- a/components/actions/047.md +++ b/components/actions/047.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 47-budget-alerts **Implementation Types:** diff --git a/components/actions/048.md b/components/actions/048.md index c70fc345..9fc59f92 100644 --- a/components/actions/048.md +++ b/components/actions/048.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 48-review-adapt **Implementation Types:** diff --git a/components/actions/049.md b/components/actions/049.md index 3bac9cba..c2a250b5 100644 --- a/components/actions/049.md +++ b/components/actions/049.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.0 +**Status:** Proposed + **Slug:** 49-select-kpis **Implementation Types:** diff --git a/components/actions/050.md b/components/actions/050.md index 5d8a32cc..106084b1 100644 --- a/components/actions/050.md +++ b/components/actions/050.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.0 +**Status:** Proposed + **Slug:** 50-validate-tagging **Implementation Types:** diff --git a/components/actions/051.md b/components/actions/051.md index 6df7f704..48c72df2 100644 --- a/components/actions/051.md +++ b/components/actions/051.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.0 +**Status:** Proposed + **Slug:** 51-choose-benchmarks **Implementation Types:** diff --git a/components/actions/052.md b/components/actions/052.md index 5f27f2d5..33441bd7 100644 --- a/components/actions/052.md +++ b/components/actions/052.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.0 +**Status:** Proposed + **Slug:** 52-stand-benchmarks **Implementation Types:** diff --git a/components/actions/053.md b/components/actions/053.md index eb7ef4bd..834f3a6b 100644 --- a/components/actions/053.md +++ b/components/actions/053.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 53-track-trends **Implementation Types:** diff --git a/components/actions/054.md b/components/actions/054.md index e6beb302..a9444c05 100644 --- a/components/actions/054.md +++ b/components/actions/054.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.0 +**Status:** Proposed + **Slug:** 54-translate-gaps **Implementation Types:** diff --git a/components/actions/055.md b/components/actions/055.md index ed647b44..0f70487c 100644 --- a/components/actions/055.md +++ b/components/actions/055.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 55-define-units **Implementation Types:** diff --git a/components/actions/056.md b/components/actions/056.md index a470ac45..8dd39991 100644 --- a/components/actions/056.md +++ b/components/actions/056.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + **Slug:** 56-document-inputs **Implementation Types:** diff --git a/components/actions/057.md b/components/actions/057.md index c0a4028a..88f8ab52 100644 --- a/components/actions/057.md +++ b/components/actions/057.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + **Slug:** 57-build-unitcost **Implementation Types:** diff --git a/components/actions/058.md b/components/actions/058.md index 32b8ee75..6f9d7c48 100644 --- a/components/actions/058.md +++ b/components/actions/058.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + **Slug:** 58-set-cadence **Implementation Types:** diff --git a/components/actions/059.md b/components/actions/059.md index 1b1d3f6f..4dc1113d 100644 --- a/components/actions/059.md +++ b/components/actions/059.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + **Slug:** 59-use-metrics **Implementation Types:** diff --git a/components/actions/060.md b/components/actions/060.md index 8df1bfb2..7f800510 100644 --- a/components/actions/060.md +++ b/components/actions/060.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 60-communicate-wins **Implementation Types:** diff --git a/components/actions/061.md b/components/actions/061.md index f0e3fc31..58c91e57 100644 --- a/components/actions/061.md +++ b/components/actions/061.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 61-architecture-review **Implementation Types:** diff --git a/components/actions/062.md b/components/actions/062.md index 92c2007d..46c8039e 100644 --- a/components/actions/062.md +++ b/components/actions/062.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 62-assess-workloads **Implementation Types:** diff --git a/components/actions/063.md b/components/actions/063.md index efa22554..e0457cb1 100644 --- a/components/actions/063.md +++ b/components/actions/063.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 63-estimate-trades **Implementation Types:** diff --git a/components/actions/064.md b/components/actions/064.md index 60d2609a..3b544d1e 100644 --- a/components/actions/064.md +++ b/components/actions/064.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.0 +**Status:** Proposed + **Slug:** 64-iteratively-measure **Implementation Types:** diff --git a/components/actions/065.md b/components/actions/065.md index 9f4f00a3..596a54d0 100644 --- a/components/actions/065.md +++ b/components/actions/065.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.0 +**Status:** Proposed + **Slug:** 65-publish-benefits **Implementation Types:** diff --git a/components/actions/066.md b/components/actions/066.md index e2ee3394..a4b0d494 100644 --- a/components/actions/066.md +++ b/components/actions/066.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.0 +**Status:** Proposed + **Slug:** 66-strengthen-arch **Implementation Types:** diff --git a/components/actions/067.md b/components/actions/067.md index 1725b184..138f9832 100644 --- a/components/actions/067.md +++ b/components/actions/067.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 67-define-strategy **Implementation Types:** diff --git a/components/actions/068.md b/components/actions/068.md index 37532585..e3830509 100644 --- a/components/actions/068.md +++ b/components/actions/068.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 68-inventory-classify **Implementation Types:** diff --git a/components/actions/069.md b/components/actions/069.md index 05b2f0d5..51dce8ed 100644 --- a/components/actions/069.md +++ b/components/actions/069.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 69-collect-metrics **Implementation Types:** diff --git a/components/actions/070.md b/components/actions/070.md index 4334ed3c..5a046d77 100644 --- a/components/actions/070.md +++ b/components/actions/070.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 70-scheduling-actions **Implementation Types:** diff --git a/components/actions/071.md b/components/actions/071.md index b7465bd4..a679bbaf 100644 --- a/components/actions/071.md +++ b/components/actions/071.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 71-gamify-adoption **Implementation Types:** diff --git a/components/actions/072.md b/components/actions/072.md index bfb923f5..2770c6c1 100644 --- a/components/actions/072.md +++ b/components/actions/072.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 72-track-kpis **Implementation Types:** diff --git a/components/actions/073.md b/components/actions/073.md index 4e0ad089..505ef18d 100644 --- a/components/actions/073.md +++ b/components/actions/073.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 73-inventory-license **Implementation Types:** diff --git a/components/actions/074.md b/components/actions/074.md index 5b3c0681..386537f3 100644 --- a/components/actions/074.md +++ b/components/actions/074.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 74-document-license **Implementation Types:** diff --git a/components/actions/075.md b/components/actions/075.md index c852e5a2..8b0c47b3 100644 --- a/components/actions/075.md +++ b/components/actions/075.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 75-integrate-billing **Implementation Types:** diff --git a/components/actions/076.md b/components/actions/076.md index 3893186a..3ab3ab36 100644 --- a/components/actions/076.md +++ b/components/actions/076.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 76-validate-utilization **Implementation Types:** diff --git a/components/actions/077.md b/components/actions/077.md index a1c8aedb..c6b85760 100644 --- a/components/actions/077.md +++ b/components/actions/077.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 77-influence-workloa **Implementation Types:** diff --git a/components/actions/078.md b/components/actions/078.md index db1e3d93..faf9bee0 100644 --- a/components/actions/078.md +++ b/components/actions/078.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 78-publish-license **Implementation Types:** diff --git a/components/actions/079.md b/components/actions/079.md index dee66b41..797579ed 100644 --- a/components/actions/079.md +++ b/components/actions/079.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 79-document-commit **Implementation Types:** diff --git a/components/actions/080.md b/components/actions/080.md index 34b20df8..f02fc6b8 100644 --- a/components/actions/080.md +++ b/components/actions/080.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 80-build-commitment **Implementation Types:** diff --git a/components/actions/081.md b/components/actions/081.md index 61cf3d54..890b19e1 100644 --- a/components/actions/081.md +++ b/components/actions/081.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.0 +**Status:** Proposed + **Slug:** 81-purchase-commit **Implementation Types:** diff --git a/components/actions/082.md b/components/actions/082.md index fc07b1a8..dd5d2eaa 100644 --- a/components/actions/082.md +++ b/components/actions/082.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.0 +**Status:** Proposed + **Slug:** 82-track-roi **Implementation Types:** diff --git a/components/actions/083.md b/components/actions/083.md index fcfa9797..5662e155 100644 --- a/components/actions/083.md +++ b/components/actions/083.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.0 +**Status:** Proposed + **Slug:** 83-allocate-upfront **Implementation Types:** diff --git a/components/actions/084.md b/components/actions/084.md index c87f78b2..13aafe3f 100644 --- a/components/actions/084.md +++ b/components/actions/084.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 84-leverage-spot **Implementation Types:** diff --git a/components/actions/085.md b/components/actions/085.md index 8f998ae6..35057249 100644 --- a/components/actions/085.md +++ b/components/actions/085.md @@ -2,6 +2,8 @@ **Specification Version:** 0.6.0 +**Status:** Proposed + **Slug:** 85-agg-emissions-data **Implementation Types:** diff --git a/components/actions/086.md b/components/actions/086.md index 0af709ca..a7864288 100644 --- a/components/actions/086.md +++ b/components/actions/086.md @@ -2,6 +2,8 @@ **Specification Version:** 0.6.0 +**Status:** Proposed + **Slug:** 86-sustainability-metrics **Implementation Types:** diff --git a/components/actions/087.md b/components/actions/087.md index b94bb434..0b7e8011 100644 --- a/components/actions/087.md +++ b/components/actions/087.md @@ -2,6 +2,8 @@ **Specification Version:** 0.6.0 +**Status:** Proposed + **Slug:** 87-carbon-impact **Implementation Types:** diff --git a/components/actions/088.md b/components/actions/088.md index 2d9fee54..5cb3a48e 100644 --- a/components/actions/088.md +++ b/components/actions/088.md @@ -2,6 +2,8 @@ **Specification Version:** 0.6.0 +**Status:** Proposed + **Slug:** 88-carbon-aware-guidance **Implementation Types:** diff --git a/components/actions/089.md b/components/actions/089.md index cb41517d..5f2c7710 100644 --- a/components/actions/089.md +++ b/components/actions/089.md @@ -2,6 +2,8 @@ **Specification Version:** 0.6.0 +**Status:** Proposed + **Slug:** 89-improve-eco-data **Implementation Types:** diff --git a/components/actions/090.md b/components/actions/090.md index d9c6bd2d..b6608947 100644 --- a/components/actions/090.md +++ b/components/actions/090.md @@ -2,6 +2,8 @@ **Specification Version:** 0.6.0 +**Status:** Proposed + **Slug:** 90-sustainability-cost **Implementation Types:** diff --git a/components/actions/091.md b/components/actions/091.md index 8ec1ab07..3a119c90 100644 --- a/components/actions/091.md +++ b/components/actions/091.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 91-define-org **Implementation Types:** diff --git a/components/actions/092.md b/components/actions/092.md index 50653828..86538163 100644 --- a/components/actions/092.md +++ b/components/actions/092.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 92-implement-roadmap **Implementation Types:** diff --git a/components/actions/093.md b/components/actions/093.md index 11c86793..02d99ff2 100644 --- a/components/actions/093.md +++ b/components/actions/093.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 93-integrate-cost **Implementation Types:** diff --git a/components/actions/094.md b/components/actions/094.md index b6e6406d..aab1d034 100644 --- a/components/actions/094.md +++ b/components/actions/094.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 94-publish-finops **Implementation Types:** diff --git a/components/actions/095.md b/components/actions/095.md index 7f03dadb..73200f2a 100644 --- a/components/actions/095.md +++ b/components/actions/095.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 95-drive-stakeholder **Implementation Types:** diff --git a/components/actions/096.md b/components/actions/096.md index 772fa7ea..2cf86a9e 100644 --- a/components/actions/096.md +++ b/components/actions/096.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 96-automate-tasks **Implementation Types:** diff --git a/components/actions/097.md b/components/actions/097.md index 815c01f1..875c3c55 100644 --- a/components/actions/097.md +++ b/components/actions/097.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 97-assess-skills **Implementation Types:** diff --git a/components/actions/098.md b/components/actions/098.md index 71244c20..8788727b 100644 --- a/components/actions/098.md +++ b/components/actions/098.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 98-develop-role **Implementation Types:** diff --git a/components/actions/099.md b/components/actions/099.md index 78acbef9..4baaad37 100644 --- a/components/actions/099.md +++ b/components/actions/099.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 99-offer-certification **Implementation Types:** diff --git a/components/actions/100.md b/components/actions/100.md index 38368998..1f38ae29 100644 --- a/components/actions/100.md +++ b/components/actions/100.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 100-leverage-vendor **Implementation Types:** diff --git a/components/actions/101.md b/components/actions/101.md index e350f783..0d20314c 100644 --- a/components/actions/101.md +++ b/components/actions/101.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 101-track-training **Implementation Types:** diff --git a/components/actions/102.md b/components/actions/102.md index a8c00397..e2329ce5 100644 --- a/components/actions/102.md +++ b/components/actions/102.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.0 +**Status:** Proposed + **Slug:** 102-draft-policies **Implementation Types:** diff --git a/components/actions/103.md b/components/actions/103.md index 0778b4ed..2d034a89 100644 --- a/components/actions/103.md +++ b/components/actions/103.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.0 +**Status:** Proposed + **Slug:** 103-publish-guideline **Implementation Types:** diff --git a/components/actions/104.md b/components/actions/104.md index 547a6ce5..0ca4cd80 100644 --- a/components/actions/104.md +++ b/components/actions/104.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.0 +**Status:** Proposed + **Slug:** 104-educate-policy **Implementation Types:** diff --git a/components/actions/105.md b/components/actions/105.md index d3b4ad14..c0117d6d 100644 --- a/components/actions/105.md +++ b/components/actions/105.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 105-compliance-report **Implementation Types:** diff --git a/components/actions/106.md b/components/actions/106.md index e2bed57e..b14e6dbf 100644 --- a/components/actions/106.md +++ b/components/actions/106.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.0 +**Status:** Proposed + **Slug:** 106-iterate-policies **Implementation Types:** diff --git a/components/actions/107.md b/components/actions/107.md index 544d0b47..421094ef 100644 --- a/components/actions/107.md +++ b/components/actions/107.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 107-map-invoices **Implementation Types:** diff --git a/components/actions/108.md b/components/actions/108.md index 18fb90f6..07a87979 100644 --- a/components/actions/108.md +++ b/components/actions/108.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 108-reconcile-rates **Implementation Types:** diff --git a/components/actions/109.md b/components/actions/109.md index 26e0e18a..a209f1bd 100644 --- a/components/actions/109.md +++ b/components/actions/109.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 109-design-chargeback **Implementation Types:** diff --git a/components/actions/110.md b/components/actions/110.md index d7bbc60b..82336b0e 100644 --- a/components/actions/110.md +++ b/components/actions/110.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 110-automate-chargeback **Implementation Types:** diff --git a/components/actions/111.md b/components/actions/111.md index 36c5051d..bf0b1d07 100644 --- a/components/actions/111.md +++ b/components/actions/111.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 111-chargeback-report **Implementation Types:** diff --git a/components/actions/112.md b/components/actions/112.md index aa5b49db..1be0b909 100644 --- a/components/actions/112.md +++ b/components/actions/112.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 112-resolve-variance **Implementation Types:** diff --git a/components/actions/113.md b/components/actions/113.md index 08816aa6..bd4b5b7b 100644 --- a/components/actions/113.md +++ b/components/actions/113.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + **Slug:** 113-define-assess **Implementation Types:** diff --git a/components/actions/114.md b/components/actions/114.md index cef46d2d..c2a7f4b4 100644 --- a/components/actions/114.md +++ b/components/actions/114.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + **Slug:** 114-collect-standard **Implementation Types:** diff --git a/components/actions/115.md b/components/actions/115.md index f06882b9..64695dfc 100644 --- a/components/actions/115.md +++ b/components/actions/115.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + **Slug:** 115-establish-baseli **Implementation Types:** diff --git a/components/actions/116.md b/components/actions/116.md index a2f483af..a83cad61 100644 --- a/components/actions/116.md +++ b/components/actions/116.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + **Slug:** 116-actions-roadmap **Implementation Types:** diff --git a/components/actions/117.md b/components/actions/117.md index 97c19085..f39e6ac7 100644 --- a/components/actions/117.md +++ b/components/actions/117.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.0 +**Status:** Proposed + **Slug:** 117-reassess-progres **Implementation Types:** diff --git a/components/actions/118.md b/components/actions/118.md index 30e1dc45..708a48cc 100644 --- a/components/actions/118.md +++ b/components/actions/118.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 118-create-workload **Implementation Types:** diff --git a/components/actions/119.md b/components/actions/119.md index 13a058a2..028a39b1 100644 --- a/components/actions/119.md +++ b/components/actions/119.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 119-define-success **Implementation Types:** diff --git a/components/actions/120.md b/components/actions/120.md index 46ba0095..f6c01215 100644 --- a/components/actions/120.md +++ b/components/actions/120.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 120-enforce-tagging **Implementation Types:** diff --git a/components/actions/121.md b/components/actions/121.md index 793b5724..6171387b 100644 --- a/components/actions/121.md +++ b/components/actions/121.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 121-align-timelines **Implementation Types:** diff --git a/components/actions/122.md b/components/actions/122.md index c5414173..2374385f 100644 --- a/components/actions/122.md +++ b/components/actions/122.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 122-start-lower **Implementation Types:** diff --git a/components/actions/123.md b/components/actions/123.md index e23baa35..2f7fbdf6 100644 --- a/components/actions/123.md +++ b/components/actions/123.md @@ -2,6 +2,8 @@ **Specification Version:** 0.8.0 +**Status:** Proposed + **Slug:** 123-review-outcomes **Implementation Types:** diff --git a/components/actions/124.md b/components/actions/124.md index b6830ebf..812dd4ae 100644 --- a/components/actions/124.md +++ b/components/actions/124.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.0 +**Status:** Proposed + **Slug:** 124-assess-tooling **Implementation Types:** diff --git a/components/actions/125.md b/components/actions/125.md index 8487435f..0ebc6aa5 100644 --- a/components/actions/125.md +++ b/components/actions/125.md @@ -2,6 +2,8 @@ **Specification Version:** 2.0.1 +**Status:** Accepted + **Slug:** 125-evaluate-build **Implementation Types:** diff --git a/components/actions/126.md b/components/actions/126.md index ef0170bb..26401aef 100644 --- a/components/actions/126.md +++ b/components/actions/126.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + **Slug:** 126-implement-config **Implementation Types:** diff --git a/components/actions/127.md b/components/actions/127.md index e2f7060f..7635e272 100644 --- a/components/actions/127.md +++ b/components/actions/127.md @@ -2,6 +2,8 @@ **Specification Version:** 1.7.0 +**Status:** Accepted + **Slug:** 127-train-users **Implementation Types:** diff --git a/components/actions/128.md b/components/actions/128.md index 0cc8cfa3..39f27e87 100644 --- a/components/actions/128.md +++ b/components/actions/128.md @@ -2,6 +2,8 @@ **Specification Version:** 0.7.0 +**Status:** Proposed + **Slug:** 128-monitor-adoption **Implementation Types:** diff --git a/components/actions/129.md b/components/actions/129.md index 0d4cec63..0b9574c0 100644 --- a/components/actions/129.md +++ b/components/actions/129.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + **Slug:** 129-establish-collab **Implementation Types:** diff --git a/components/actions/130.md b/components/actions/130.md index 982c2022..51f8ea0e 100644 --- a/components/actions/130.md +++ b/components/actions/130.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + **Slug:** 130-align-goals **Implementation Types:** diff --git a/components/actions/131.md b/components/actions/131.md index a903446c..8951271d 100644 --- a/components/actions/131.md +++ b/components/actions/131.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + **Slug:** 131-share-reporting **Implementation Types:** diff --git a/components/actions/132.md b/components/actions/132.md index a17b3405..eb6dd7b2 100644 --- a/components/actions/132.md +++ b/components/actions/132.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + **Slug:** 132-provide-metrics **Implementation Types:** diff --git a/components/actions/133.md b/components/actions/133.md index a608e40d..85625670 100644 --- a/components/actions/133.md +++ b/components/actions/133.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + **Slug:** 133-coordinate-policy **Implementation Types:** diff --git a/components/actions/134.md b/components/actions/134.md index 72881246..be9d974b 100644 --- a/components/actions/134.md +++ b/components/actions/134.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + **Slug:** 134-drive-adoption **Implementation Types:** diff --git a/components/actions/135.md b/components/actions/135.md index 99a6cbf2..9d775754 100644 --- a/components/actions/135.md +++ b/components/actions/135.md @@ -2,6 +2,8 @@ **Specification Version:** 1.5.0 +**Status:** Accepted + **Slug:** None **Implementation Types:** diff --git a/components/actions/136.md b/components/actions/136.md index 1ddff4ba..0d3ab142 100644 --- a/components/actions/136.md +++ b/components/actions/136.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + **Slug:** 136-exec-sponsor **Implementation Types:** diff --git a/components/actions/137.md b/components/actions/137.md index e31871df..c7961eef 100644 --- a/components/actions/137.md +++ b/components/actions/137.md @@ -2,6 +2,8 @@ **Specification Version:** 0.0.1 +**Status:** Proposed + **Slug:** 137-decision-rights **Implementation Types:** diff --git a/components/actions/138.md b/components/actions/138.md index d06d9baa..23b71526 100644 --- a/components/actions/138.md +++ b/components/actions/138.md @@ -2,6 +2,8 @@ **Specification Version:** 0.0.1 +**Status:** Proposed + **Slug:** 138-multiyear-invest **Implementation Types:** diff --git a/components/actions/139.md b/components/actions/139.md index 0407f1e4..b5085a10 100644 --- a/components/actions/139.md +++ b/components/actions/139.md @@ -2,6 +2,8 @@ **Specification Version:** 0.0.1 +**Status:** Proposed + **Slug:** 139-decision-cadence **Implementation Types:** diff --git a/components/capabilities/001.md b/components/capabilities/001.md index f88f1b20..8248eee1 100644 --- a/components/capabilities/001.md +++ b/components/capabilities/001.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + ## Descriptive Statement None diff --git a/components/capabilities/002.md b/components/capabilities/002.md index 67e7661f..be8c0bb6 100644 --- a/components/capabilities/002.md +++ b/components/capabilities/002.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + ## Descriptive Statement None diff --git a/components/capabilities/003.md b/components/capabilities/003.md index c6caf983..1e803337 100644 --- a/components/capabilities/003.md +++ b/components/capabilities/003.md @@ -2,6 +2,8 @@ **Specification Version:** 2.0.0 +**Status:** Accepted + ## Descriptive Statement None diff --git a/components/capabilities/004.md b/components/capabilities/004.md index ed52fe07..dd4c2528 100644 --- a/components/capabilities/004.md +++ b/components/capabilities/004.md @@ -2,6 +2,8 @@ **Specification Version:** 1.1.0 +**Status:** Accepted + ## Descriptive Statement None diff --git a/components/capabilities/005.md b/components/capabilities/005.md index 06553769..131b09bc 100644 --- a/components/capabilities/005.md +++ b/components/capabilities/005.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + ## Descriptive Statement None diff --git a/components/capabilities/006.md b/components/capabilities/006.md index c198eaef..9035e983 100644 --- a/components/capabilities/006.md +++ b/components/capabilities/006.md @@ -2,6 +2,8 @@ **Specification Version:** 1.1.0 +**Status:** Accepted + ## Descriptive Statement None diff --git a/components/capabilities/007.md b/components/capabilities/007.md index 7c78ad60..d3f03bc7 100644 --- a/components/capabilities/007.md +++ b/components/capabilities/007.md @@ -2,6 +2,8 @@ **Specification Version:** 1.1.0 +**Status:** Accepted + ## Descriptive Statement None diff --git a/components/capabilities/008.md b/components/capabilities/008.md index 33fdb1ea..02fbc37a 100644 --- a/components/capabilities/008.md +++ b/components/capabilities/008.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + ## Descriptive Statement None diff --git a/components/capabilities/009.md b/components/capabilities/009.md index 3a3094ef..20758e5e 100644 --- a/components/capabilities/009.md +++ b/components/capabilities/009.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + ## Descriptive Statement None diff --git a/components/capabilities/010.md b/components/capabilities/010.md index 0d258147..e5365257 100644 --- a/components/capabilities/010.md +++ b/components/capabilities/010.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + ## Descriptive Statement None diff --git a/components/capabilities/011.md b/components/capabilities/011.md index 4eb32d08..2b04a743 100644 --- a/components/capabilities/011.md +++ b/components/capabilities/011.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + ## Descriptive Statement None diff --git a/components/capabilities/012.md b/components/capabilities/012.md index 711871dd..95648d34 100644 --- a/components/capabilities/012.md +++ b/components/capabilities/012.md @@ -2,6 +2,8 @@ **Specification Version:** 1.1.0 +**Status:** Accepted + ## Descriptive Statement None diff --git a/components/capabilities/013.md b/components/capabilities/013.md index 88908053..44339179 100644 --- a/components/capabilities/013.md +++ b/components/capabilities/013.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + ## Descriptive Statement None diff --git a/components/capabilities/014.md b/components/capabilities/014.md index 405d5b6b..f9ebf311 100644 --- a/components/capabilities/014.md +++ b/components/capabilities/014.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + ## Descriptive Statement None diff --git a/components/capabilities/015.md b/components/capabilities/015.md index c5b7147d..26d5f695 100644 --- a/components/capabilities/015.md +++ b/components/capabilities/015.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + ## Descriptive Statement None diff --git a/components/capabilities/016.md b/components/capabilities/016.md index 78b2d8c5..9cabbf1e 100644 --- a/components/capabilities/016.md +++ b/components/capabilities/016.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + ## Descriptive Statement None diff --git a/components/capabilities/017.md b/components/capabilities/017.md index 67adcdaf..51f74c72 100644 --- a/components/capabilities/017.md +++ b/components/capabilities/017.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.1 +**Status:** Accepted + ## Descriptive Statement None diff --git a/components/capabilities/018.md b/components/capabilities/018.md index 8e5cde72..bf26515c 100644 --- a/components/capabilities/018.md +++ b/components/capabilities/018.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + ## Descriptive Statement None diff --git a/components/capabilities/019.md b/components/capabilities/019.md index 6e410538..2d71e8a3 100644 --- a/components/capabilities/019.md +++ b/components/capabilities/019.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + ## Descriptive Statement None diff --git a/components/capabilities/020.md b/components/capabilities/020.md index b450b60d..f8ad8e25 100644 --- a/components/capabilities/020.md +++ b/components/capabilities/020.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + ## Descriptive Statement None diff --git a/components/capabilities/021.md b/components/capabilities/021.md index fdfe9833..bd0866be 100644 --- a/components/capabilities/021.md +++ b/components/capabilities/021.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + ## Descriptive Statement None diff --git a/components/capabilities/022.md b/components/capabilities/022.md index 09369565..5a01107d 100644 --- a/components/capabilities/022.md +++ b/components/capabilities/022.md @@ -2,6 +2,8 @@ **Specification Version:** 1.1.0 +**Status:** Accepted + ## Descriptive Statement None diff --git a/components/capabilities/023.md b/components/capabilities/023.md index 9e1948e1..2560f933 100644 --- a/components/capabilities/023.md +++ b/components/capabilities/023.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + ## Descriptive Statement None diff --git a/components/domains/001.md b/components/domains/001.md index 8b76983a..eb547f7b 100644 --- a/components/domains/001.md +++ b/components/domains/001.md @@ -2,6 +2,8 @@ **Specification Version:** 1.1.0 +**Status:** Accepted + ## Descriptive Statement None diff --git a/components/domains/002.md b/components/domains/002.md index 3cdfab15..6506add9 100644 --- a/components/domains/002.md +++ b/components/domains/002.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + ## Descriptive Statement None diff --git a/components/domains/003.md b/components/domains/003.md index 93eec20d..8c2f9d72 100644 --- a/components/domains/003.md +++ b/components/domains/003.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + ## Descriptive Statement None diff --git a/components/domains/004.md b/components/domains/004.md index a170baff..ad193c3d 100644 --- a/components/domains/004.md +++ b/components/domains/004.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + ## Descriptive Statement None diff --git a/components/profiles/001.md b/components/profiles/001.md index 79cb728a..67cfc7ae 100644 --- a/components/profiles/001.md +++ b/components/profiles/001.md @@ -2,6 +2,8 @@ **Specification Version:** 1.0.0 +**Status:** Accepted + ## Descriptive Statement Classic profile featuring controls provided by the FinOps Foundation diff --git a/components/profiles/002.md b/components/profiles/002.md index af3ed8f0..75faf472 100644 --- a/components/profiles/002.md +++ b/components/profiles/002.md @@ -2,6 +2,8 @@ **Specification Version:** 0.0.1 +**Status:** Proposed + ## Descriptive Statement FinOps++ profile that is an extension and reorganization of the FinOps Foundation profile diff --git a/tools/commands/generate/group.py b/tools/commands/generate/group.py index 30dddad1..b4f8d25a 100644 --- a/tools/commands/generate/group.py +++ b/tools/commands/generate/group.py @@ -24,8 +24,34 @@ def generate(): type=click.Choice(list(utils.profiles().keys())), help='Which assessment profile to generate. Defaults to "FinOps++"', ) -def assessment(profile): # pylint: disable=too-many-branches,too-many-statements,too-many-locals - """Generate assessment files from their specifications""" +@click.option( + '--proposed', + is_flag=True, + default=False, + help='Include Proposed components' +) +@click.option( + '--deprecated', + is_flag=True, + default=False, + help='Include Deprecated components' +) +def assessment(profile, proposed, deprecated): + """Generate assessment files from their specifications + + By default, this will generate an assessment and its' corresponding files + for Accepted components. To include Proposed or Deprecated components that are + attached to a higher level component, include those flags. Each flag must be + passed in to include both. + + When these are included, a special assessment excel and framework markdown is + created in the Profile directory for that assessment. They will have the suffix + of '-proposed', '-deprecated' or '-proposed-deprecated' depending on which flags + are passed in. These special files cannot not be checked in. + + Components that are manually specified, i.e not listed by ID, are included by + default to aid with prototypes of new specifications. + """ click.echo(f'Attempting to create assessment for profile={profile}:') domain_files = files('finopspp.specifications.domains') @@ -50,9 +76,22 @@ def assessment(profile): # pylint: disable=too-many-branches,too-many-statements click.secho(f'Domains for profile={profile} must be a list', err=True, fg='red') sys.exit(1) + allowed_statuses = [definitions.StatusEnum.accepted.value] + suffix = '' + if proposed: + allowed_statuses.append( + definitions.StatusEnum.proposed.value + ) + suffix += '-proposed' + if deprecated: + allowed_statuses.append( + definitions.StatusEnum.deprecated.value + ) + suffix += '-deprecated' + # pull in formatted domains data-dict domains = helpers.domains_collector( - profile, profile_spec, domain_files, cap_files, action_files + profile, profile_spec, domain_files, cap_files, action_files, allowed_statuses ) # check if assessment directory exists for this profile @@ -66,13 +105,13 @@ def assessment(profile): # pylint: disable=too-many-branches,too-many-statements os.mkdir(base_path) # create assessment framework overview markdown - markdown.assessment_generate(profile, profile_spec, base_path, domains) + markdown.assessment_generate(profile, profile_spec, base_path, domains, suffix) # next try and create the workbook for this profile. - excel.assessment_generate(profile, base_path, domains) + excel.assessment_generate(profile, base_path, domains, suffix) # finally, create the assessment archive file for the current version - archive.assessment_generate(profile, profile_spec, base_path, domains) + archive.assessment_generate(profile, profile_spec, base_path, domains, suffix) @generate.command() @@ -126,6 +165,7 @@ def components(specification_type): spec = full_yaml.get('Specification') metadata = full_yaml.get('Metadata') or {} spec['version'] = metadata.get('Version') + spec['status'] = metadata.get('Status') # update all the immediate subspecs listed on the spec in places for subspec in spec.get(subspec_type.capitalize(), []): diff --git a/tools/commands/generate/helpers.py b/tools/commands/generate/helpers.py index bb56f640..c2981fb2 100644 --- a/tools/commands/generate/helpers.py +++ b/tools/commands/generate/helpers.py @@ -74,7 +74,7 @@ def overrides_collector(spec, profile, override_type='std'): return validated_override.model_dump() -def domains_collector(profile, profile_spec, domain_files, cap_files, action_files): +def domains_collector(profile, profile_spec, domain_files, cap_files, action_files, allowed_statuses): """Helper designed to collect and return a specific format for a domains dict This format is required to work properly with the composers to @@ -92,6 +92,13 @@ def domains_collector(profile, profile_spec, domain_files, cap_files, action_fil capabilities = [] metadata, spec = sub_specification_collector(domain, domain_files) + + # continue early if the Domain Status exists and is not in the + # allowed statuses list + status = metadata.get('Status') + if status and status not in allowed_statuses: + continue + domain_override = overrides_collector(spec, profile) domain_drops = [drop['ID'] for drop in domain_override.get('DropIDs')] @@ -135,6 +142,12 @@ def domains_collector(profile, profile_spec, domain_files, cap_files, action_fil if spec_id and spec_id in domain_drops: continue + # continue early if the Capability Status exists and is not in the + # allowed statuses list + status = metadata.get('Status') + if status and status not in allowed_statuses: + continue + cap_override = overrides_collector(spec, profile) cap_drops = [drop['ID'] for drop in cap_override.get('DropIDs')] @@ -176,6 +189,12 @@ def domains_collector(profile, profile_spec, domain_files, cap_files, action_fil if spec_id and spec_id in cap_drops: continue + # continue early if the Action Status exists and is not in the + # allowed statuses list + status = metadata.get('Status') + if status and status not in allowed_statuses: + continue + act_override = overrides_collector(spec, profile, 'action') if act_override.get('TitleUpdate'): diff --git a/tools/composers/archive.py b/tools/composers/archive.py index 204eed7f..e6854999 100644 --- a/tools/composers/archive.py +++ b/tools/composers/archive.py @@ -6,7 +6,7 @@ import click -def assessment_generate(profile, profile_spec, base_path, domains): +def assessment_generate(profile, profile_spec, base_path, domains, suffix): """Generate Assessment archive files""" click.echo(f'Attempting to historical archive entry for profile={profile}:') today = str(datetime.date.today()) @@ -41,7 +41,7 @@ def assessment_generate(profile, profile_spec, base_path, domains): # need be. archive_path = os.path.join( history_path, - f'{today}.json' + f'{today}{suffix}.json' ) with open(archive_path, 'w', encoding='utf-8') as outfile: json.dump(profile_spec, outfile) diff --git a/tools/composers/excel.py b/tools/composers/excel.py index 75bd9911..da8d5348 100644 --- a/tools/composers/excel.py +++ b/tools/composers/excel.py @@ -183,14 +183,14 @@ def format_scoring_sheet(scoring_sheet, dataframe, workbook): scoring_sheet.set_column('G:H', 40, text_wrap_format) -def assessment_generate(profile, base_path, domains): +def assessment_generate(profile, base_path, domains, suffix): """Generate Excel files""" click.echo(f'Attempting to generate assessment.xlsx for profile={profile}:') dataframe = helpers.normalize(domains) out_path = os.path.join( base_path, - 'assessment.xlsx' + f'assessment{suffix}.xlsx' ) with pandas.ExcelWriter(out_path, engine='xlsxwriter') as writer: workbook = writer.book diff --git a/tools/composers/markdown.py b/tools/composers/markdown.py index d463d857..ae0151f2 100644 --- a/tools/composers/markdown.py +++ b/tools/composers/markdown.py @@ -7,7 +7,7 @@ Templates = PackageLoader('finopspp', 'templates') -def assessment_generate(profile, profile_spec, base_path, domains): +def assessment_generate(profile, profile_spec, base_path, domains, suffix): """Generate Assessment markdown files""" click.echo(f'Attempting to generate framework for profile={profile}:') @@ -38,7 +38,7 @@ def assessment_generate(profile, profile_spec, base_path, domains): # from the rendered output out_path = os.path.join( base_path, - 'framework.md' + f'framework{suffix}.md' ) with open(out_path, 'w', encoding='utf-8') as outfile: outfile.write(output) diff --git a/tools/templates/actions.md.j2 b/tools/templates/actions.md.j2 index 35fc2588..425b9732 100644 --- a/tools/templates/actions.md.j2 +++ b/tools/templates/actions.md.j2 @@ -2,6 +2,8 @@ **Specification Version:** {{ spec.version | default('Not specified') }} +**Status:** {{ spec.status | default('Not specified') }} + **Slug:** {{ spec.Slug }} **Implementation Types:** diff --git a/tools/templates/capabilities.md.j2 b/tools/templates/capabilities.md.j2 index 6e406c23..beee1def 100644 --- a/tools/templates/capabilities.md.j2 +++ b/tools/templates/capabilities.md.j2 @@ -2,6 +2,8 @@ **Specification Version:** {{ spec.version | default('Not specified') }} +**Status:** {{ spec.status | default('Not specified') }} + ## Descriptive Statement {{ spec.Description }} diff --git a/tools/templates/domains.md.j2 b/tools/templates/domains.md.j2 index eedb1da7..3870d732 100644 --- a/tools/templates/domains.md.j2 +++ b/tools/templates/domains.md.j2 @@ -2,6 +2,8 @@ **Specification Version:** {{ spec.version | default('Not specified') }} +**Status:** {{ spec.status | default('Not specified') }} + ## Descriptive Statement {{ spec.Description }} diff --git a/tools/templates/profiles.md.j2 b/tools/templates/profiles.md.j2 index 9b73fd3c..c7b9f5e6 100644 --- a/tools/templates/profiles.md.j2 +++ b/tools/templates/profiles.md.j2 @@ -2,6 +2,8 @@ **Specification Version:** {{ spec.version | default('Not specified') }} +**Status:** {{ spec.status | default('Not specified') }} + ## Descriptive Statement {{ spec.Description }} diff --git a/tools/tests/test_assessment_generation.py b/tools/tests/test_assessment_generation.py index 8dcc34ec..12ebe582 100644 --- a/tools/tests/test_assessment_generation.py +++ b/tools/tests/test_assessment_generation.py @@ -25,8 +25,12 @@ def test_normalize(): profile_spec['version'] = profile_yaml['Metadata']['Version'] # pull in formatted domains data-dict + # example specifications should only ever be in the Proposed status + allowed_statuses = [ + 'Proposed' + ] domains = domains_collector( - profile, profile_spec, domain_files, cap_files, action_files + profile, profile_spec, domain_files, cap_files, action_files, allowed_statuses ) assert domains From 226dab5640d46d591364b554646f5d20849b85a0 Mon Sep 17 00:00:00 2001 From: Travis Salas Cox Date: Sun, 26 Apr 2026 12:40:31 -0500 Subject: [PATCH 2/3] clean up linting issues --- tools/commands/generate/group.py | 6 +----- tools/commands/generate/helpers.py | 7 ++++++- tools/tests/test_assessment_generation.py | 6 +----- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/tools/commands/generate/group.py b/tools/commands/generate/group.py index b4f8d25a..b96be347 100644 --- a/tools/commands/generate/group.py +++ b/tools/commands/generate/group.py @@ -53,10 +53,6 @@ def assessment(profile, proposed, deprecated): default to aid with prototypes of new specifications. """ click.echo(f'Attempting to create assessment for profile={profile}:') - - domain_files = files('finopspp.specifications.domains') - cap_files = files('finopspp.specifications.capabilities') - action_files = files('finopspp.specifications.actions') with open(utils.ProfilesMap[profile], 'r', encoding='utf-8') as yaml_file: profile_yaml = yaml.safe_load( yaml_file @@ -91,7 +87,7 @@ def assessment(profile, proposed, deprecated): # pull in formatted domains data-dict domains = helpers.domains_collector( - profile, profile_spec, domain_files, cap_files, action_files, allowed_statuses + profile, profile_spec, allowed_statuses ) # check if assessment directory exists for this profile diff --git a/tools/commands/generate/helpers.py b/tools/commands/generate/helpers.py index c2981fb2..fd406368 100644 --- a/tools/commands/generate/helpers.py +++ b/tools/commands/generate/helpers.py @@ -1,5 +1,6 @@ """Helpers file for generate command group""" import sys +from importlib.resources import files import click import yaml @@ -74,7 +75,7 @@ def overrides_collector(spec, profile, override_type='std'): return validated_override.model_dump() -def domains_collector(profile, profile_spec, domain_files, cap_files, action_files, allowed_statuses): +def domains_collector(profile, profile_spec, allowed_statuses): """Helper designed to collect and return a specific format for a domains dict This format is required to work properly with the composers to @@ -84,6 +85,10 @@ def domains_collector(profile, profile_spec, domain_files, cap_files, action_fil When testing, this will most likely show in your terminal, but can be safely ignored. """ + domain_files = files('finopspp.specifications.domains') + cap_files = files('finopspp.specifications.capabilities') + action_files = files('finopspp.specifications.actions') + domains = [] # all profile specs should have a Domains field that is a list by this point. # if it doesn't exist, just let it fail out on a python error diff --git a/tools/tests/test_assessment_generation.py b/tools/tests/test_assessment_generation.py index 12ebe582..8df60a66 100644 --- a/tools/tests/test_assessment_generation.py +++ b/tools/tests/test_assessment_generation.py @@ -1,7 +1,6 @@ """Test composers""" import json import os -from importlib.resources import files import yaml @@ -13,9 +12,6 @@ def test_normalize(): """Test for the composer util 'normalize'""" profile = 'Example Profile' - domain_files = files('finopspp.specifications.domains') - cap_files = files('finopspp.specifications.capabilities') - action_files = files('finopspp.specifications.actions') profile_map = utils.profiles() with open(profile_map[profile], 'r', encoding='utf-8') as yaml_file: profile_yaml = yaml.safe_load( @@ -30,7 +26,7 @@ def test_normalize(): 'Proposed' ] domains = domains_collector( - profile, profile_spec, domain_files, cap_files, action_files, allowed_statuses + profile, profile_spec, allowed_statuses ) assert domains From 3283964a8efbeb4bef4a8e33784b688c5e4aec79 Mon Sep 17 00:00:00 2001 From: Travis Salas Cox Date: Sun, 26 Apr 2026 12:46:45 -0500 Subject: [PATCH 3/3] Fix test example case --- specifications/actions/000.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specifications/actions/000.yaml b/specifications/actions/000.yaml index 1291e05d..2e3a4c38 100644 --- a/specifications/actions/000.yaml +++ b/specifications/actions/000.yaml @@ -3,7 +3,7 @@ Metadata: Adopted: '2025-09-04' # ISO 8601 date format Modified: '2025-09-04' # ISO 8601 date format Version: 1.0.0 # Based on Semantic Versioning - Status: Accepted # Lifecycle status of the specification + Status: Proposed # Lifecycle status of the specification Approvers: # Record of the initial approvers for a specification - Name: Reviewer 1 Email: review1@example.com
- 037: Establish Forecasting Approach -

Specification Version: 0.7.0

-
038: Collect Business Drivers Regularly @@ -1056,36 +690,12 @@ Finops++ profile that is an extension and reorganization of the finops foundatio - - - - - - - - - - - -
- 102: Draft Cloud Financial Policies -

Specification Version: 0.7.0

-
- 103: Publish Guidelines & Guardrails -

Specification Version: 0.7.0

-
- 104: Educate Stakeholders on Policy -

Specification Version: 0.7.0

-
105: Monitor Compliance & Report Breaches

Specification Version: 1.7.0

- 106: Iterate Policies Based on Feedback -

Specification Version: 0.7.0

-