Free lesson · GenAI Solutions & Delivery
ADR గవర్నెన్స్ డాష్బోర్డ్ మరియు కంప్లయన్స్ ఆడిట్ను సృష్టించండి
మీరు సంస్థ-వ్యాప్తంగా ఆర్కిటెక్చర్ డెసిషన్ ఆరోగ్యం, కవరేజ్ లోపాలు మరియు కంప్లయన్స్ స్థితిపై దృశ్యమానతను అందించే ADRGovernanceDashboardను నిర్మిస్తారు. compute_coverage() తో CoverageAnalyzerను అమలు చేయండి, ఇది service_id VARCHAR(64) PRIMARY KEY, service_name VARCHAR(128), team VARCHAR(64), deployed_at TIMESTAMPTZ, technology_stack JSONB, has_llm_integration BOOLEAN కాలమ్లు ఉన్న deployed_services PostgreSQL టేబుల్ నుండి సిస్టమ్లో డిప్లాయ్ చేసిన సర్వీసులను స్కాన్ చేసి, సంబంధిత ADRలు లేని సర్వీసులను గుర్తించడానికి architecture_decisions తో క్రాస్-రిఫరెన్స్ చేస్తుంది, మరియు total_services: int, covered_services: int, coverage_pct: float, uncovered_services: list[UncoveredService] ఉన్న ADRCoverageReport Pydantic మోడల్ను తిరిగి ఇస్తుంది; ఇందులో ప్రతి ఒక్కదానికి service_name: str, team: str, risk_level: str ఉంటాయి, ఇది సర్వీసుకు డాక్యుమెంట్ చేసిన నిర్ణయాలు లేకుండా LLM ఇంటిగ్రేషన్ ఉందా అనే దాని ఆధారంగా నిర్ణయించబడుతుంది. కవరేజ్ శాతాన్ని 60% (పసుపు) మరియు 80% (ఆకుపచ్చ) థ్రెషోల్డ్లతో గేజ్గా చూపించే Grafana ప్యానెల్ను నిర్మించండి, అలాగే కవర్ కాని సర్వీసులను రిస్క్ ప్రకారం క్రమబద్ధీకరించి జాబితా చేసే టేబుల్ను కూడా జోడించండి. submit_for_review() తో ReviewWorkflowEngineను అమలు చేయండి, ఇది ఒక ADRను PROPOSED నుండి PENDING_REVIEW కు మార్చి, review_id VARCHAR(64) PRIMARY KEY, adr_id VARCHAR(64), reviewer VARCHAR(64), due_date TIMESTAMPTZ, status VARCHAR(16) (PENDING, APPROVED, REJECTED, EXPIRED), review_comment TEXT, reviewed_at TIMESTAMPTZ కాలమ్లు ఉన్న adr_reviews టేబుల్లో ఒక ఎంట్రీని సృష్టిస్తుంది. asyncio బ్యాక్గ్రౌండ్ టాస్క్ ద్వారా రోజువారీ షెడ్యూల్ చేసిన టాస్క్గా నడిచే check_expiry()ను నిర్మించండి, ఇది due_date దాటినా రివ్యూ కార్యకలాపం లేని ADRలను EXPIRED గా గుర్తించి, adr_reviews_expired_total Prometheus కౌంటర్ను విడుదల చేస్తుంది. reviewer: str, review_comment: str ఉన్న ApprovalRequestను స్వీకరించే POST /api/v1/adrs/{adr_id}/approve మరియు reviewer: str, review_comment: str, required_changes: list[str] ఉన్న RejectionRequestను స్వీకరించే POST /api/v1/adrs/{adr_id}/rejectను అమలు చేయండి. generate_report() తో ComplianceReportGeneratorను నిర్మించండి, ఇది ఈ క్రింది వాటిని సమీకరిస్తుంది: SELECT status, COUNT(*) FROM architecture_decisions GROUP BY status ఉపయోగించి స్థితి వారీగా మొత్తం ADRలు, AVG(accepted_at - created_at) ఉపయోగించి PROPOSED నుండి ACCEPTED వరకు సగటు సమయం, కవరేజ్ శాతం, పాతబడిన ADRల సంఖ్య, డిపెండెన్సీ గ్రాఫ్ నుండి తెరిచి ఉన్న కాన్ఫ్లిక్ట్ల సంఖ్య; మరియు report_id: str, generated_at: datetime, total_adrs: int, adrs_by_status: dict[str, int], avg_review_time_days: float, coverage_pct: float, stale_count: int, conflict_count: int, governance_score: float ఉన్న GovernanceComplianceReport Pydantic మోడల్ను అవుట్పుట్ చేస్తుంది. రిపోర్టును తిరిగి ఇచ్చే GET /api/v1/governance/report ఎండ్పాయింట్ను బహిర్గతం చేయండి. ఈ ప్యానెల్లతో సమగ్ర Grafana డాష్బోర్డ్ను సృష్టించండి: ADR స్థితి పంపిణీ పై చార్ట్, కవరేజ్ గేజ్, 90 రోజులపై పాతబడటం ట్రెండ్ లైన్, రివ్యూ పైప్లైన్ ఫనెల్ (PROPOSED -> PENDING -> APPROVED), మరియు కాన్ఫ్లిక్ట్ సంఖ్య టైమ్ సిరీస్. కవరేజ్ (40%), తాజాదనం (30%), మరియు కాన్ఫ్లిక్ట్-రహిత నిష్పత్తి (30%) యొక్క వెయిటెడ్ సగటుగా లెక్కించిన adr_governance_score Prometheus గేజ్ను విడుదల చేయండి.
Course: GenAI Architecture & Design Patterns · Chapter 1 · GenAI ADR Engine
Free to read — no subscription required.
పరిచయం
మీరు ADR యంత్రాంగాన్ని రెండు వేర్వేరు పాఠకుల ద్వారా — లైవ్ స్థితి అవసరమైన ఆపరేటర్ మరియు మార్పులేని స్నాప్షాట్ అవసరమైన ఆడిటర్ — బయటకు తీసుకురాకుండా నిర్మిస్తే, గవర్నెన్స్ ప్రోగ్రామ్ మూడు నెలల తర్వాత ఎవరూ ఉటంకించలేని ఒకే ఒక లైవ్ పేజీగా కుప్పకూలిపోతుంది, మరియు SOC 2 సాక్ష్యాల సేకరణ ఒక పురావస్తు ప్రాజెక్ట్గా మారుతుంది. లైవ్ డ్యాష్బోర్డ్ను కంప్లయన్స్ ఆర్టిఫ్యాక్ట్తో కలగాపులగం చేసే బృందాలు, ఒక వారం వ్యవధిలో ఇద్దరు పాఠకులు తమ గమనికలను పోల్చి వేర్వేరు సంఖ్యలను చూసిన మొదటిసారే నమ్మకాన్ని కోల్పోతాయి. ఈ పాఠం ముగిసేసరికి, మీరు ఒకే కంప్లయన్స్ ఎవాల్యుయేటర్ను ఆపరేటర్ల కోసం Prometheus స్క్రేప్ పాత్గా మరియు ఆడిటర్ల కోసం హ్యాష్ చేసిన JSON-ప్లస్-మార్క్డౌన్ ఆర్టిఫ్యాక్ట్గా విడగొట్టగలుగుతారు, మరియు ఆ రెండు సర్ఫేస్లు ఎప్పుడూ ఒకే కోడ్ పాత్ను ఎందుకు పంచుకోకూడదో తర్కించగలుగుతారు.
ముఖ్య పదజాలం
- ComplianceReport:
findings, బహుళ-అక్షాలfleet_counts, మరియు ఒకsnapshot_hashను మోసుకెళ్లే సీరియలైజ్ చేయగల ఆడిట్ ఆర్టిఫ్యాక్ట్; ఇది CI ఆర్కైవ్ల కోసం కానానికల్ JSON గా మరియు లీడర్షిప్ ఈమెయిల్ కోసం మార్క్డౌన్గా రెండర్ అవుతుంది. - snapshot_hash: సార్ట్-కీ చేసిన రిపోర్ట్ బాడీపై లెక్కించిన SHA-256 డైజెస్ట్, దీని వలన ఏ పాఠకుడైనా ఆర్కైవ్ చేసిన ఆర్టిఫ్యాక్ట్ లీడర్షిప్ చూసినదానితో సరిపోలుతుందో లేదో ధృవీకరించగలరు.
- ఆపరేషనల్/ఆడిట్ సరిహద్దు: లైవ్ Prometheus ఎక్స్పోర్టర్ (ఆపరేటర్ కోసం సత్యం యొక్క మూలం) మరియు హ్యాష్ చేసిన JSON-ప్లస్-మార్క్డౌన్ ఆర్టిఫ్యాక్ట్ (ఆడిటర్ కోసం సత్యం యొక్క మూలం) మధ్య కఠినమైన విభజన — ఈ రెండు సర్ఫేస్లు ఎప్పుడూ ఒకే కోడ్ పాత్ను పంచుకోకూడదు.
భావనలు
ఆడిట్ కేడెన్స్ మరియు ఆపరేషనల్/ఆడిట్ సరిహద్దు
పూర్తి ComplianceAuditor.audit రెండు సందర్భాల్లో నడుస్తుంది. మొదటిది, ADR రిజిస్ట్రీ డైరెక్టరీని తాకే main కు జరిగే ప్రతి మెర్జ్పై ఒక CI స్టెప్గా — ఫలితంగా వచ్చే JSON బిల్డ్ ఆర్టిఫ్యాక్ట్గా అప్లోడ్ అవుతుంది మరియు మార్క్డౌన్ PR కామెంట్గా పోస్ట్ అవుతుంది, తద్వారా రివ్యూయర్లు మెర్జ్కు ముందే కంప్లయన్స్ ప్రభావాన్ని చూడగలరు. రెండవది, ప్రతి రాత్రి 02:00 UTC కి ఫైర్ అయ్యే Kubernetes CronJob గా, ఇది హ్యాష్ చేసిన JSON ను ఆడిట్ ఆర్కైవ్ బకెట్కు రాస్తుంది, మరియు ప్రతి నెల మొదటి తేదీన అదనంగా మార్క్డౌన్ను బృందం మరియు యజమాని వారీగా రోల్ అప్ చేసిన లీడర్షిప్ ఈమెయిల్గా రెండర్ చేస్తుంది. ఆడిటర్ కోసం CronJob సత్యం యొక్క మూలం; ఆపరేటర్ కోసం లైవ్ ఎక్స్పోర్టర్ సత్యం యొక్క మూలం.
లీడర్షిప్ ఈమెయిల్ పూర్తిగా ఆడిట్ రిపోర్ట్ నుండే ఉత్పన్నమవుతుంది — లైవ్ ఎక్స్పోర్టర్ నుండి కాదు — తద్వారా CEO ఇన్బాక్స్లోని సంఖ్యలు బకెట్లో ఆర్కైవ్ చేసిన JSON తో మరియు ఈమెయిల్ చివర ముద్రించిన హ్యాష్తో సరిపోలుతాయి. యజమాని వారీగా రోల్ అప్ చేసిన టేబుల్ fleet_counts["reviewer"] నుండి అవరోహణ క్రమంలో సార్ట్ చేసి వస్తుంది, ప్రతి వరుసకు ఆ రివ్యూయర్ యొక్క ADR లలో ఎన్ని SLA ఉల్లంఘనకు గురయ్యాయో అనే వివరణ జతచేయబడుతుంది. గవర్నెన్స్ ప్రోగ్రామ్లో సగభాగాన్ని నిశ్శబ్దంగా అడ్డుకుంటున్న బాటిల్నెక్ ఇంజనీర్ను బయటపెట్టేది ఈ ఒకే ఒక టేబుల్.
ఆపరేటింగ్ క్రమశిక్షణ
- ComplianceReport.snapshot_hash ను భారం మోసే అంశంగా పరిగణించండి. ధృవీకరించగల హ్యాష్ లేకుండా ఆర్కైవ్ బకెట్లో చేరే ఏ ఆర్టిఫ్యాక్ట్ అయినా పాడైనదే; నెలవారీ ఈమెయిల్ హ్యాష్ను ముద్రించాలి, తద్వారా ఏ పాఠకుడైనా ఆర్కైవ్ నుండి తీసిన JSON లీడర్షిప్ చూసినదానితో సరిపోలుతుందో లేదో ధృవీకరించగలరు.
- ఆడిటర్ సర్ఫేస్ను ఎప్పుడూ లైవ్ ఎక్స్పోర్టర్ ఎండ్పాయింట్ నుండి సర్వ్ చేయకండి. ఒక రెగ్యులేటర్ గత మార్చి నెల కంప్లయన్స్ స్థితిని అడిగితే, ఆర్కైవ్ చేసిన హ్యాష్ చేసిన JSON ను చూపించండి, Grafana టైమ్-రేంజ్ క్వెరీని కాదు — డౌన్సాంప్లింగ్ సరిహద్దును దాటిన తర్వాత Grafana రిటెన్షన్ విండోలు చారిత్రక ఖచ్చితత్వం గురించి అబద్ధం చెబుతాయి.
- మూడు కోర్ కంప్లయన్స్ చెక్లను (C-001, C-002, C-003) రిలీజ్ల మధ్య మార్పులేనివిగా ఉంచండి. కొత్త చెక్లను (C-004 నుండి ముందుకు) స్వేచ్ఛగా జోడించండి, కానీ ఇప్పటికే ఉన్న చెక్ను పేరు మార్చడం లేదా సంఖ్య మార్చడం ప్రతి చారిత్రక రిపోర్ట్ పోలికను మరియు check_id ద్వారా ఫిల్టర్ చేసే ప్రతి ఆడిట్-ట్రెయిల్ క్వెరీని విచ్ఛిన్నం చేస్తుంది.
- లీడర్షిప్ ఈమెయిల్ నెలవారీ అయినప్పటికీ పూర్తి ఆడిట్ను ప్రతి రాత్రి నడపండి. రాత్రివారీ కేడెన్స్ ఇరవై నాలుగు గంటల్లోపు రిగ్రెషన్లను పట్టుకుంటుంది; నెలవారీ కేడెన్స్ కేవలం రిపోర్టింగ్ లయ మాత్రమే. ఈ రెండు కేడెన్స్లు స్వతంత్రమైనవి మరియు స్వతంత్రంగానే ఉండాలి.
- adr_review_sla_breach_total > 0 పై హెచ్చరికకు ఒక వారం, పేజ్కు ఇరవై నాలుగు గంటలు అనే సివియారిటీ లాడర్తో అలర్ట్ చేయండి. ఒకే ఒక SLA ఉల్లంఘనకు ఆన్-కాల్ను పేజ్ చేయడం శబ్దం; ఉల్లంఘనలు ఒక బృందం యొక్క రివ్యూ సామర్థ్యానికి మించి పేరుకుపోయినప్పుడు పేజ్ చేయడం సంకేతం.
- ఎక్స్పోర్టర్ స్క్రేప్ పాత్ 500 ms వద్ద టైమ్ అవుట్ అయ్యేలా వైర్ చేయండి. అగ్రిగేటర్ ఇన్-మెమరీ రిజిస్ట్రీపై ఒక ప్యూర్ ఫంక్షన్, కాబట్టి దానికన్నా నెమ్మదిగా ఉండే ఏదైనా రిజిస్ట్రీ మెమరీలో సరిపోయే పరిమాణాన్ని దాటి పెరిగిందని మరియు పేజినేట్ చేసిన కాష్ లేయర్ అవసరమని సూచిస్తుంది — నెమ్మదైన స్క్రేప్ టైమ్ సిరీస్ నుండి మెట్రిక్లను నిశ్శబ్దంగా వదిలేయకుండా చూడండి.
- ఆడిట్ ఆర్కైవ్ బకెట్ను ఆబ్జెక్ట్-లాక్ ఎనేబుల్ చేసి మరియు కనీసం ఏడు సంవత్సరాల రిటెన్షన్ పాలసీతో నిల్వ చేయండి. కంప్లయన్స్ రిపోర్ట్ సాక్ష్యం; సాక్ష్యం దాన్ని రూపొందించిన ఇంజనీర్ల కన్నా ఎక్కువ కాలం జీవించాలి, మరియు ఆ వాగ్దానాన్ని ఆశాజనకంగా కాకుండా అమలుచేయదగినదిగా చేసేది బకెట్ పాలసీ.
కోడ్ వాక్త్రూ
ఆపరేషనల్/ఆడిట్ సరిహద్దును ఇప్పుడే గీసిన తర్వాత, మీరు ఇప్పుడు రెండు సర్ఫేస్లకూ ఆహారం అందించే ఒకే ఎవాల్యుయేటర్ను అమలు చేస్తారు. ComplianceAuditor యంత్రం-తనిఖీ చేయగల ప్రశ్నలకు — ఇక్కడ, త్రైమాసిక రివ్యూ SLA లు గౌరవించబడుతున్నాయా? — జవాబిస్తుంది, మరియు CI ఆర్టిఫ్యాక్ట్ల కోసం JSON కు మరియు లీడర్షిప్ ఈమెయిల్ కోసం మార్క్డౌన్కు నిర్ణాయకంగా సీరియలైజ్ అయ్యే ComplianceReport ను విడుదల చేస్తుంది. రెండు డిజైన్ అంశాలు భారం మోసేవి: బహుళ-అక్షాల fleet_counts (స్థితి, వర్గం, రివ్యూయర్, SLA ఉల్లంఘనలు) మరియు ఆర్కైవ్ చేసిన ఆర్టిఫ్యాక్ట్ను ట్యాంపర్ చేయలేదని నిరూపించే snapshot_hash.
Code snippetpython
1from dataclasses import dataclass, field, asdict 2from datetime import datetime, timedelta 3from hashlib import sha256 4import json 5 6@dataclass 7class ComplianceFinding: 8 check_id: str 9 description: str 10 passed: bool 11 failing_items: list[str] = field(default_factory=list) 12 severity: str = "info" 13 14@dataclass 15class ComplianceReport: 16 generated_at: datetime 17 findings: list[ComplianceFinding] 18 fleet_counts: dict[str, dict[str, int]] 19 snapshot_hash: str = "" 20 21 def to_json(self) -> str: 22 body = asdict(self) 23 body["generated_at"] = self.generated_at.isoformat() 24 return json.dumps(body, sort_keys=True, indent=2) 25 26class ComplianceAuditor: 27 def __init__(self, sla_days: int = 90): 28 self.sla_days = sla_days 29 30 def audit(self, adrs: list[dict]) -> ComplianceReport: 31 now = datetime.utcnow() 32 breached = { 33 a["reviewer"] for a in adrs 34 if (now - datetime.fromisoformat(a["last_reviewed_at"])) 35 > timedelta(days=self.sla_days) 36 } 37 by_reviewer: dict[str, int] = {} 38 for a in adrs: 39 by_reviewer[a["reviewer"]] = by_reviewer.get(a["reviewer"], 0) + 1 40 findings = [ 41 ComplianceFinding( 42 "C-002", 43 f"Every accepted ADR reviewed within {self.sla_days} days", 44 not breached, sorted(breached), "high", 45 ), 46 ] 47 report = ComplianceReport( 48 generated_at=now, 49 findings=findings, 50 fleet_counts={"reviewer": by_reviewer}, 51 ) 52 report.snapshot_hash = sha256(report.to_json().encode()).hexdigest() 53 return report
నెలవారీ లీడర్షిప్ ఈమెయిల్ ముద్రించే యజమాని వారీ రోల్ అప్ టేబుల్ ఖచ్చితంగా అవరోహణ క్రమంలో సార్ట్ చేసిన fleet_counts["reviewer"] యే, ప్రతి వరుసకు ఆ రివ్యూయర్ యొక్క ADR లలో ఎన్ని breached సెట్లో ఉన్నాయో అనే వివరణ జతచేయబడుతుంది — గవర్నెన్స్ ప్రోగ్రామ్లో సగభాగాన్ని నిశ్శబ్దంగా అడ్డుకుంటున్న బాటిల్నెక్ ఇంజనీర్ను బయటపెట్టేది ఇదే. snapshot_hash కానానికల్, సార్ట్-కీ చేసిన JSON పై లెక్కించబడుతుంది కాబట్టి, ఈమెయిల్ ఆ డైజెస్ట్ను ముద్రించగలదు, తద్వారా ఏ పాఠకుడైనా ఆర్కైవ్ బకెట్ నుండి తీసిన JSON లీడర్షిప్ చూసిన ఖచ్చితమైన రిపోర్ట్తో సరిపోలుతుందో లేదో ధృవీకరించగలరు. హ్యాష్ generated_at సహా మొత్తం బాడీని కవర్ చేస్తుందని గమనించండి, కాబట్టి ఇది ఒకే రిపోర్ట్కు ట్యాంపర్-ఎవిడెన్స్ సీల్, క్రాస్-రన్ ఐడెంపొటెన్సీ హామీ కాదు: మార్పులేని రిజిస్ట్రీపై రెండు audit కాల్లు ఇప్పటికీ తమ generated_at టైమ్స్టాంప్లో విభేదిస్తాయి, అందువల్ల వేర్వేరు డైజెస్ట్లను ఉత్పత్తి చేస్తాయి. కంటెంట్ డ్రిఫ్ట్ కోసం రెండు రన్లను పోల్చడానికి, ముడి snapshot_hash విలువలను పోల్చడానికి బదులుగా, హ్యాష్ చేసిన బాడీ నుండి generated_at ను మినహాయించండి (లేదా findings మరియు fleet_counts ను నేరుగా diff చేయండి).
విభాగ అనువర్తనం
చేయవలసినవి మరియు చేయకూడనివి
చేయవలసినవి
- Prometheus స్క్రేప్ పాత్ మరియు హ్యాష్ చేసిన JSON ఆర్టిఫ్యాక్ట్ను వేర్వేరు కోడ్ పాత్లలో ఉంచండి —
ComplianceReport.to_json()మెథడ్ ఆర్కైవ్ అయ్యి ఆడిటర్లు ఉటంకించే కానానికల్ స్నాప్షాట్ను ఉత్పత్తి చేస్తుంది; లైవ్ ఆపరేటర్ సర్ఫేస్ అదే కోడ్ పాత్ను పంచుకుంటే, "మార్పులేని" ఆర్టిఫ్యాక్ట్ ఇక మార్పులేనిది కాదు, మరియు ఇద్దరు పాఠకులు ఒక వారం వ్యవధిలో హ్యాష్లను పోల్చిన మొదటిసారే SOC 2 సాక్ష్యాల సేకరణ కుప్పకూలిపోతుంది. snapshot_hashనుsha256తో సార్ట్-కీ చేసిన JSON బాడీపై లెక్కించండి —to_json()లోపలjson.dumpsకుsort_keys=Trueపాస్ చేయడం ఇచ్చిన బాడీకి సీరియలైజేషన్ను నిర్ణాయకంగా చేస్తుంది, కాబట్టి డైజెస్ట్ నమ్మదగిన ట్యాంపర్-ఎవిడెన్స్ సీల్: ఆర్కైవ్ చేసిన JSON పై హ్యాష్ను తిరిగి లెక్కించే ఏ పాఠకుడైనా ఈమెయిల్ ముద్రించిన అదే విలువను పొందుతారు. బాడీలోgenerated_atఉంటుంది కాబట్టి, డైజెస్ట్ డిజైన్ ప్రకారం ప్రతి రన్కు మారుతుంది; రెండు రన్ల మధ్య కంటెంట్ డ్రిఫ్ట్ను గుర్తించడానికి, ముడి డైజెస్ట్లను పోల్చడానికి బదులుగాgenerated_atను మినహాయించిన బాడీని హ్యాష్ చేయండి.fleet_countsను రివ్యూయర్-కీ చేసిన రోల్ అప్తో నింపి ప్రతి వరుసకు దాని SLA-ఉల్లంఘన సంఖ్యను జతచేయండి —ComplianceAuditor.auditలూప్ నుండి వచ్చేbreachedసెట్ గవర్నెన్స్ ప్రోగ్రామ్లో సగభాగాన్ని తన రివ్యూ బ్యాక్లాగ్ ద్వారా నిశ్శబ్దంగా అడ్డుకుంటున్న ఒకే ఇంజనీర్ను బయటపెడుతుంది; స్థితి-మాత్రమే లెక్క ఆ బాటిల్నెక్ను పూర్తిగా దాచిపెడుతుంది.
చేయకూడనివి
- ఆపరేటర్ డ్యాష్బోర్డ్ మరియు ఆడిటర్ ఆర్టిఫ్యాక్ట్ మధ్య ఒకే లైవ్ స్టేట్ ఆబ్జెక్ట్ను పంచుకోకండి — నిర్దిష్ట వైఫల్య రీతి ఏమిటంటే, ఇద్దరు పాఠకులు ఒక వారం వ్యవధిలో రిపోర్ట్ను తీసుకుంటారు, లైవ్ రిజిస్ట్రీ మారినందున వేర్వేరు
fleet_countsసంఖ్యలను చూస్తారు, మరియు ఆడిట్ సమయంలో ఏది నిజమో ఇక అంగీకరించలేరు, ఇది కంప్లయన్స్ రికార్డ్ విశ్వసనీయతను నాశనం చేస్తుంది. - హ్యాష్ చేయడానికి ముందు
ComplianceReportను సీరియలైజ్ చేసేటప్పుడుsort_keys=Trueను వదిలేయకండి — Python డిఫాల్ట్ డిక్ట్ ఆర్డరింగ్ ఇన్సర్షన్-ఆర్డర్, కాబట్టిsort_keys=Trueలేకుండా అదే లాజికల్ బాడీ Python వెర్షన్లు లేదా డిక్ట్-రీబిల్డ్ పాత్ల మధ్య వేరే JSON స్ట్రింగ్కు సీరియలైజ్ అవ్వవచ్చు, మరియు ఆర్కైవ్ చేసిన JSON పై డైజెస్ట్ను తిరిగి లెక్కించే పాఠకుడికి సరిపోలడం విఫలమవుతుంది — ట్యాంపర్-ఎవిడెన్స్ హామీని నిశ్శబ్దంగా విచ్ఛిన్నం చేస్తుంది. (రెండు రన్లు ఇప్పటికేgenerated_atద్వారా విభేదిస్తాయి;sort_keysఅనేది స్థిరమైన బాడీకి పునరుత్పాదకత గురించి, క్రాస్-రన్ సమానత్వం గురించి కాదు.) - రిపోర్ట్ బాడీ పూర్తిగా నింపబడకముందే
snapshot_hashను లెక్కించకండి —ComplianceAuditor.auditలోని కోడ్ మొదటComplianceReportను నిర్మించి, ఆ తర్వాతreport.snapshot_hash = sha256(report.to_json().encode()).hexdigest()ను సెట్ చేస్తుంది;fleet_countsలేదాfindingsజతచేయబడకముందే హ్యాష్ చేయడం ఆర్కైవ్ బకెట్ నిల్వ చేసే పూర్తి ఆర్టిఫ్యాక్ట్తో సరిపోలని డైజెస్ట్ను ఉత్పత్తి చేస్తుంది, మరియు ప్రతి పుల్పై CI ధృవీకరణ విఫలమవుతుంది.
3 hands-on labs come with this lesson — real code, in a cloud IDE. Create a free account to run them. No card.
Free account · no card · straight to the labs
Or get the full path — from
Listen to this lesson
Audio overviews of this lesson's labs and its chapter, from GenBodha Bytes.
More free lessons in GenAI Architecture & Design Patterns
- Ch 1Build ADR schema and decision taxonomy for GenAI technology choices
- Ch 1Validate ADR decisions against production telemetry
- Ch 1Implement ADR recommendation engine using historical outcomes
- Ch 1Create ADR governance dashboard and compliance auditYou are here
- Ch 4Build eval gate component with pluggable evaluator registry
- Ch 4Measure eval gate effectiveness with precision-recall tracking
- Ch 4Create eval architecture audit report with coverage analysis