Documentation
¶
Overview ¶
Package network — сеть связей L-9.5 (#234): «с кем и через кого» из mail+commits поверх готового графа (D-1 #257: Message/Person/рёбра; L-9.4 #233: Commit/Person/AUTHORED). Чистая логика без liblbug: вход — строки выборки из графа (MsgRow/CommitRow/PersonRow), выход — детерминированные связи Person↔Person с premises (Message.id/Commit.id) и verdict (accept/weaken) по audit-картам Vinogradov (sufficient reason). Исполнение запросов к живой Ladybug — bin/network/network.go (cgo, read-only), по образцу bin/git/facts.go.
Деривации (только из существующих узлов/рёбер, ничего не выдумываем):
mail — письмо, где target — отправитель и Q — получатель (или
наоборот): прямой контакт, вес роли TO=1.0 / CC=0.5 / BCC=0.25;
общий получатель (оба в To/CC/BCC, sender третий) — слабее;
REPLY_TO-цепь (письмо Q отвечает на письмо target) — диалог;
общие треды (thread_id) — контекст.
git — общий проект: target и Q оба AUTHORED коммиты в один
Commit.repo (AUTHORED, L-9.4 #233); premises — commit id.
Вердикт (ADR-0012 §сеть связей п.2/п.4): одиночный контакт (1 письмо без ответа и без проекта) — weaken + gap OPEN, в CRM-экспорт не идёт; ≥2 прямых писем / диалог REPLY_TO / общий проект — accept.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type CommitRow ¶
type CommitRow struct {
ID string // repo:sha
Repo string
Date string // RFC3339
Email string // Person.id автора (lowercase)
}
CommitRow — git-коммит (Commit-узел + AUTHORED на Person).
type Filter ¶
Filter — фильтры сети: целевой Person (email), проект (repo — git-ось), период (Since/Until, включая границы, по sent_at/commit date).
type Link ¶
type Link struct {
Person string `json:"person"` // email Q
Name string `json:"name"`
Kind string `json:"kind"` // person | company | service (N-1.1 #268)
Msgs int `json:"msgs"` // прямые письма (sender↔recipient)
Threads int `json:"threads"` // треды с общими письмами
Replies int `json:"replies"` // REPLY_TO-рёбра между письмами
Weight float64 `json:"weight"` // сила (вес ролей + диалог)
Period string `json:"period"`
Projects []ProjectLink `json:"projects,omitempty"`
Premises []Premise `json:"premises"`
Verdict string `json:"verdict"` // accept | weaken
Gaps []string `json:"gaps,omitempty"`
}
Link — одна связь target↔Q (агрегат mail+git каналов).
func BuildLinks ¶
BuildLinks строит сеть для целевого Person: ранжированные связи (вес убывает, tie-break email), детерминированные, с premises и verdict.
type Manifest ¶
type Manifest struct {
Target string `yaml:"target"`
Links []ManifestLink `yaml:"links"`
Source string `yaml:"source"`
}
Manifest — CRM-манифест accept-связей сети: YAML-выход bin/network --accept-only (формат crmDoc/crmLink, L-9.5 #234; ADR-0012 §сеть связей п.4). Общий контракт продюсера (bin/network) и коннектора в OnlyOffice CRM (bin/onlyoffice/import-network.go, N-1.2 #269).
type ManifestLink ¶
type ManifestLink struct {
Person string `yaml:"person"`
Name string `yaml:"name,omitempty"`
Kind string `yaml:"kind"`
Msgs int `yaml:"msgs"`
Threads int `yaml:"threads"`
Replies int `yaml:"replies"`
Period string `yaml:"period"`
Projects []ManifestProject `yaml:"projects,omitempty"`
Premises []Premise `yaml:"premises"`
Extra int `yaml:"extraPremises,omitempty"`
}
ManifestLink — одна accept-связь в CRM-манифесте. kind: person|company (сервис-аккаунты исключены продюсером, N-1.1 #268); premises — первые 5 ссылок на Message/Commit, extraPremises — сколько ещё за пределами манифеста (полный список в --json).
type ManifestProject ¶
ManifestProject — общий git-проект связи в манифесте.
type MsgRow ¶
type MsgRow struct {
ID string
ThreadID string
SentAt string
GatorRef string
Sender string // Person.id = email отправителя
To []string // Person.id получателей TO
CC []string // Person.id получателей CC
BCC []string // Person.id получателей BCC
ReplyTo string // Message.id родителя по REPLY_TO
}
MsgRow — одно письмо графа (Message-узел + роли участников). ReplyTo — id сообщения, на которое отвечает это письмо (REPLY_TO, "" если нет). SentAt — RFC3339 (как в графе).
type Premise ¶
type Premise struct {
Kind string `json:"kind"` // "mail" | "commit"
Ref string `json:"ref"` // Message.id | Commit.id (repo:sha)
Date string `json:"date,omitempty"`
}
Premise — одно свидетельство связи (sufficient reason): ссылка на Message или Commit из графа.