feat: referentiel projets dynamique + validation nommage by design

Durcit la convention de nommage des projets (dérive constatée : 'Sliding
Automation', 'code_versioning'... au lieu des formes canoniques).

- trilium_api.py : projets_canoniques() lit le référentiel = valeurs du label
  projet sur les notes de type=projet (source unique, pas de constante en dur).
  Note-projet CodeVersioning créée (manquait).
- mcp_server.py : _valider_projet() branché dans les 6 tools de création
  (add_decision/history/backlog, new_conversation, create_entite, add_skill).
  Refuse un projet non canonique (suggestion si faute) ou inconnu (renvoi au
  processus de création de projet). Ne verrouille pas si référentiel illisible.
- lint_audit.py : VAL-nommage aligné sur le référentiel (attrape casse, espace
  ET snake_case ; l'ancien 'contient un espace' ratait code_versioning).
- Données : 79 notes ré-étiquetées vers les 3 formes canoniques.

Quality by design : l'erreur de nommage devient impossible à l'écriture, le
Lint n'est plus que le filet de sécurité.
This commit is contained in:
2026-07-17 14:59:33 +02:00
parent d1e67431b6
commit 943acbc573
2425 changed files with 710525 additions and 6 deletions
@@ -0,0 +1,411 @@
"""
pygments.lexers._julia_builtins
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Julia builtins.
:copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
:license: BSD, see LICENSE for details.
"""
# operators
# see https://github.com/JuliaLang/julia/blob/master/src/julia-parser.scm
# Julia v1.6.0-rc1
OPERATORS_LIST = [
# other
'->',
# prec-assignment
':=', '$=',
# prec-conditional, prec-lazy-or, prec-lazy-and
'?', '||', '&&',
# prec-colon
':',
# prec-plus
'$',
# prec-decl
'::',
]
DOTTED_OPERATORS_LIST = [
# prec-assignment
r'=', r'+=', r'-=', r'*=', r'/=', r'//=', r'\=', r'^=', r'÷=', r'%=', r'<<=',
r'>>=', r'>>>=', r'|=', r'&=', r'⊻=', r'', r'', r"'", r'~',
# prec-pair
'=>',
# prec-arrow
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'⬿', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'-->', r'<--', r'<-->',
# prec-comparison
r'>', r'<', r'>=', r'', r'<=', r'', r'==', r'===', r'', r'!=', r'', r'!==',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'⩿', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'⪿', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'<:', r'>:',
# prec-pipe
'<|', '|>',
# prec-colon
r'', r'', r'', r'', r'', r'',
# prec-plus
r'+', r'-', r'¦', r'|', r'', r'', r'', r'', r'++', r'', r'', r'', r'±', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
# prec-times
r'*', r'/', r'', r'÷', r'%', r'&', r'', r'', r'×', '\\', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'⦿', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'',
# prec-rational, prec-bitshift
'//', '>>', '<<', '>>>',
# prec-power
r'^', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'', r'',
r'', r'', r'',
# unary-ops, excluding unary-and-binary-ops
'!', r'¬', r'', r'', r''
]
# Generated with the following in Julia v1.6.0-rc1
'''
#!/usr/bin/env julia
import REPL.REPLCompletions
res = String["in", "isa", "where"]
for kw in collect(x.keyword for x in REPLCompletions.complete_keyword(""))
if !(contains(kw, " ") || kw == "struct")
push!(res, kw)
end
end
sort!(unique!(setdiff!(res, ["true", "false"])))
foreach(x -> println("\'", x, "\',"), res)
'''
KEYWORD_LIST = (
'baremodule',
'begin',
'break',
'catch',
'ccall',
'const',
'continue',
'do',
'else',
'elseif',
'end',
'export',
'finally',
'for',
'function',
'global',
'if',
'import',
'in',
'isa',
'let',
'local',
'macro',
'module',
'quote',
'return',
'try',
'using',
'where',
'while',
)
# Generated with the following in Julia v1.6.0-rc1
'''
#!/usr/bin/env julia
import REPL.REPLCompletions
res = String[]
for compl in filter!(x -> isa(x, REPLCompletions.ModuleCompletion) && (x.parent === Base || x.parent === Core),
REPLCompletions.completions("", 0)[1])
try
v = eval(Symbol(compl.mod))
if (v isa Type || v isa TypeVar) && (compl.mod != "=>")
push!(res, compl.mod)
end
catch e
end
end
sort!(unique!(res))
foreach(x -> println("\'", x, "\',"), res)
'''
BUILTIN_LIST = (
'AbstractArray',
'AbstractChannel',
'AbstractChar',
'AbstractDict',
'AbstractDisplay',
'AbstractFloat',
'AbstractIrrational',
'AbstractMatch',
'AbstractMatrix',
'AbstractPattern',
'AbstractRange',
'AbstractSet',
'AbstractString',
'AbstractUnitRange',
'AbstractVecOrMat',
'AbstractVector',
'Any',
'ArgumentError',
'Array',
'AssertionError',
'BigFloat',
'BigInt',
'BitArray',
'BitMatrix',
'BitSet',
'BitVector',
'Bool',
'BoundsError',
'CapturedException',
'CartesianIndex',
'CartesianIndices',
'Cchar',
'Cdouble',
'Cfloat',
'Channel',
'Char',
'Cint',
'Cintmax_t',
'Clong',
'Clonglong',
'Cmd',
'Colon',
'Complex',
'ComplexF16',
'ComplexF32',
'ComplexF64',
'ComposedFunction',
'CompositeException',
'Condition',
'Cptrdiff_t',
'Cshort',
'Csize_t',
'Cssize_t',
'Cstring',
'Cuchar',
'Cuint',
'Cuintmax_t',
'Culong',
'Culonglong',
'Cushort',
'Cvoid',
'Cwchar_t',
'Cwstring',
'DataType',
'DenseArray',
'DenseMatrix',
'DenseVecOrMat',
'DenseVector',
'Dict',
'DimensionMismatch',
'Dims',
'DivideError',
'DomainError',
'EOFError',
'Enum',
'ErrorException',
'Exception',
'ExponentialBackOff',
'Expr',
'Float16',
'Float32',
'Float64',
'Function',
'GlobalRef',
'HTML',
'IO',
'IOBuffer',
'IOContext',
'IOStream',
'IdDict',
'IndexCartesian',
'IndexLinear',
'IndexStyle',
'InexactError',
'InitError',
'Int',
'Int128',
'Int16',
'Int32',
'Int64',
'Int8',
'Integer',
'InterruptException',
'InvalidStateException',
'Irrational',
'KeyError',
'LinRange',
'LineNumberNode',
'LinearIndices',
'LoadError',
'MIME',
'Matrix',
'Method',
'MethodError',
'Missing',
'MissingException',
'Module',
'NTuple',
'NamedTuple',
'Nothing',
'Number',
'OrdinalRange',
'OutOfMemoryError',
'OverflowError',
'Pair',
'PartialQuickSort',
'PermutedDimsArray',
'Pipe',
'ProcessFailedException',
'Ptr',
'QuoteNode',
'Rational',
'RawFD',
'ReadOnlyMemoryError',
'Real',
'ReentrantLock',
'Ref',
'Regex',
'RegexMatch',
'RoundingMode',
'SegmentationFault',
'Set',
'Signed',
'Some',
'StackOverflowError',
'StepRange',
'StepRangeLen',
'StridedArray',
'StridedMatrix',
'StridedVecOrMat',
'StridedVector',
'String',
'StringIndexError',
'SubArray',
'SubString',
'SubstitutionString',
'Symbol',
'SystemError',
'Task',
'TaskFailedException',
'Text',
'TextDisplay',
'Timer',
'Tuple',
'Type',
'TypeError',
'TypeVar',
'UInt',
'UInt128',
'UInt16',
'UInt32',
'UInt64',
'UInt8',
'UndefInitializer',
'UndefKeywordError',
'UndefRefError',
'UndefVarError',
'Union',
'UnionAll',
'UnitRange',
'Unsigned',
'Val',
'Vararg',
'VecElement',
'VecOrMat',
'Vector',
'VersionNumber',
'WeakKeyDict',
'WeakRef',
)
# Generated with the following in Julia v1.6.0-rc1
'''
#!/usr/bin/env julia
import REPL.REPLCompletions
res = String["true", "false"]
for compl in filter!(x -> isa(x, REPLCompletions.ModuleCompletion) && (x.parent === Base || x.parent === Core),
REPLCompletions.completions("", 0)[1])
try
v = eval(Symbol(compl.mod))
if !(v isa Function || v isa Type || v isa TypeVar || v isa Module || v isa Colon)
push!(res, compl.mod)
end
catch e
end
end
sort!(unique!(res))
foreach(x -> println("\'", x, "\',"), res)
'''
LITERAL_LIST = (
'ARGS',
'C_NULL',
'DEPOT_PATH',
'ENDIAN_BOM',
'ENV',
'Inf',
'Inf16',
'Inf32',
'Inf64',
'InsertionSort',
'LOAD_PATH',
'MergeSort',
'NaN',
'NaN16',
'NaN32',
'NaN64',
'PROGRAM_FILE',
'QuickSort',
'RoundDown',
'RoundFromZero',
'RoundNearest',
'RoundNearestTiesAway',
'RoundNearestTiesUp',
'RoundToZero',
'RoundUp',
'VERSION',
'devnull',
'false',
'im',
'missing',
'nothing',
'pi',
'stderr',
'stdin',
'stdout',
'true',
'undef',
'π',
'',
)