network

package
v0.24.6 Latest Latest
Warning

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

Go to latest
Published: Sep 15, 2026 License: MIT Imports: 4 Imported by: 0

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

type Filter struct {
	Person  string
	Project string
	Since   time.Time
	Until   time.Time
}

Filter — фильтры сети: целевой Person (email), проект (repo — git-ось), период (Since/Until, включая границы, по sent_at/commit date).

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)
	SharedCC int           `json:"sharedCC"` // письма, где оба — получатели
	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(rows Rows, f Filter) []Link

BuildLinks строит сеть для целевого Person: ранжированные связи (вес убывает, tie-break email), детерминированные, с premises и verdict.

func OnlyKind

func OnlyKind(links []Link, kind string) []Link

OnlyKind возвращает связи только заданного kind (person|company|service), сохраняя порядок. CRM-манифест eslider@ (N-1.5 #275) — только person: company (потребительские/торговые) и service в CRM не идут.

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 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

type ManifestProject struct {
	Repo   string `yaml:"repo"`
	Period string `yaml:"period"`
}

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 PersonRow

type PersonRow struct {
	ID   string
	Name string
}

PersonRow — Person-узел графа (id = email).

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 из графа.

type ProjectLink struct {
	Repo      string `json:"repo"`
	CommitsMe int    `json:"commitsMe"`
	CommitsQ  int    `json:"commitsQ"`
	Period    string `json:"period"` // по коммитам обеих сторон
}

ProjectLink — общий проект: target и Q оба AUTHORED в один repo.

type Rows

type Rows struct {
	Msgs    []MsgRow
	Commits []CommitRow
	Persons []PersonRow
}

Rows — срез строк выборки графа (всё, что нужно сети).

Jump to

Keyboard shortcuts

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