Help us shape the future of Go! Take the 2026 Go Developer Survey

compliance

package
v0.9.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 28, 2026 License: EUPL-1.2 Imports: 21 Imported by: 0

Documentation

Overview

Package compliance construit le rapport de conformité à partir du journal d'audit.

Index

Constants

View Source
const (
	LevelFull     = "full"
	LevelMetadata = "metadata"
	LevelMixed    = "mixed"
	LevelNone     = "none"
)

Niveaux d'audit détectés sur les lignes retenues.

View Source
const Disclaimer = "This report describes the activity recorded by tenon. It is not legal advice and does not certify compliance."

Disclaimer est l'avertissement affiché en tête du rapport (texte exact).

View Source
const GitHint = "git log --grep \"AI-Assisted-By\""

GitHint est la commande qui retrouve le code marqué comme généré : le marquage git n'est pas dans le journal.

View Source
const SchemaVersion = 1

SchemaVersion est la version du schéma JSON du rapport.

Variables

This section is empty.

Functions

func IsMetadataPayload

func IsMetadataPayload(p json.RawMessage) bool

IsMetadataPayload indique si p est une charge réduite du niveau metadata : un objet avec exactement les clés sha256 (64 hex minuscules) et size (nombre).

func RenderHTML

func RenderHTML(r Report, reportID string, lang i18n.Lang) ([]byte, error)

RenderHTML rend le rapport en une page HTML autonome et imprimable.

func RenderJSON

func RenderJSON(r Report, reportID, htmlSHA256 string) ([]byte, error)

RenderJSON rend le rapport indenté de deux espaces, dans son enveloppe, avec un saut de ligne final.

func ReportID

func ReportID(r Report) (string, error)

ReportID est l'empreinte du rapport : "sha256:" + hex du sha256 de son JSON.

Types

type CRA

type CRA struct {
	LastScan  string            `json:"last_scan"`
	Open      int               `json:"open"`
	ToVerify  int               `json:"to_verify"`
	Unchecked int               `json:"unchecked"`
	Conflicts int               `json:"conflicts"`
	Reports   []CRAReportStatus `json:"reports"`
}

CRA est la section « Cyber Resilience Act » : dernier scan de chaque racine de projet (ouvertes, à vérifier, non vérifiés et conflits VEX cumulés, date la plus récente) et signalements. Omise sans événement CRA.

type CRAReportStatus

type CRAReportStatus struct {
	ID           string   `json:"id"`
	Kind         string   `json:"kind"`
	Project      string   `json:"project"`
	Step         string   `json:"step"`
	At           string   `json:"at"`
	Overdue      bool     `json:"overdue"`
	OverdueSteps []string `json:"overdue_steps"`
	// LateSteps : étapes faites après leur échéance.
	LateSteps []string `json:"late_steps"`
	// DeadlinesUnknown : aucun événement open dans le journal (échéances incalculables).
	DeadlinesUnknown bool `json:"deadlines_unknown"`
}

CRAReportStatus résume un signalement CRA : dernière étape journalisée et retard calculé à la date de l'export (Overdue n'a aucun effet sur le code de sortie).

type Chain

type Chain struct {
	Intact    bool
	Error     string
	Lines     int
	FinalHash string
}

Chain résume la vérification de la chaîne de hachage.

type Consents

type Consents struct {
	Granted int `json:"granted"`
	Denied  int `json:"denied"`
}

Consents compte les consentements de juridiction accordés et refusés.

type Dataset

type Dataset struct {
	Filter     Filter
	Chain      Chain
	Lines      []audit.Line
	Unreadable []Unreadable
	Sessions   map[string]SessionInfo
	Level      string
	// CRALines : événements CRAReport de tout le journal (période ignorée),
	// dans le périmètre projet/session : les échéances de signalement ne
	// dépendent pas de la période exportée.
	CRALines                 []audit.Line
	ExcludedMetadataSessions int
	// Timestamps résume les jetons RFC 3161 ; calculé seulement si la chaîne
	// est intacte (zéro sinon).
	Timestamps audit.TimestampSummary
	// contains filtered or unexported fields
}

Dataset est le journal vérifié et filtré.

func Load

func Load(dir string, f Filter, roots *x509.CertPool) (Dataset, error)

Load vérifie le journal puis le filtre. Il ne modifie ni ne verrouille rien : seuls audit.Verify, audit.VerifyTimestamps et audit.ReadLines sont appelés. roots : racines de confiance des jetons (nil : racines système). Erreur seulement si la lecture échoue.

type Energy added in v0.8.0

type Energy struct {
	Wh         float64 `json:"wh"`
	GCO2e      float64 `json:"gco2e"`
	WhPerMTok  float64 `json:"wh_per_mtoken"`
	GCO2PerKWh float64 `json:"gco2_per_kwh"`
}

Energy est l'énergie et le CO₂ estimés ; présent seulement quand les deux facteurs sont déclarés (jamais de valeur par défaut). Les facteurs utilisés sont enregistrés avec le résultat (ruling R14).

type ErrorIncident

type ErrorIncident struct {
	TS      time.Time `json:"ts"`
	Session string    `json:"session"`
	Code    string    `json:"code"`
	Message string    `json:"message"`
}

ErrorIncident est un événement Error.

type FileChange

type FileChange struct {
	TS           time.Time `json:"ts"`
	Session      string    `json:"session"`
	Path         string    `json:"path"`
	Tool         string    `json:"tool"`
	HashBefore   string    `json:"hash_before"`
	HashAfter    string    `json:"hash_after"`
	Author       string    `json:"author"`
	NoCheckpoint bool      `json:"no_checkpoint"`
	RewindStatus string    `json:"rewind_status,omitempty"`
}

FileChange est une modification de fichier (ToolResult avec path et hash_after). Author vaut "main" ou le nom de l'agent du sous-agent ; RewindStatus est l'état laissé par le dernier rewind ultérieur qui concerne ce fichier.

type Filter

type Filter struct {
	Since, Until time.Time
	Project      string
	AllProjects  bool
	Session      string
}

Filter borne le périmètre du rapport. Since et Until sont des minuits UTC ; Until est le dernier jour inclus.

type HookIssue

type HookIssue struct {
	TS       time.Time `json:"ts"`
	Session  string    `json:"session"`
	HookID   string    `json:"hook_id"`
	Event    string    `json:"event"`
	Status   string    `json:"status"`
	Decision string    `json:"decision,omitempty"`
	Reason   string    `json:"reason,omitempty"`
}

HookIssue est une exécution de hook notable (bloquée, en erreur, expirée ou qui demande une confirmation).

type Incidents

type Incidents struct {
	Errors     []ErrorIncident `json:"errors"`
	Turns      []TurnIncident  `json:"turns"`
	Unreadable []Unreadable    `json:"unreadable"`
}

Incidents regroupe erreurs, tours interrompus et lignes illisibles.

type Integrity

type Integrity struct {
	Intact     bool   `json:"intact"`
	Error      string `json:"error,omitempty"`
	TotalLines int    `json:"total_lines"`
	FinalHash  string `json:"final_hash,omitempty"`
	RangeLines int    `json:"range_lines"`
	FirstHash  string `json:"first_hash,omitempty"`
	LastHash   string `json:"last_hash,omitempty"`
	Level      string `json:"level"`
	// Timestamps : ancrage RFC 3161 de la chaîne (toujours présent).
	Timestamps Timestamps `json:"timestamps"`
}

Integrity résume la chaîne entière et la plage exportée.

type MCPFailure

type MCPFailure struct {
	Session string    `json:"session"`
	Server  string    `json:"server"`
	Error   string    `json:"error"`
	TS      time.Time `json:"ts"`
}

MCPFailure est une panne de serveur MCP (McpServerDown).

type MCPUse

type MCPUse struct {
	ID           string `json:"id"`
	Jurisdiction string `json:"jurisdiction"`
	Country      string `json:"country"`
	Sessions     int    `json:"sessions"`
}

MCPUse décrit un serveur MCP actif et le nombre de sessions qui l'ont eu.

type MappingRow

type MappingRow struct {
	Element    string   `json:"element"`
	Frameworks []string `json:"frameworks"`
}

MappingRow relie un élément du rapport aux cadres qu'il aide à documenter.

type Memory added in v0.8.0

type Memory struct {
	Writes         []MemoryWrite   `json:"writes"`
	SensitiveReads int             `json:"sensitive_reads"`
	Forgotten      MemoryForgotten `json:"forgotten"`
	Trusted        int             `json:"trusted"`
}

Memory est la section mémoire du rapport ; omise sans événement mémoire.

type MemoryForgotten added in v0.8.0

type MemoryForgotten struct {
	User   int `json:"user"`
	Model  int `json:"model"`
	Expiry int `json:"expiry"`
}

MemoryForgotten compte les suppressions par origine.

type MemoryWrite added in v0.8.0

type MemoryWrite struct {
	Scope     string `json:"scope"`
	ID        string `json:"id"`
	Author    string `json:"author"`
	Sensitive bool   `json:"sensitive"`
	Redacted  bool   `json:"redacted"`
}

MemoryWrite : une écriture de mémoire. Ni titre ni contenu : l'événement n'en porte pas.

type Options

type Options struct {
	// Redact masque un texte issu du journal ; nil = identité.
	Redact func(string) string
	// RedactJSON masque un texte JSON chaîne par chaîne une fois décodé (clés
	// comprises) ; nil = Redact appliqué à chaque chaîne décodée.
	RedactJSON func(string) string
	// Details inclut les textes des commandes et la chronologie.
	Details bool
	// Generator vaut "tenon <version>".
	Generator string
	// Now est la date de génération.
	Now time.Time
	// WhPerMTok et GCO2PerKWh : facteurs déclarés ([usage] global) ; l'énergie
	// n'est calculée que si les deux sont > 0, jamais par défaut.
	WhPerMTok, GCO2PerKWh float64
}

Options règle la construction du rapport.

type Period

type Period struct {
	Since string `json:"since"`
	Until string `json:"until"`
}

Period est la période couverte, bornes incluses, au format YYYY-MM-DD.

type PolicyUse

type PolicyUse struct {
	ID       string `json:"id"`
	Version  int    `json:"version"`
	KeyID    string `json:"key_id"`
	Sessions int    `json:"sessions"`
}

PolicyUse compte les sessions placées sous une politique d'organisation (identifiant, version, clé de signature).

type ProviderTokens added in v0.8.0

type ProviderTokens struct {
	ID    string `json:"id"`
	Model string `json:"model"`
	TokenCounts
}

ProviderTokens : tokens d'un fournisseur et modèle (celui qui a répondu).

type ProviderUse

type ProviderUse struct {
	ID           string `json:"id"`
	Name         string `json:"name"`
	Model        string `json:"model"`
	Country      string `json:"country"`
	Jurisdiction string `json:"jurisdiction"`
	// Qualifications déclarées (jamais vérifiées par tenon), jamais nil.
	Qualifications []string  `json:"qualifications"`
	Sessions       int       `json:"sessions"`
	First          time.Time `json:"first"`
	Last           time.Time `json:"last"`
}

ProviderUse regroupe les sessions d'un même fournisseur et modèle.

type Report

type Report struct {
	Generator                string            `json:"generator"`
	GeneratedAt              time.Time         `json:"generated_at"`
	Period                   Period            `json:"period"`
	Scope                    Scope             `json:"scope"`
	Details                  bool              `json:"details"`
	Disclaimer               string            `json:"disclaimer"`
	Integrity                Integrity         `json:"integrity"`
	ContentAvailable         bool              `json:"content_available"`
	ExcludedMetadataSessions int               `json:"excluded_metadata_sessions"`
	Summary                  Summary           `json:"summary"`
	Providers                []ProviderUse     `json:"providers"`
	Profiles                 []string          `json:"profiles"`
	Policies                 []PolicyUse       `json:"policies"`
	Consents                 Consents          `json:"jurisdiction_consents"`
	WarningSessions          []string          `json:"jurisdiction_warning_sessions"`
	MCPServers               []MCPUse          `json:"mcp_servers"`
	MCPFailures              []MCPFailure      `json:"mcp_failures"`
	Redactions               map[string]int    `json:"redactions"`
	Permissions              []ToolPermissions `json:"permissions"`
	Files                    []FileChange      `json:"files"`
	Commands                 []SessionCommands `json:"commands"`
	Subagents                []SubagentRun     `json:"subagents"`
	Hooks                    []HookIssue       `json:"hooks"`
	Rewinds                  []RewindUse       `json:"rewinds"`
	Incidents                Incidents         `json:"incidents"`
	Mapping                  []MappingRow      `json:"regulatory_mapping"`
	GitHint                  string            `json:"git_marking_hint"`
	Timeline                 []SessionTimeline `json:"timeline,omitempty"`
	// Sandbox : isolation des commandes par session ; omis si aucun journal
	// de la plage n'en porte (journaux antérieurs au sandbox).
	Sandbox []SessionSandbox `json:"sandbox,omitempty"`
	// Client : éditeur par session (sessions ACP) ; omis si aucun journal de
	// la plage n'en porte.
	Client []SessionClient `json:"client,omitempty"`
	// Routing : routage par sensibilité des données, par session ; omis si
	// aucun journal de la plage n'en porte.
	Routing []SessionRouting `json:"routing,omitempty"`
	// Tokens : tokens mesurés, part estimée, économies de la vue et énergie
	// (facteurs déclarés seulement) ; omis si aucun journal ne porte d'Usage.
	Tokens *Tokens `json:"tokens,omitempty"`
	// CRA : suivi du Cyber Resilience Act (scans et signalements) ; omis
	// sans événement CRA. Les échéances dépassées sont signalées sans
	// changer le code de sortie.
	CRA *CRA `json:"cra,omitempty"`
	// Memory : écritures, lectures sensibles, suppressions et approbations de
	// la mémoire gouvernée ; omis sans événement mémoire.
	Memory *Memory `json:"memory,omitempty"`
}

Report est le modèle pur du rapport ; ses balises JSON forment le schéma stable.

func Build

func Build(ds Dataset, o Options) Report

Build construit le rapport à partir du journal chargé. Pure : ne lit rien d'autre que ds. Les tranches ne sont jamais nil, la carte non plus.

func (Report) RoutingViolation

func (r Report) RoutingViolation() bool

RoutingViolation indique si une session viole le routage (code de sortie 2).

type RewindUse

type RewindUse struct {
	TS             time.Time `json:"ts"`
	Session        string    `json:"session"`
	ToSeq          uint64    `json:"to_seq"`
	Mode           string    `json:"mode"`
	Restored       int       `json:"restored"`
	Deleted        int       `json:"deleted"`
	Kept           int       `json:"kept"`
	Skipped        int       `json:"skipped"`
	Failed         int       `json:"failed"`
	Unchanged      int       `json:"unchanged"`
	UntrackedCalls int       `json:"untracked_calls"`
}

RewindUse est un rewind et son bilan par état de fichier.

type Scope

type Scope struct {
	Kind    string `json:"kind"`
	Project string `json:"project,omitempty"`
	Session string `json:"session,omitempty"`
}

Scope est le périmètre : Kind vaut "project", "all" ou "session".

type SessionClient added in v0.9.0

type SessionClient struct {
	Session   string `json:"session"`
	Name      string `json:"name"`
	Version   string `json:"version"`
	Transport string `json:"transport,omitempty"`
}

SessionClient est l'éditeur qui a piloté une session.

type SessionCommands

type SessionCommands struct {
	Session  string   `json:"session"`
	Count    int      `json:"count"`
	Commands []string `json:"commands,omitempty"`
}

SessionCommands compte les appels shell d'une session ; Commands n'est rempli qu'avec Details.

type SessionInfo

type SessionInfo struct {
	// Started est le premier SessionStarted (nil au niveau metadata ou s'il est absent).
	Started *event.SessionStartedPayload
}

SessionInfo regroupe ce que le journal dit d'une session.

type SessionRouting

type SessionRouting struct {
	Session   string   `json:"session"`
	Sensitive bool     `json:"sensitive"`
	Reason    string   `json:"reason,omitempty"`
	Providers []string `json:"providers"`
	Fallbacks int      `json:"fallbacks"`
	Violation bool     `json:"violation"`
}

SessionRouting résume le routage d'une session : sensible ou non, motif du classement, fournisseurs par ordre de première utilisation, nombre de replis. Violation signale un fournisseur non local atteint après le classement (ou une session sensible démarrée à distance sans routage).

type SessionSandbox

type SessionSandbox struct {
	Session     string `json:"session"`
	Mode        string `json:"mode"`
	Mechanism   string `json:"mechanism"`
	Network     string `json:"network"`
	Unconfined  int    `json:"unconfined"`
	WithNetwork int    `json:"with_network"`
}

SessionSandbox résume l'isolation des commandes shell d'une session. Unconfined compte les résultats shell non confinés ; WithNetwork compte les résultats shell confinés qui avaient le réseau (les deux compteurs ne se recouvrent donc jamais).

type SessionTimeline

type SessionTimeline struct {
	Session string          `json:"session"`
	Entries []TimelineEntry `json:"entries"`
}

SessionTimeline est la chronologie d'une session (Details seulement).

type SessionTokens added in v0.8.0

type SessionTokens struct {
	Session string `json:"session"`
	TokenCounts
}

SessionTokens : tokens d'une session (sous-agents et compaction compris).

type SubagentRun

type SubagentRun struct {
	TS      time.Time `json:"ts"`
	Session string    `json:"session"`
	CallID  string    `json:"call_id"`
	Agent   string    `json:"agent"`
	Status  string    `json:"status"`
}

SubagentRun est une exécution de sous-agent.

type Summary

type Summary struct {
	Sessions      int      `json:"sessions"`
	Turns         int      `json:"turns"`
	ToolCalls     int      `json:"tool_calls"`
	FilesModified int      `json:"files_modified"`
	Denials       int      `json:"denials"`
	Jurisdictions []string `json:"jurisdictions"`
	// UnknownProviderSessions compte les sessions de la plage dont le
	// fournisseur est inconnu (premier SessionStarted réduit ou absent) : leurs
	// fournisseurs et juridictions manquent aux comptes.
	UnknownProviderSessions int `json:"unknown_provider_sessions"`
}

Summary donne les comptes principaux ; Jurisdictions liste les juridictions distinctes des fournisseurs, triées.

type TimelineEntry

type TimelineEntry struct {
	TS   time.Time `json:"ts"`
	Kind string    `json:"kind"`
	Tool string    `json:"tool,omitempty"`
	Text string    `json:"text"`
}

TimelineEntry est une entrée de la chronologie.

type Timestamps

type Timestamps struct {
	Count      int      `json:"count"`
	Valid      int      `json:"valid"`
	LastFile   string   `json:"last_file,omitempty"`
	LastLine   int      `json:"last_line,omitempty"`
	LastTime   string   `json:"last_time,omitempty"`
	TSA        string   `json:"tsa,omitempty"`
	LinesAfter int      `json:"lines_after"`
	Errors     []string `json:"errors"`
}

Timestamps résume les jetons d'horodatage RFC 3161. LastTime est en RFC 3339 UTC ; Errors n'est jamais nil.

type TokenCounts added in v0.8.0

type TokenCounts struct {
	Input          int     `json:"input"`
	Output         int     `json:"output"`
	Cached         int     `json:"cached"`
	EstimatedShare float64 `json:"estimated_share"`
	Saved          int     `json:"saved"`
}

TokenCounts regroupe les tokens d'un périmètre. EstimatedShare est la part (0 à 1) d'entrée + sortie qui vient d'estimations et non du fournisseur ; Saved est un indicateur estimé : la somme des économies estimées inscrites à chaque changement de la vue (ContextShaped), pas un total sur toutes les requêtes.

type Tokens added in v0.8.0

type Tokens struct {
	Total     TokenCounts      `json:"total"`
	Sessions  []SessionTokens  `json:"sessions"`
	Providers []ProviderTokens `json:"providers"`
	Energy    *Energy          `json:"energy,omitempty"`
}

Tokens est la section tokens du rapport ; omise sans événement Usage.

type ToolPermissions

type ToolPermissions struct {
	Tool           string `json:"tool"`
	Requested      int    `json:"requested"`
	AllowedOnce    int    `json:"allowed_once"`
	AllowedSession int    `json:"allowed_session"`
	DeniedUser     int    `json:"denied_user"`
	DeniedPolicy   int    `json:"denied_policy"`
	DeniedHook     int    `json:"denied_hook"`
	// DeniedClassification : appels refusés par la classification (donnée
	// classée sans fournisseur local).
	DeniedClassification int `json:"denied_classification"`
}

ToolPermissions compte les demandes et décisions de permission d'un outil.

type TurnIncident

type TurnIncident struct {
	TS      time.Time `json:"ts"`
	Session string    `json:"session"`
	Reason  string    `json:"reason"`
}

TurnIncident est un tour terminé pour une raison notable.

type Unreadable

type Unreadable struct {
	File  string `json:"file"`
	Line  int    `json:"line"`
	Error string `json:"error"`
}

Unreadable désigne une ligne du journal qui n'a pas pu être lue.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL