rultor.com logo This build log was produced by rultor.com for yegor256/dogent#301
++ dirname ./run.sh
+ cd .
+ echo 1128
+ echo '2.0-SNAPSHOT BUILD'
2.0-SNAPSHOT BUILD
+ date
Tue Jun 30 07:31:02 UTC 2026
+ uptime
 07:31:02 up 1 min,  0 users,  load average: 2.51, 0.69, 0.24
+ head=git@github.com:yegor256/dogent.git
+ ff=default
+ image=yegor256/ruby
+ rebase=false
+ squash=false
+ head_branch=master
+ author=yegor256
+ tag=0.13.2
+ vars=('--env=head=git@github.com:yegor256/dogent.git' '--env=tag=0.13.2' '--env=scripts=( '\''export '\''\'\'''\''head=git@github.com:yegor256/dogent.git'\''\'\'''\'''\'' '\'';'\'' '\''export '\''\'\'''\''tag=0.13.2'\''\'\'''\'''\'' '\'';'\'' '\''export '\''\'\'''\''head_branch=master'\''\'\'''\'''\'' '\'';'\'' '\''export '\''\'\'''\''author=yegor256'\''\'\'''\'''\'' '\'';'\'' '\''sudo /usr/bin/install-node.sh'\'' '\'';'\'' '\''npm install --no-color'\'' '\'';'\'' '\''pdd -f /dev/null -v'\'' '\'';'\'' '\''[[ "${tag}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] || exit -1'\'' '\'';'\'' '\''sed -i "s/0\.0\.0/${tag}/" package.json'\'' '\'';'\'' '\''sed -i "s/0\.0\.0/${tag}/" src/version.js'\'' '\'';'\'' '\''npm test --no-color'\'' '\'';'\'' '\''git commit -am "set version to ${tag}"'\'' '\'';'\'' '\''chmod 600 ../npmrc'\'' '\'';'\'' '\''npm publish --access=public --no-color --userconfig=../npmrc'\'' '\'';'\'' )' '--env=head_branch=master' '--env=author=yegor256')
+ scripts=('export '\''head=git@github.com:yegor256/dogent.git'\''' ';' 'export '\''tag=0.13.2'\''' ';' 'export '\''head_branch=master'\''' ';' 'export '\''author=yegor256'\''' ';' 'sudo /usr/bin/install-node.sh' ';' 'npm install --no-color' ';' 'pdd -f /dev/null -v' ';' '[[ "${tag}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] || exit -1' ';' 'sed -i "s/0\.0\.0/${tag}/" package.json' ';' 'sed -i "s/0\.0\.0/${tag}/" src/version.js' ';' 'npm test --no-color' ';' 'git commit -am "set version to ${tag}"' ';' 'chmod 600 ../npmrc' ';' 'npm publish --access=public --no-color --userconfig=../npmrc' ';')
+ directory=
+ container=yegor256_dogent_301
+ as_root=false
+ set -e -o pipefail
+ hostname
ip-172-31-30-240
+ pwd
/tmp/rultor-xKjZ
+ git --version
git version 2.34.1
+ docker --version
Docker version 25.0.3, build 4debf41
+ mkdir -p /home/ubuntu/.ssh
+ echo -e 'Host github.com\n\tStrictHostKeyChecking no\n'
+ chmod 600 /home/ubuntu/.ssh/config
+ git clone --recurse-submodules git@github.com:yegor256/dogent.git repo
Cloning into 'repo'...
Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
+ cd repo
+ git config user.email gpg@rultor.com
+ git config user.name Rultor.com
+ '[' -z 'export '\''head=git@github.com:yegor256/dogent.git'\''' ']'
+ cd ..
+ cat
+ '[' false = true ']'
+ cat
+ chmod a+x entry.sh
+ cat
+ echo 'export '\''head=git@github.com:yegor256/dogent.git'\''' ';' 'export '\''tag=0.13.2'\''' ';' 'export '\''head_branch=master'\''' ';' 'export '\''author=yegor256'\''' ';' 'sudo /usr/bin/install-node.sh' ';' 'npm install --no-color' ';' 'pdd -f /dev/null -v' ';' '[[ "${tag}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] || exit -1' ';' 'sed -i "s/0\.0\.0/${tag}/" package.json' ';' 'sed -i "s/0\.0\.0/${tag}/" src/version.js' ';' 'npm test --no-color' ';' 'git commit -am "set version to ${tag}"' ';' 'chmod 600 ../npmrc' ';' 'npm publish --access=public --no-color --userconfig=../npmrc' ';'
+ sensitive=()
+ set -ex -o pipefail
+ '[' -z 0.13.2 ']'
+ [[ 0.13.2 =~ ^[a-zA-Z0-9\.\-]+$ ]]
+ echo 'tag name is valid: "0.13.2"'
tag name is valid: "0.13.2"
+ cd repo
++ git tag -l 0.13.2
+ '[' -n '' ']'
+ BRANCH_NAME=__rultor
++ wc -l
++ git show-branch __rultor
+ '[' 0 -gt 0 ']'
+ export BRANCH_NAME
+ git checkout -b __rultor
Switched to a new branch '__rultor'
+ docker_when_possible
+ true
++ tail -n 1
++ sed 's/ /\n/g'
++ uptime
+ load=0.26
++ bc
++ echo 0.26 '>' 30
+ '[' 0 -eq 1 ']'
+ echo 'load average is 0.26, low enough to run a new Docker container'
load average is 0.26, low enough to run a new Docker container
+ break
+ cd ..
+ '[' -n '' ']'
+ use_image=yegor256/ruby
+ docker pull yegor256/ruby
Using default tag: latest
latest: Pulling from yegor256/ruby
cb259a83ac3d: Pulling fs layer
4f4fb700ef54: Pulling fs layer
50778be6ae7c: Pulling fs layer
de39015cb2a0: Pulling fs layer
c5d1f12c356a: Pulling fs layer
e9b75b04736a: Pulling fs layer
74aacb7acb4e: Pulling fs layer
b343964c14ed: Pulling fs layer
2da5d65999c3: Pulling fs layer
de39015cb2a0: Waiting
c5d1f12c356a: Waiting
e9b75b04736a: Waiting
74aacb7acb4e: Waiting
b343964c14ed: Waiting
2da5d65999c3: Waiting
4f4fb700ef54: Verifying Checksum
4f4fb700ef54: Download complete
50778be6ae7c: Verifying Checksum
50778be6ae7c: Download complete
cb259a83ac3d: Verifying Checksum
cb259a83ac3d: Download complete
e9b75b04736a: Verifying Checksum
e9b75b04736a: Download complete
74aacb7acb4e: Verifying Checksum
74aacb7acb4e: Download complete
c5d1f12c356a: Verifying Checksum
c5d1f12c356a: Download complete
2da5d65999c3: Verifying Checksum
2da5d65999c3: Download complete
b343964c14ed: Verifying Checksum
b343964c14ed: Download complete
de39015cb2a0: Verifying Checksum
de39015cb2a0: Download complete
cb259a83ac3d: Pull complete
4f4fb700ef54: Pull complete
50778be6ae7c: Pull complete
de39015cb2a0: Pull complete
c5d1f12c356a: Pull complete
e9b75b04736a: Pull complete
74aacb7acb4e: Pull complete
b343964c14ed: Pull complete
2da5d65999c3: Pull complete
Digest: sha256:1e3d8ad5ebf9fd2b323717b6b1213e233d033d7dec9eaac9d19bf72b6e5caaf7
Status: Downloaded newer image for yegor256/ruby:latest
docker.io/yegor256/ruby:latest
+ docker ps --filter=status=exited
+ grep --quiet '\syegor256_dogent_301\s*$'
+ ls -al .
total 48
drwx------  3 ubuntu ubuntu 4096 Jun 30 07:31 .
drwxrwxrwt 12 root   root   4096 Jun 30 07:31 ..
-rwxrwxr-x  1 ubuntu ubuntu  666 Jun 30 07:31 end.sh
-rwxrwxr-x  1 ubuntu ubuntu  498 Jun 30 07:31 entry.sh
-rw-rw-r--  1 ubuntu ubuntu   74 Jun 30 07:30 npmrc
-rw-rw-r--  1 ubuntu ubuntu    5 Jun 30 07:31 pid
drwxrwxr-x  8 ubuntu ubuntu 4096 Jun 30 07:31 repo
-rwxrwxr-x  1 ubuntu ubuntu 6573 Jun 30 07:30 run.sh
-rw-rw-r--  1 ubuntu ubuntu  685 Jun 30 07:31 script.sh
-rw-rw-r--  1 ubuntu ubuntu 5519 Jun 30 07:31 stdout
++ pwd
++ pwd
+ docker run -t --rm -v /tmp/rultor-xKjZ:/main --env=head=git@github.com:yegor256/dogent.git --env=tag=0.13.2 '--env=scripts=( '\''export '\''\'\'''\''head=git@github.com:yegor256/dogent.git'\''\'\'''\'''\'' '\'';'\'' '\''export '\''\'\'''\''tag=0.13.2'\''\'\'''\'''\'' '\'';'\'' '\''export '\''\'\'''\''head_branch=master'\''\'\'''\'''\'' '\'';'\'' '\''export '\''\'\'''\''author=yegor256'\''\'\'''\'''\'' '\'';'\'' '\''sudo /usr/bin/install-node.sh'\'' '\'';'\'' '\''npm install --no-color'\'' '\'';'\'' '\''pdd -f /dev/null -v'\'' '\'';'\'' '\''[[ "${tag}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] || exit -1'\'' '\'';'\'' '\''sed -i "s/0\.0\.0/${tag}/" package.json'\'' '\'';'\'' '\''sed -i "s/0\.0\.0/${tag}/" src/version.js'\'' '\'';'\'' '\''npm test --no-color'\'' '\'';'\'' '\''git commit -am "set version to ${tag}"'\'' '\'';'\'' '\''chmod 600 ../npmrc'\'' '\'';'\'' '\''npm publish --access=public --no-color --userconfig=../npmrc'\'' '\'';'\'' )' --env=head_branch=master --env=author=yegor256 --hostname=docker --privileged --net=host --dns 8.8.8.8 --add-host docker:127.0.0.1 --memory=8g --memory-swap=16g --oom-kill-disable --cidfile=/tmp/rultor-xKjZ/cid -w=/main -v /var/run/docker.sock:/var/run/docker.sock --name=yegor256_dogent_301 yegor256/ruby /main/entry.sh
WARNING: Your kernel does not support OomKillDisable. OomKillDisable discarded.
+ set -e
+ set -o pipefail
+ shopt -s dotglob
+ useradd -m -G sudo r
++ awk -F : '$3 > 100 { print $1 }'
++ cat /etc/group
+ for g in $(cat /etc/group | awk -F ':' '$3 > 100 { print $1 }')
+ usermod -a -G nogroup r
+ for g in $(cat /etc/group | awk -F ':' '$3 > 100 { print $1 }')
+ usermod -a -G ubuntu r
+ for g in $(cat /etc/group | awk -F ':' '$3 > 100 { print $1 }')
+ usermod -a -G systemd-journal r
+ for g in $(cat /etc/group | awk -F ':' '$3 > 100 { print $1 }')
+ usermod -a -G systemd-network r
+ for g in $(cat /etc/group | awk -F ':' '$3 > 100 { print $1 }')
+ usermod -a -G messagebus r
+ for g in $(cat /etc/group | awk -F ':' '$3 > 100 { print $1 }')
+ usermod -a -G _ssh r
+ for g in $(cat /etc/group | awk -F ':' '$3 > 100 { print $1 }')
+ usermod -a -G polkitd r
+ for g in $(cat /etc/group | awk -F ':' '$3 > 100 { print $1 }')
+ usermod -a -G ssh r
+ for g in $(cat /etc/group | awk -F ':' '$3 > 100 { print $1 }')
+ usermod -a -G docker r
+ for g in $(cat /etc/group | awk -F ':' '$3 > 100 { print $1 }')
+ usermod -a -G r r
+ usermod -s /bin/bash r
+ echo '%sudo ALL=(ALL) NOPASSWD:ALL'
+ cp -R /root/.bashrc /root/.cache /root/.gemrc /root/.profile /root/.ssh /home/r
+ cp -R ./cid ./end.sh ./entry.sh ./npmrc ./pid ./repo ./run.sh ./script.sh ./stdout /home/r
+ rm -rf repo
+ chown -R r:r /home/r
+ chmod a+x /home/r/script.sh
+ cat /home/r/script.sh
#!/usr/bin/env bash
set -e
set -o pipefail
if [ -e /home/r/.profile ]; then source /home/r/.profile; fi
shopt -s expand_aliases
alias 'sudo=sudo -i'
export HOME=/home/r
cd "${HOME}/repo"
export 'head=git@github.com:yegor256/dogent.git' ; export 'tag=0.13.2' ; export 'head_branch=master' ; export 'author=yegor256' ; sudo /usr/bin/install-node.sh ; npm install --no-color ; pdd -f /dev/null -v ; [[ "${tag}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] || exit -1 ; sed -i "s/0\.0\.0/${tag}/" package.json ; sed -i "s/0\.0\.0/${tag}/" src/version.js ; npm test --no-color ; git commit -am "set version to ${tag}" ; chmod 600 ../npmrc ; npm publish --access=public --no-color --userconfig=../npmrc ;
+ su --login r --command /home/r/script.sh
+ bash
+ curl -fsSL https://deb.nodesource.com/setup_18.x
1;31m2026-06-30 07:31:45 -
===============================================================================
                            DEPRECATION WARNING
===============================================================================
Node.js 18.x is no longer actively supported!
You will not receive security or critical stability updates for this version.

You should migrate to a supported version of Node.js as soon as possible.

Please see https://nodesource.com/products/distributions for details about which
version may be appropriate for you.

The NodeSource Node.js distributions site contains
information both about supported versions of Node.js and N|Solid supported Linux
distributions. To learn more about usage, see:
https://nodesource.com/products/distributions

===============================================================================

Continuing in 10 seconds ...
0m
38;5;79m2026-06-30 07:31:55 - Installing pre-requisites0m
Get:1ohttp://archive.ubuntu.com/ubuntu noble InRelease [256 kB]
Get:2ohttp://security.ubuntu.com/ubuntu3noble-security1InReleasee[1261kB]/256 k0m
Get:3ohttps://download.docker.com/linux/ubuntu0noble InReleasea[48.56kB]/2566kB0m33m
Get:4 http://archive.ubuntu.com/ubuntu noble-updates InRelease [126 kB]
Get:5 http://archive.ubuntu.com/ubuntu noble-backports InRelease [126 kB]
Get:6ohttp://security.ubuntu.com/ubuntu noble-security/main amd64 Packages [976 kB]
Get:7ohttp://security.ubuntu.com/ubuntuhnoble-security/multiverse amd64 Packages [43.8 kB]
Get:8 http://security.ubuntu.com/ubuntuhnoble-security/universemamd64 Packages [1,487 kB]
Get:9 http://security.ubuntu.com/ubuntu2noble-security/restricted amd64 Packages [1,339 kB]
Get:10Phttps://download.docker.com/linux/ubuntu noble/stable amd64 Packages [71.2 kB]
Get:11Phttp://archive.ubuntu.com/ubuntu4noble/restricted8amd643Packages [117 kB]
Get:12ihttp://archive.ubuntu.com/ubuntu0noble/universemamd64 Packages [19.3 MB]
Get:13 http://archive.ubuntu.com/ubuntu3noble/main9amd640Packages [1,808 kB]
Get:14 http://archive.ubuntu.com/ubuntu3noble/multiverse amd643Packages [331 kB]
Get:15 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 Packages [2,108 kB]
Get:162http://archive.ubuntu.com/ubuntusnoble-updates/main3amd64mPackages [1,296 kB]
Get:172http://archive.ubuntu.com/ubuntusnoble-updates/restricted amd64 Packages [1,412 kB]
Get:182http://archive.ubuntu.com/ubuntusnoble-updates/multiverse amd64 Packages [49.5 kB]
Get:192http://archive.ubuntu.com/ubuntusnoble-backports/universe amd64 Packages [35.9 kB]
Get:202http://archive.ubuntu.com/ubuntusnoble-backports/multiverse amd64 Packages [671 B]
Get:212http://archive.ubuntu.com/ubuntusnoble-backports/main amd64 Packages [48.9 kB]
Fetchedo31.1gMBmint3se(10.10MB/s)ackages 0 B/48.9 kB 0%]0m33m
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
15 packages can be upgraded. Run 'apt list --upgradable' to see them.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
ca-certificates is already the newest version (20260601~24.04.1).
curl is already the newest version (8.5.0-2ubuntu10.9).
gnupg is already the newest version (2.4.4-2ubuntu17.4).
gnupg set to manually installed.
The following NEW packages will be installed:
  apt-transport-https
0 upgraded, 1 newly installed, 0 to remove and 15 not upgraded.
Need to get 3,970 B of archives.
After this operation, 36.9 kB of additional disk space will be used.
Get:1ohttp://archive.ubuntu.com/ubuntu noble-updates/universe amd64 apt-transport-https all 2.8.3 [3,970 B]
Fetchedo3,970]Bmint0st(1170kB/s)970 B 0%]0m33m
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package apt-transport-https.
(Reading database ... 20501 files and directories currently installed.)
Preparing to unpack .../apt-transport-https_2.8.3_all.deb ...
Unpacking apt-transport-https (2.8.3) ...
Setting up apt-transport-https (2.8.3) ...
Hit:1ohttp://archive.ubuntu.com/ubuntu noble InRelease
Hit:2ohttp://archive.ubuntu.com/ubuntu1noble-updates]InReleaseed to deb.nodesou0m
Hit:3ahttps://download.docker.com/linux/ubuntu nobleiInReleaseaders] [Connectin0m
Hit:4ahttp://archive.ubuntu.com/ubuntuhnoble-backportstInReleasecurity.ubuntu.c0m
Get:5ahttps://deb.nodesource.com/node_18.xcnodistrouInReleasem[12.1 kB]
Hit:6ohttp://security.ubuntu.com/ubuntumnoble-security InRelease
Get:7ohttps://deb.nodesource.com/node_18.x nodistro/main amd64 Packages [12.1 kB]
Fetchedo24.2gkBminr0s0(54.63kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
15 packages can be upgraded. Run 'apt list --upgradable' to see them.
1;34m2026-06-30 07:32:06 - Repository configured successfully.0m
38;5;79m2026-06-30 07:32:06 - To install Node.js, run: apt install nodejs -y0m
38;5;79m2026-06-30 07:32:06 - You can use N|solid Runtime as a node.js alternative0m
1;32m2026-06-30 07:32:06 - To install N|solid Runtime, run: apt install nsolid -y
0m
+ apt-get install --yes nodejs
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
  nodejs
0 upgraded, 1 newly installed, 0 to remove and 15 not upgraded.
Need to get 29.7 MB of archives.
After this operation, 187 MB of additional disk space will be used.
Get:1ohttps://deb.nodesource.com/node_18.x nodistro/main amd64 nodejs amd64 18.20.8-1nodesource1 [29.7 MB]
Fetchedo29.7gMBBin91s (54.9]MB/s)
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package nodejs.
(Reading database ... 20505 files and directories currently installed.)
Preparing to unpack .../nodejs_18.20.8-1nodesource1_amd64.deb ...
Unpacking nodejs (18.20.8-1nodesource1) ...
Setting up nodejs (18.20.8-1nodesource1) ...
+ node --version
v18.20.8
+ npm --version
10.8.2
1G0K1G0K⠙1G0K⠹1G0K⠸1G0K⠼1G0K⠴1G0K⠦1G0K⠧1G0K⠇1G0K⠏1G0K⠋1G0K⠙1G0K⠹1G0K⠸1G0K⠼1G0K⠴1G0K⠦1G0K⠧1G0K⠇1G0K⠏1G0K⠋1G0K⠙1G0K⠹1G0K⠸1G0K⠼1G0K⠴1G0K⠦1G0K⠧1G0K⠇1G0K⠏1G0K⠋1G0K⠙1G0K⠹1G0K⠸1G0K⠼1G0K⠴1G0K⠦1G0K⠧1G0K⠇1G0K⠏1G0K⠋1G0K⠙1G0K⠹1G0K⠸1G0K⠼1G0K⠴1G0K⠦1G0K⠧1G0K⠇1G0K⠏1G0K⠋1G0K⠙1G0K⠹1G0K⠸1G0K⠼1G0K⠴1G0K⠦1G0K⠧1G0K⠇1G0K⠏1G0K⠋1G0K⠙1G0K⠹1G0K⠸1G0K⠼1G0K⠴1G0K⠦1G0K⠧1G0K⠇1G0K⠏1G0K⠋1G0K⠙1G0K⠹1G0K⠸1G0K⠼1G0K⠴1G0K⠦1G0K⠧1G0K⠇1G0K⠏1G0K⠋1G0K⠙1G0K⠹1G0K⠸1G0K⠼1G0K⠴1G0K⠦1G0K⠧1G0K⠇1G0K⠏1G0K⠋1G0K⠙1G0K⠹1G0K⠸1G0K⠼1G0K⠴1G0K⠦1G0K⠧1G0K⠇1G0K⠏1G0K⠋1G0K⠙1G0K⠹1G0K⠸1G0K⠼1G0K⠴1G0K⠦1G0K⠧1G0Knpm warn deprecated glob@10.5.0: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
1G0K⠧1G0K⠇1G0K⠏1G0K⠋1G0K⠙1G0K⠹1G0K
added 162 packages, and audited 163 packages in 11s
1G0K⠸1G0K
1G0K⠸1G0K48 packages are looking for funding
1G0K⠸1G0K  run `npm fund` for details
1G0K⠸1G0K
3 vulnerabilities (1 low, 1 moderate, 1 high)

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.
1G0K⠸1G0Knpm notice
npm notice New major version of npm available! 10.8.2 -> 11.18.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.18.0
npm notice To update run: npm install -g npm@11.18.0
npm notice
1G0K⠸1G0KFound 9 lines in /home/r/repo/.pdd
My version is 0.23.1
Ruby version is 3.4.9 at x86_64-linux
Reading from root dir .
Excluding node_modules/**/*
Excluding src/rules/unfinished.js
Excluding test/test_unfinished.js
Excluding src/rules/jargon.js
/usr/local/bundle/gems/pdd-0.23.1/lib/pdd/sources.rb:90: warning: undefining the allocator of T_DATA class FileMagic
/home/r/repo/.claude/settings.local.json is a binary file (70 bytes)
/home/r/repo/components.svg is a binary file (11957 bytes)
/home/r/repo/eslint.config.js is a binary file (4737 bytes)
/home/r/repo/package-lock.json is a binary file (73975 bytes)
/home/r/repo/package.json is a binary file (1103 bytes)
/home/r/repo/src/answer.js is a binary file (2401 bytes)
/home/r/repo/src/args.js is a binary file (3398 bytes)
/home/r/repo/src/defaults.js is a binary file (1490 bytes)
/home/r/repo/src/document.js is a binary file (744 bytes)
/home/r/repo/src/dogent.js is a binary file (5562 bytes)
/home/r/repo/src/fragments/bullets.js is a binary file (552 bytes)
/home/r/repo/src/fragments/frontmatter.js is a binary file (746 bytes)
/home/r/repo/src/fragments/header.js is a binary file (514 bytes)
/home/r/repo/src/fragments/prose.js is a binary file (450 bytes)
/home/r/repo/src/fragments/snippet.js is a binary file (466 bytes)
/home/r/repo/src/log.js is a binary file (1027 bytes)
/home/r/repo/src/markdown.js is a binary file (3144 bytes)
/home/r/repo/src/mask.js is a binary file (496 bytes)
/home/r/repo/src/openai.js is a binary file (1729 bytes)
/home/r/repo/src/oracle.js is a binary file (1438 bytes)
/home/r/repo/src/prompt.js is a binary file (4247 bytes)
/home/r/repo/src/quoted.js is a binary file (1108 bytes)
/home/r/repo/src/region.js is a binary file (716 bytes)
/home/r/repo/src/report.js is a binary file (2150 bytes)
/home/r/repo/src/rules/ambiguous-or.js is a binary file (1673 bytes)
/home/r/repo/src/rules/atomic.js is a binary file (1703 bytes)
/home/r/repo/src/rules/budget.js is a binary file (1239 bytes)
/home/r/repo/src/rules/command.js is a binary file (1570 bytes)
/home/r/repo/src/rules/concise.js is a binary file (1448 bytes)
/home/r/repo/src/rules/conditional.js is a binary file (1676 bytes)
/home/r/repo/src/rules/counter-example.js is a binary file (1688 bytes)
/home/r/repo/src/rules/crowded.js is a binary file (1721 bytes)
/home/r/repo/src/rules/dead-import.js is a binary file (3460 bytes)
/home/r/repo/src/rules/default.js is a binary file (1692 bytes)
/home/r/repo/src/rules/description-length.js is a binary file (1779 bytes)
/home/r/repo/src/rules/description-triggers.js is a binary file (1617 bytes)
/home/r/repo/src/rules/description-voice.js is a binary file (2091 bytes)
/home/r/repo/src/rules/done.js is a binary file (1338 bytes)
/home/r/repo/src/rules/duplicate-section.js is a binary file (1810 bytes)
/home/r/repo/src/rules/emoji.js is a binary file (1669 bytes)
/home/r/repo/src/rules/emphasis.js is a binary file (2384 bytes)
/home/r/repo/src/rules/empty.js is a binary file (1415 bytes)
/home/r/repo/src/rules/example.js is a binary file (1608 bytes)
/home/r/repo/src/rules/external-link.js is a binary file (2081 bytes)
/home/r/repo/src/rules/fence-language.js is a binary file (1415 bytes)
/home/r/repo/src/rules/format.js is a binary file (2059 bytes)
/home/r/repo/src/rules/frontmatter.js is a binary file (1959 bytes)
/home/r/repo/src/rules/grouped.js is a binary file (1278 bytes)
/home/r/repo/src/rules/hedging.js is a binary file (1514 bytes)
/home/r/repo/src/rules/hidden-char.js is a binary file (2423 bytes)
/home/r/repo/src/rules/homoglyph.js is a binary file (2316 bytes)
/home/r/repo/src/rules/index.js is a binary file (4058 bytes)
/home/r/repo/src/rules/inline-code.js is a binary file (2585 bytes)
/home/r/repo/src/rules/line-length.js is a binary file (1175 bytes)
/home/r/repo/src/rules/meta-reference.js is a binary file (1765 bytes)
/home/r/repo/src/rules/name-format.js is a binary file (1412 bytes)
/home/r/repo/src/rules/name-matches-dir.js is a binary file (1726 bytes)
/home/r/repo/src/rules/no-articles.js is a binary file (1278 bytes)
/home/r/repo/src/rules/ordered.js is a binary file (1592 bytes)
/home/r/repo/src/rules/passive.js is a binary file (1390 bytes)
/home/r/repo/src/rules/persona.js is a binary file (1576 bytes)
/home/r/repo/src/rules/placement.js is a binary file (1833 bytes)
/home/r/repo/src/rules/polite.js is a binary file (1501 bytes)
/home/r/repo/src/rules/positive.js is a binary file (1564 bytes)
/home/r/repo/src/rules/pseudo-heading.js is a binary file (1471 bytes)
/home/r/repo/src/rules/punctuation.js is a binary file (1694 bytes)
/home/r/repo/src/rules/quantifier.js is a binary file (2027 bytes)
/home/r/repo/src/rules/rationale.js is a binary file (1515 bytes)
/home/r/repo/src/rules/redundant.js is a binary file (2131 bytes)
/home/r/repo/src/rules/referential.js is a binary file (2164 bytes)
/home/r/repo/src/rules/section-level.js is a binary file (1359 bytes)
/home/r/repo/src/rules/self-contained.js is a binary file (1874 bytes)
/home/r/repo/src/rules/short-sections.js is a binary file (1249 bytes)
/home/r/repo/src/rules/simple.js is a binary file (2156 bytes)
/home/r/repo/src/rules/stale.js is a binary file (1700 bytes)
/home/r/repo/src/rules/terms.js is a binary file (2337 bytes)
/home/r/repo/src/rules/token-count.js is a binary file (1269 bytes)
/home/r/repo/src/rules/tool-clarity.js is a binary file (1647 bytes)
/home/r/repo/src/rules/transition.js is a binary file (1705 bytes)
/home/r/repo/src/rules/unique.js is a binary file (1682 bytes)
/home/r/repo/src/rules/units.js is a binary file (3688 bytes)
/home/r/repo/src/rules/untrusted.js is a binary file (2513 bytes)
/home/r/repo/src/rules/vague.js is a binary file (1970 bytes)
/home/r/repo/src/rules/weak-verb.js is a binary file (1747 bytes)
/home/r/repo/src/sources.js is a binary file (1456 bytes)
/home/r/repo/src/usage.js is a binary file (1617 bytes)
/home/r/repo/src/verdict.js is a binary file (883 bytes)
/home/r/repo/src/version.js is a binary file (334 bytes)
/home/r/repo/src/violation.js is a binary file (821 bytes)
/home/r/repo/src/yaml.js is a binary file (1461 bytes)
/home/r/repo/test/test_ambiguous_or.js is a binary file (1331 bytes)
/home/r/repo/test/test_answer.js is a binary file (3055 bytes)
/home/r/repo/test/test_args.js is a binary file (11059 bytes)
/home/r/repo/test/test_atomic.js is a binary file (3369 bytes)
/home/r/repo/test/test_budget.js is a binary file (1385 bytes)
/home/r/repo/test/test_command.js is a binary file (800 bytes)
/home/r/repo/test/test_concise.js is a binary file (1067 bytes)
/home/r/repo/test/test_conditional.js is a binary file (1442 bytes)
/home/r/repo/test/test_counter_example.js is a binary file (1566 bytes)
/home/r/repo/test/test_coverage.js is a binary file (5127 bytes)
/home/r/repo/test/test_crowded.js is a binary file (980 bytes)
/home/r/repo/test/test_dead_import.js is a binary file (3390 bytes)
/home/r/repo/test/test_default.js is a binary file (1428 bytes)
/home/r/repo/test/test_defaults.js is a binary file (2475 bytes)
/home/r/repo/test/test_description_length.js is a binary file (1595 bytes)
/home/r/repo/test/test_description_triggers.js is a binary file (1457 bytes)
/home/r/repo/test/test_description_voice.js is a binary file (1652 bytes)
/home/r/repo/test/test_dogent.js is a binary file (8972 bytes)
/home/r/repo/test/test_done.js is a binary file (1555 bytes)
/home/r/repo/test/test_duplicate_section.js is a binary file (1208 bytes)
/home/r/repo/test/test_emoji.js is a binary file (1051 bytes)
/home/r/repo/test/test_emphasis.js is a binary file (1601 bytes)
/home/r/repo/test/test_empty.js is a binary file (3110 bytes)
/home/r/repo/test/test_example.js is a binary file (1692 bytes)
/home/r/repo/test/test_external_link.js is a binary file (2411 bytes)
/home/r/repo/test/test_fence_language.js is a binary file (847 bytes)
/home/r/repo/test/test_fixtures.js is a binary file (1333 bytes)
/home/r/repo/test/test_format.js is a binary file (2162 bytes)
/home/r/repo/test/test_frontmatter.js is a binary file (1982 bytes)
/home/r/repo/test/test_grouped.js is a binary file (1177 bytes)
/home/r/repo/test/test_hedging.js is a binary file (1448 bytes)
/home/r/repo/test/test_hidden_char.js is a binary file (1664 bytes)
/home/r/repo/test/test_hints.js is a binary file (893 bytes)
/home/r/repo/test/test_homoglyph.js is a binary file (1150 bytes)
/home/r/repo/test/test_inline_code.js is a binary file (2270 bytes)
/home/r/repo/test/test_jargon.js is a binary file (3474 bytes)
/home/r/repo/test/test_line_length.js is a binary file (1190 bytes)
/home/r/repo/test/test_log.js is a binary file (2220 bytes)
/home/r/repo/test/test_markdown.js is a binary file (4049 bytes)
/home/r/repo/test/test_mask.js is a binary file (827 bytes)
/home/r/repo/test/test_meta_reference.js is a binary file (1723 bytes)
/home/r/repo/test/test_name_format.js is a binary file (1292 bytes)
/home/r/repo/test/test_name_matches_dir.js is a binary file (2241 bytes)
/home/r/repo/test/test_no_articles.js is a binary file (1460 bytes)
/home/r/repo/test/test_openai.js is a binary file (2980 bytes)
/home/r/repo/test/test_oracle.js is a binary file (3190 bytes)
/home/r/repo/test/test_ordered.js is a binary file (1640 bytes)
/home/r/repo/test/test_passive.js is a binary file (1424 bytes)
/home/r/repo/test/test_persona.js is a binary file (1606 bytes)
/home/r/repo/test/test_placement.js is a binary file (1686 bytes)
/home/r/repo/test/test_polite.js is a binary file (1409 bytes)
/home/r/repo/test/test_positive.js is a binary file (2202 bytes)
/home/r/repo/test/test_prompt.js is a binary file (3533 bytes)
/home/r/repo/test/test_pseudo_heading.js is a binary file (1451 bytes)
/home/r/repo/test/test_punctuation.js is a binary file (1663 bytes)
/home/r/repo/test/test_quantifier.js is a binary file (1996 bytes)
/home/r/repo/test/test_quoted.js is a binary file (693 bytes)
/home/r/repo/test/test_rationale.js is a binary file (1735 bytes)
/home/r/repo/test/test_redundant.js is a binary file (1497 bytes)
/home/r/repo/test/test_referential.js is a binary file (1663 bytes)
/home/r/repo/test/test_report.js is a binary file (3785 bytes)
/home/r/repo/test/test_rules.js is a binary file (442 bytes)
/home/r/repo/test/test_section_level.js is a binary file (1397 bytes)
/home/r/repo/test/test_self_contained.js is a binary file (1460 bytes)
/home/r/repo/test/test_short_sections.js is a binary file (819 bytes)
/home/r/repo/test/test_simple.js is a binary file (1787 bytes)
/home/r/repo/test/test_sources.js is a binary file (2861 bytes)
/home/r/repo/test/test_stale.js is a binary file (1578 bytes)
/home/r/repo/test/test_terms.js is a binary file (1491 bytes)
/home/r/repo/test/test_token_count.js is a binary file (1177 bytes)
/home/r/repo/test/test_tool_clarity.js is a binary file (1294 bytes)
/home/r/repo/test/test_transition.js is a binary file (1576 bytes)
/home/r/repo/test/test_unique.js is a binary file (854 bytes)
/home/r/repo/test/test_units.js is a binary file (4925 bytes)
/home/r/repo/test/test_untrusted.js is a binary file (3837 bytes)
/home/r/repo/test/test_usage.js is a binary file (1766 bytes)
/home/r/repo/test/test_vague.js is a binary file (1962 bytes)
/home/r/repo/test/test_verdict.js is a binary file (1395 bytes)
/home/r/repo/test/test_version.js is a binary file (408 bytes)
/home/r/repo/test/test_violation.js is a binary file (886 bytes)
/home/r/repo/test/test_weak_verb.js is a binary file (1325 bytes)
/home/r/repo/test/test_yaml.js is a binary file (2041 bytes)
Reading .github/workflows/actionlint.yml ...
Reading .github/workflows/copyrights.yml ...
Reading .github/workflows/dogent.yml ...
Reading .github/workflows/eslint.yml ...
Reading .github/workflows/markdown-lint.yml ...
Reading .github/workflows/pdd.yml ...
Reading .github/workflows/reuse.yml ...
Reading .github/workflows/typos.yml ...
Reading .github/workflows/up.yml ...
Reading .github/workflows/yamllint.yml ...
Reading .gitignore ...
Reading .pdd ...
Reading .pre-commit-hooks.yaml ...
Reading .rultor.yml ...
Reading CLAUDE.md ...
Reading LICENSE.txt ...
Reading LICENSES/MIT.txt ...
Reading README.md ...
Reading REUSE.toml ...
Reading test/fixtures/negative/conflicting.md ...
Reading test/fixtures/negative/duplicate.md ...
Reading test/fixtures/negative/vague.md ...
Reading test/fixtures/positive/commits.md ...
Reading test/fixtures/positive/deploys.md ...

> @yegor256/dogent@0.13.2 test
> mocha 'test/**/*.js' --timeout 60000

1G0K
0m0m
0m  AmbiguousOr0m
  32m  32m✔39m0m90m flags an and/or alternative0m
  32m  32m✔39m0m90m flags a slashed alternative0m
  32m  32m✔39m0m90m accepts a backticked path0m
  32m  32m✔39m0m90m accepts a plain command0m

0m  Answer0m
  32m  32m✔39m0m90m renders one SARIF result as a human violation line0m
  32m  32m✔39m0m90m skips a malformed result instead of crashing the run0m
  32m  32m✔39m0m90m drops a result that omits its confidence0m
  32m  32m✔39m0m90m drops a result that denies any contradiction0m
  32m  32m✔39m0m90m drops a result whose denial carries an adjective before the noun0m

0m  Answer confidence0m
  32m  32m✔39m0m90m drops a warning the model is unsure about0m
  32m  32m✔39m0m90m drops a warning that misses the confidence floor0m
  32m  32m✔39m0m90m keeps a warning the model is sure about0m
  32m  32m✔39m0m90m shows the model confidence beside a warning it kept0m

0m  Args paths0m
  32m  32m✔39m0m90m keeps every path that carries no dash0m
  32m  32m✔39m0m90m drops recognized flags from the paths0m
  32m  32m✔39m0m90m collects an unknown option0m
  32m  32m✔39m0m90m finds nothing unknown among recognized flags0m
  32m  32m✔39m0m90m treats a dashed token after the separator as a path0m
  32m  32m✔39m0m90m reports nothing unknown for a token past the separator0m

0m  Args flags0m
  32m  32m✔39m0m90m detects the sarif flag0m
  32m  32m✔39m0m90m reports no sarif flag when absent0m
  32m  32m✔39m0m90m detects the offline flag0m
  32m  32m✔39m0m90m reports no offline flag when absent0m
  32m  32m✔39m0m90m reads the sarif flag from the equals syntax0m

0m  Args help0m
  32m  32m✔39m0m90m detects the long help flag0m
  32m  32m✔39m0m90m detects the short help flag0m
  32m  32m✔39m0m90m reports no help flag when absent0m
  32m  32m✔39m0m90m never counts the help flag as unknown0m
  32m  32m✔39m0m90m never counts the short help flag as unknown0m

0m  Args suppress0m
  32m  32m✔39m0m90m reads a single suppressed rule0m
  32m  32m✔39m0m90m splits a comma-joined suppress list0m
  32m  32m✔39m0m90m merges repeated suppress options0m
  32m  32m✔39m0m90m suppresses nothing when the option is absent0m
  32m  32m✔39m0m90m never counts the suppress option as unknown0m

0m  Args headers0m
  32m  32m✔39m0m90m reads a single custom header0m
  32m  32m✔39m0m90m merges repeated header options0m
  32m  32m✔39m0m90m keeps a colon inside the header value0m
  32m  32m✔39m0m90m adds no header when the option is absent0m
  32m  32m✔39m0m90m rejects a header that carries no colon0m
  32m  32m✔39m0m90m never counts the header option as unknown0m

0m  Args hints0m
  32m  32m✔39m0m90m detects the hints flag0m
  32m  32m✔39m0m90m reports no hints flag when absent0m
  32m  32m✔39m0m90m never counts the hints flag as unknown0m

0m  Args verbose0m
  32m  32m✔39m0m90m detects the verbose flag0m
  32m  32m✔39m0m90m reports no verbose flag when absent0m
  32m  32m✔39m0m90m never counts the verbose flag as unknown0m

0m  Args show-prompt0m
  32m  32m✔39m0m90m detects the show-prompt flag0m
  32m  32m✔39m0m90m reports no show-prompt flag when absent0m
  32m  32m✔39m0m90m never counts the show-prompt flag as unknown0m

0m  Args model0m
  32m  32m✔39m0m90m reads the chosen model0m
  32m  32m✔39m0m90m reports an empty model when absent0m
  32m  32m✔39m0m90m lets the last model win when repeated0m
  32m  32m✔39m0m90m never counts the model option as unknown0m

0m  Args token0m
  32m  32m✔39m0m90m reads the chosen token0m
  32m  32m✔39m0m90m reports an empty token when absent0m
  32m  32m✔39m0m90m lets the last token win when repeated0m
  32m  32m✔39m0m90m never counts the token option as unknown0m

0m  Args version0m
  32m  32m✔39m0m90m detects the version flag0m
  32m  32m✔39m0m90m reports no version flag when absent0m
  32m  32m✔39m0m90m never counts the version flag as unknown0m

0m  Atomic0m
  32m  32m✔39m0m90m flags two sentences welded by a mid-line terminator0m
  32m  32m✔39m0m90m flags a semicolon-joined pair of instructions0m
  32m  32m✔39m0m90m accepts a single atomic instruction0m
  32m  32m✔39m0m90m accepts an Oxford-comma list closed by and0m
  32m  32m✔39m0m90m accepts a coordinated noun object trailing and0m
  32m  32m✔39m0m90m accepts a coordinated gerund object trailing and0m
  32m  32m✔39m0m90m accepts a temporal adverb trailing then0m
  32m  32m✔39m0m90m leaves an and-joined verb pair for the oracle0m

0m  Atomic abbreviations0m
  32m  32m✔39m0m90m accepts an inline example introduced by e.g.0m
  32m  32m✔39m0m90m accepts an inline clarification introduced by i.e.0m
  32m  32m✔39m0m90m accepts a trailing list closed by etc.0m

0m  Budget flags0m
  32m  32m✔39m0m90m flags a file that exceeds the instruction budget0m

0m  Budget accepts0m
  32m  32m✔39m0m90m accepts a file within the instruction budget0m

0m  Budget reports0m
  32m  32m✔39m0m90m reports the total instruction count in the message0m

0m  Command0m
  32m  32m✔39m0m90m flags a line that opens with a pronoun0m
  32m  32m✔39m0m90m accepts an imperative line0m

0m  Concise0m
  32m  32m✔39m0m90m flags a file past the line budget0m
  32m  32m✔39m0m90m accepts a file within the line budget0m
  32m  32m✔39m0m90m ignores a lone trailing newline0m

0m  Conditional0m
  32m  32m✔39m0m90m flags a line with if and else0m
  32m  32m✔39m0m90m flags a line with when and otherwise0m
  32m  32m✔39m0m90m accepts a single if guard0m
  32m  32m✔39m0m90m ignores keywords inside a code span0m

0m  CounterExample0m
  32m  32m✔39m0m90m flags a for-example-do-not line with a backticked sample0m
  32m  32m✔39m0m90m flags an instead-of-writing line with a quoted sample0m

0m  CounterExample acceptance0m
  32m  32m✔39m0m90m accepts a clean positive instruction0m
  32m  32m✔39m0m90m accepts an introducer with no sample0m

0m  coverage0m
  32m  32m✔39m0m90m triggers every deterministic rule0m31m (160ms)0m
  32m  32m✔39m0m90m registers every rule file in the pipeline0m

0m  Crowded flags0m
  32m  32m✔39m0m90m flags a section that exceeds the instruction limit0m

0m  Crowded accepts0m
  32m  32m✔39m0m90m accepts a section within the instruction limit0m

0m  DeadImport0m
  32m  32m✔39m0m90m flags a missing import target0m
  32m  32m✔39m0m90m accepts an import that resolves beside the manifesto0m
  32m  32m✔39m0m90m resolves imports from the manifesto directory0m

0m  DeadImport chains0m
  32m  32m✔39m0m90m flags an import chain that loops back0m
  32m  32m✔39m0m90m flags a chain nested deeper than five levels0m
  32m  32m✔39m0m90m accepts a chain nested exactly five levels0m

0m  Default0m
  32m  32m✔39m0m90m flags an optionally marker without a default0m
  32m  32m✔39m0m90m flags a you-may marker without a default0m
  32m  32m✔39m0m90m accepts an optional line that states a default0m
  32m  32m✔39m0m90m ignores a marker inside a code span0m

0m  Defaults parsing0m
  32m  32m✔39m0m90m reads one flag from a single-line file0m
  32m  32m✔39m0m90m splits an option and its value on one line0m
  32m  32m✔39m0m90m keeps whitespace inside an option value0m
  32m  32m✔39m0m90m drops a blank line0m
  32m  32m✔39m0m90m drops a comment line0m

0m  Defaults lookup0m
  32m  32m✔39m0m90m returns nothing when no file exists0m
  32m  32m✔39m0m90m prefers the current directory over the home0m
  32m  32m✔39m0m90m falls back to the home when the current directory lacks one0m

0m  DescriptionLength0m
  32m  32m✔39m0m90m flags an oversized description0m
  32m  32m✔39m0m90m flags an empty stub0m
  32m  32m✔39m0m90m accepts a concise description0m
  32m  32m✔39m0m90m ignores a file that is not a skill0m

0m  DescriptionTriggers0m
  32m  32m✔39m0m90m flags a short description with no trigger0m
  32m  32m✔39m0m90m accepts a description that says when to use the skill0m
  32m  32m✔39m0m90m ignores a file that is not a skill0m

0m  DescriptionVoice0m
  32m  32m✔39m0m90m flags a first-person description0m
  32m  32m✔39m0m90m flags a second-person description0m
  32m  32m✔39m0m90m accepts a third-person description with a trigger0m
  32m  32m✔39m0m90m ignores a file that is not a skill0m

0m  dogent0m
  32m  32m✔39m0m90m exits non-zero when a manifesto breaks a rule0m31m (125ms)0m
  32m  32m✔39m0m90m reports zero problems for a clean manifesto0m31m (125ms)0m
  32m  32m✔39m0m90m lints default manifestos when handed a directory0m31m (125ms)0m
  32m  32m✔39m0m90m skips the LLM when handed the offline flag0m31m (122ms)0m
  32m  32m✔39m0m90m exits with a usage error on an unknown option0m31m (96ms)0m

0m  dogent verbose0m
  32m  32m✔39m0m90m prints each scanned manifesto path under the verbose flag0m31m (121ms)0m
  32m  32m✔39m0m90m hides the scanning notes without the verbose flag0m31m (122ms)0m

0m  dogent file size0m
  32m  32m✔39m0m90m announces the line count and byte size of a scanned manifesto0m31m (124ms)0m

0m  dogent show-prompt0m
  32m  32m✔39m0m90m reveals the AI prompt under the show-prompt flag0m31m (167ms)0m
  32m  32m✔39m0m90m hides the AI prompt without the show-prompt flag0m31m (165ms)0m

0m  dogent missing path0m
  32m  32m✔39m0m90m exits with a readable message when a passed path does not exist0m31m (99ms)0m

0m  dogent local summary0m
  32m  32m✔39m0m90m labels the local summary line on its own0m31m (128ms)0m

0m  dogent rules count0m
  32m  32m✔39m0m90m reports how many rules it applied0m31m (124ms)0m

0m  dogent timing0m
  32m  32m✔39m0m90m prints the analysis duration beside the problem count0m31m (122ms)0m

0m  dogent local short circuit0m
  32m  32m✔39m0m90m stays away from the LLM when a local rule already fired0m31m (123ms)0m

0m  dogent suppress0m
  32m  32m✔39m0m90m silences a named rule and exits clean0m31m (125ms)0m

0m  dogent hints0m
  32m  32m✔39m0m90m prints a fixing hint for a firing rule when asked0m31m (122ms)0m
  32m  32m✔39m0m90m prints no hints block when not asked0m31m (123ms)0m

0m  dogent defaults0m
  32m  32m✔39m0m90m reads options from a .dogent file in the current directory0m31m (123ms)0m

0m  dogent help0m
  32m  32m✔39m0m90m exits with success when asked for help0m31m (96ms)0m
  32m  32m✔39m0m90m prints the usage banner when asked for help0m31m (98ms)0m

0m  dogent version0m
  32m  32m✔39m0m90m exits with success when asked for the version0m31m (96ms)0m
  32m  32m✔39m0m90m prints a dotted number triple when asked for the version0m31m (98ms)0m

0m  Done0m
  32m  32m✔39m0m90m flags a skill with no completion check0m
  32m  32m✔39m0m90m accepts a skill with a Verify section0m
  32m  32m✔39m0m90m accepts a skill that confirms the test passes0m
  32m  32m✔39m0m90m ignores a file that is not a skill0m

0m  DuplicateSection0m
  32m  32m✔39m0m90m flags two identical headings0m
  32m  32m✔39m0m90m flags case and space insensitively0m

0m  DuplicateSection acceptance0m
  32m  32m✔39m0m90m accepts distinct headings0m

0m  Emoji0m
  32m  32m✔39m0m90m flags a decorative emoji0m
  32m  32m✔39m0m90m accepts plain ASCII prose0m
  32m  32m✔39m0m90m ignores an emoji inside a code span0m

0m  Emphasis0m
  32m  32m✔39m0m90m flags a curated all-caps word0m
  32m  32m✔39m0m90m flags a run of consecutive all-caps words0m
  32m  32m✔39m0m90m flags repeated punctuation0m
  32m  32m✔39m0m90m accepts a lone acronym0m
  32m  32m✔39m0m90m accepts adjacent short acronyms0m

0m  Empty flags0m
  32m  32m✔39m0m90m flags a hollow heading that is followed by a heading0m
  32m  32m✔39m0m90m flags the last heading when the file ends after it0m
  32m  32m✔39m0m90m flags a heading before a heading and a heading before EOF0m
  32m  32m✔39m0m90m flags only the hollow heading in a mixed file0m

0m  Empty accepts0m
  32m  32m✔39m0m90m accepts a heading with prose beneath it0m
  32m  32m✔39m0m90m accepts a heading with bullets beneath it0m
  32m  32m✔39m0m90m accepts a heading with a snippet beneath it0m

0m  Empty edge0m
  32m  32m✔39m0m90m flags a lone heading at end of file0m

0m  Empty companion to Grouped0m
  32m  32m✔39m0m90m together cover the section-instruction relationship0m

0m  Example0m
  32m  32m✔39m0m90m flags a SKILL.md that only describes0m
  32m  32m✔39m0m90m accepts a SKILL.md carrying a code block0m
  32m  32m✔39m0m90m accepts a SKILL.md carrying an example heading0m
  32m  32m✔39m0m90m ignores a file that is not a skill0m

0m  ExternalLink0m
  32m  32m✔39m0m90m flags a bare https URL0m
  32m  32m✔39m0m90m flags a bare http URL0m
  32m  32m✔39m0m90m accepts a URL inside inline code0m
  32m  32m✔39m0m90m accepts a URL inside a fenced block0m
  32m  32m✔39m0m90m accepts a plain command with no URL0m

0m  ExternalLink guard0m
  32m  32m✔39m0m90m accepts a URL when a data-only guard sits in a separate section0m
  32m  32m✔39m0m90m still flags a URL when no guard is declared0m

0m  FenceLanguage0m
  32m  32m✔39m0m90m flags a bare fence with no language0m
  32m  32m✔39m0m90m accepts a fence that names a language0m

0m  fixtures0m
  36m  - stays silent through the model for commits.md0m
  36m  - stays silent through the model for deploys.md0m
  36m  - lets the oracle catch the flaw in conflicting.md0m
  36m  - lets the oracle catch the flaw in duplicate.md0m
  36m  - lets the oracle catch the flaw in vague.md0m

0m  Format0m
  32m  32m✔39m0m90m flags a generating skill with no format0m
  32m  32m✔39m0m90m accepts a generating skill that shows a snippet0m
  32m  32m✔39m0m90m accepts a generating skill with a format section0m
  32m  32m✔39m0m90m accepts a skill that generates nothing0m
  32m  32m✔39m0m90m ignores a file that is not a skill0m

0m  Frontmatter0m
  32m  32m✔39m0m90m flags a skill that opens without frontmatter0m
  32m  32m✔39m0m90m accepts a skill that declares every required key0m
  32m  32m✔39m0m90m flags a skill that drops a required key0m
  32m  32m✔39m0m90m flags a frontmatter key outside the allowed set0m
  32m  32m✔39m0m90m ignores frontmatter on a file that is not a skill0m

0m  Grouped0m
  32m  32m✔39m0m90m flags an instruction that precedes every section0m
  32m  32m✔39m0m90m accepts an instruction that sits under a section0m
  32m  32m✔39m0m90m never counts a frontmatter key as loose instruction0m

0m  Hedging0m
  32m  32m✔39m0m90m flags hedge words in a soft instruction0m
  32m  32m✔39m0m90m accepts a firm command0m
  32m  32m✔39m0m90m keeps "every" clear of the "very" boundary0m
  32m  32m✔39m0m90m ignores hedge words quoted inside inline code0m

0m  HiddenChar0m
  32m  32m✔39m0m90m flags a zero-width space0m
  32m  32m✔39m0m90m flags a right-to-left override0m
  32m  32m✔39m0m90m accepts a U+FE0F that completes an emoji variation sequence0m
  32m  32m✔39m0m90m flags a lone U+FE0F not bound to an emoji base0m
  32m  32m✔39m0m90m accepts clean ASCII prose0m

0m  hints0m
  32m  32m✔39m0m90m offers a hint method on every assembled rule0m
  32m  32m✔39m0m90m returns a non-empty paragraph from every rule hint0m
  32m  32m✔39m0m90m keeps every rule hint on a single line0m

0m  Homoglyph0m
  32m  32m✔39m0m90m flags a Cyrillic look-alike0m
  32m  32m✔39m0m90m flags a Greek look-alike0m
  32m  32m✔39m0m90m accepts pure ASCII prose0m

0m  InlineCode flags0m
  32m  32m✔39m0m90m flags a bare filename with a known extension0m
  32m  32m✔39m0m90m flags a bare path with a slash0m
  32m  32m✔39m0m90m flags a bare command-line flag0m
  32m  32m✔39m0m90m flags a bare shell command with an argument0m

0m  InlineCode accepts0m
  32m  32m✔39m0m90m accepts an already backticked literal0m
  32m  32m✔39m0m90m accepts plain prose with no literal token0m
  32m  32m✔39m0m90m leaves an @-import to the dead-import rule0m

0m  Jargon0m
  32m  32m✔39m0m90m flags an undefined acronym0m
  32m  32m✔39m0m90m accepts an acronym expanded in parentheses0m
  32m  32m✔39m0m90m accepts an acronym whose initials match a later gloss0m
  32m  32m✔39m0m90m accepts an allowlisted acronym0m
  32m  32m✔39m0m90m ignores an acronym inside a code span0m

0m  Jargon definitions0m
  32m  32m✔39m0m90m accepts an acronym defined as expansion before parentheses0m
  32m  32m✔39m0m90m accepts an acronym defined with "stands for"0m
  32m  32m✔39m0m90m accepts an acronym defined with "Read X as"0m

0m  Jargon allowlist0m
  32m  32m✔39m0m90m accepts a filename on the allowlist0m
  32m  32m✔39m0m90m still flags a token merely qualified by a following noun0m

0m  LineLength0m
  32m  32m✔39m0m90m flags a line wider than the limit0m
  32m  32m✔39m0m90m accepts lines within the limit0m
  32m  32m✔39m0m90m points the violation one column past the limit0m

0m  Log0m
  32m  32m✔39m0m90m writes an info line to its output stream0m
  32m  32m✔39m0m90m writes a debug line to its error stream when verbose0m
  32m  32m✔39m0m90m paints debug notes through its colorizer0m
  32m  32m✔39m0m90m drops a debug line when not verbose0m
  32m  32m✔39m0m90m keeps debug notes off the output stream0m

0m  Log error0m
  32m  32m✔39m0m90m writes an error line to its error stream without verbose0m
  32m  32m✔39m0m90m keeps error lines off the output stream0m

0m  Markdown0m
  32m  32m✔39m0m90m parses a lone header into one header piece0m
  32m  32m✔39m0m90m parses a fenced block into one snippet piece0m
  32m  32m✔39m0m90m collapses consecutive bullets into one bullets piece0m
  32m  32m✔39m0m90m keeps each bullet as its own inner prose piece0m
  32m  32m✔39m0m90m keeps two prose lines as two pieces0m
  32m  32m✔39m0m90m tracks the line number of a header0m

0m  Markdown bullet continuations0m
  32m  32m✔39m0m90m keeps the list open across a wrapped continuation line0m
  32m  32m✔39m0m90m folds a continuation into the bullet it belongs to0m
  32m  32m✔39m0m90m joins the continuation text to its bullet0m

0m  Markdown line endings0m
  32m  32m✔39m0m90m strips trailing carriage returns from CRLF prose0m

0m  mask0m
  32m  32m✔39m0m90m blanks out an inline-code span0m
  32m  32m✔39m0m90m keeps every column offset intact0m
  32m  32m✔39m0m90m leaves prose without backticks untouched0m

0m  MetaReference0m
  32m  32m✔39m0m90m flags an "as an AI" self-reference0m
  32m  32m✔39m0m90m flags a "these instructions" self-reference0m
  32m  32m✔39m0m90m accepts a plain command0m
  32m  32m✔39m0m90m ignores a self-reference inside a code span0m
  32m  32m✔39m0m90m stays disjoint from persona role assignment0m

0m  NameFormat0m
  32m  32m✔39m0m90m flags a skill whose name is not kebab-case0m
  32m  32m✔39m0m90m accepts a skill whose name is kebab-case0m
  32m  32m✔39m0m90m ignores a name on a file that is not a skill0m

0m  NameMatchesDir0m
  32m  32m✔39m0m90m accepts a name that equals its parent directory0m
  32m  32m✔39m0m90m flags a name that differs from its parent directory0m
  32m  32m✔39m0m90m resolves the parent of a bare filename against the filesystem0m
  32m  32m✔39m0m90m ignores a name inside a dot-prefixed generated directory0m
  32m  32m✔39m0m90m ignores a file that is not a skill0m

0m  NoArticles0m
  32m  32m✔39m0m90m flags the article "the"0m
  32m  32m✔39m0m90m accepts a line free of articles0m
  32m  32m✔39m0m90m ignores an article quoted inside inline code0m
  32m  32m✔39m0m90m ignores an article inside a frontmatter slug0m

0m  Openai0m
  32m  32m✔39m0m90m returns the assistant message content from the reply0m
  32m  32m✔39m0m90m reports the token usage the reply carries0m
  32m  32m✔39m0m90m fails fast when the endpoint rejects the request0m

0m  Openai rejection0m
  32m  32m✔39m0m90m reveals the response body, not just the bare status code0m

0m  Openai endpoint0m
  32m  32m✔39m0m90m targets the chat-completions path beneath the configured base URL0m
  32m  32m✔39m0m90m trims a trailing slash from the configured base URL0m

0m  Oracle0m
  32m  32m✔39m0m90m turns the AI reply into rendered violations0m
  32m  32m✔39m0m90m surfaces the token usage the chat reported0m
  32m  32m✔39m0m90m logs the full prompt it sends to the chat0m

0m  Oracle prompt log0m
  32m  32m✔39m0m90m announces the prompt size before sending it0m
  32m  32m✔39m0m90m indents every logged prompt line by two spaces0m

0m  Ordered0m
  32m  32m✔39m0m90m flags an unordered bullet with a sequence marker0m
  32m  32m✔39m0m90m flags a then-marked unordered bullet0m
  32m  32m✔39m0m90m accepts a numbered step0m
  32m  32m✔39m0m90m accepts an unordered bullet with no sequence marker0m
  32m  32m✔39m0m90m ignores a marker word inside a code span0m

0m  Passive0m
  32m  32m✔39m0m90m flags a must-be-validated line0m
  32m  32m✔39m0m90m flags an are-emitted line0m
  32m  32m✔39m0m90m accepts an imperative line0m
  32m  32m✔39m0m90m accepts an attributive participle before a noun0m

0m  Persona0m
  32m  32m✔39m0m90m flags a you-are role line0m
  32m  32m✔39m0m90m flags an act-as role line0m
  32m  32m✔39m0m90m flags an as-a-role preface0m
  32m  32m✔39m0m90m accepts a plain imperative0m
  32m  32m✔39m0m90m accepts a mid-line as-a phrase0m

0m  Placement flags0m
  32m  32m✔39m0m90m flags a critical section buried in the middle third0m

0m  Placement accepts0m
  32m  32m✔39m0m90m accepts a critical section leading the file0m
  32m  32m✔39m0m90m ignores a heading without a critical keyword0m

0m  Polite flags0m
  32m  32m✔39m0m90m flags a please courtesy phrase0m
  32m  32m✔39m0m90m flags a make sure to scaffolding phrase0m

0m  Polite accepts0m
  32m  32m✔39m0m90m accepts a plain command with no courtesy0m
  32m  32m✔39m0m90m ignores courtesy words quoted inside inline code0m

0m  Positive0m
  32m  32m✔39m0m90m flags a do-not line0m
  32m  32m✔39m0m90m flags a never line0m
  32m  32m✔39m0m90m flags a contracted do-not line0m
  32m  32m✔39m0m90m flags a banned bullet item0m

0m  Positive acceptance0m
  32m  32m✔39m0m90m accepts a positive imperative0m
  32m  32m✔39m0m90m accepts a ban word used mid-line as a modifier0m
  32m  32m✔39m0m90m ignores a ban hidden inside a code span0m

0m  Prompt0m
  32m  32m✔39m0m90m carries the manifesto body verbatim0m
  32m  32m✔39m0m90m opens its sections with first-level Markdown headers0m
  32m  32m✔39m0m90m wraps the manifesto body in a fenced Markdown snippet0m
  32m  32m✔39m0m90m asks the oracle to hunt for inconsistencies0m
  32m  32m✔39m0m90m hands the oracle no Checks section0m
  32m  32m✔39m0m90m bullets no rule for the oracle to apply0m
  32m  32m✔39m0m90m omits the phantom line a trailing newline would add0m

0m  Prompt reply shape0m
  32m  32m✔39m0m90m asks the oracle to score each warning with a confidence0m
  32m  32m✔39m0m90m grants the oracle permission to report nothing0m
  32m  32m✔39m0m90m asks the oracle to explain how the lines clash0m

0m  Prompt reasoning caveats0m
  32m  32m✔39m0m90m tells the oracle to honor explicit branch words0m
  32m  32m✔39m0m90m tells the oracle that sequencing is compatible0m
  32m  32m✔39m0m90m tells the oracle that try-then-fallback is compatible0m
  32m  32m✔39m0m90m tells the oracle to look for a resolving line first0m

0m  PseudoHeading0m
  32m  32m✔39m0m90m flags a bold label ending in a colon0m
  32m  32m✔39m0m90m flags an underscore-emphasized label0m

0m  PseudoHeading acceptance0m
  32m  32m✔39m0m90m accepts a real second-level heading0m
  32m  32m✔39m0m90m accepts a line with inline bold inside other words0m

0m  Punctuation0m
  32m  32m✔39m0m90m flags a sentence that opens in lower case0m
  32m  32m✔39m0m90m flags a sentence that lacks a closing period0m
  32m  32m✔39m0m90m accepts a sentence cased and stopped correctly0m
  32m  32m✔39m0m90m leaves section headings untouched0m
  32m  32m✔39m0m90m inspects the text of a bullet beyond its marker0m

0m  Quantifier flags0m
  32m  32m✔39m0m90m flags a several quantity word0m
  32m  32m✔39m0m90m flags an a few quantity phrase0m
  32m  32m✔39m0m90m flags a multiple quantity word0m

0m  Quantifier accepts0m
  32m  32m✔39m0m90m accepts an exact count0m
  32m  32m✔39m0m90m ignores a quantity word inside a code span0m
  32m  32m✔39m0m90m ignores a quantity quoted inside a described thesis0m

0m  quoted0m
  32m  32m✔39m0m90m marks a word after a report-that clause as quoted0m
  32m  32m✔39m0m90m leaves a word before any report clause unquoted0m

0m  Rationale0m
  32m  32m✔39m0m90m flags a because line0m
  32m  32m✔39m0m90m flags a this-keeps line0m
  32m  32m✔39m0m90m flags a the-reason line0m

0m  Rationale acceptance0m
  32m  32m✔39m0m90m accepts a clean imperative0m
  32m  32m✔39m0m90m accepts an imperative containing so-that mid-line0m

0m  Redundant0m
  32m  32m✔39m0m90m flags a generic "Be helpful and accurate" line0m
  32m  32m✔39m0m90m flags "Write clean code" regardless of case0m
  32m  32m✔39m0m90m flags a generic instruction inside a bullet list0m
  32m  32m✔39m0m90m accepts a project-specific instruction0m

0m  Referential0m
  32m  32m✔39m0m90m flags an it-subject line0m
  32m  32m✔39m0m90m flags a this-subject line0m
  32m  32m✔39m0m90m accepts a demonstrative determiner0m
  32m  32m✔39m0m90m accepts a named subject0m
  32m  32m✔39m0m90m ignores a pronoun inside a code span0m

0m  Report0m
  32m  32m✔39m0m90m counts every violation it holds0m
  32m  32m✔39m0m90m renders each violation inside its body0m
  32m  32m✔39m0m90m keeps the problem count out of its body0m

0m  Report summary0m
  32m  32m✔39m0m90m summarises the total inside its summary0m
  32m  32m✔39m0m90m appends the analysis duration when handed one0m
  32m  32m✔39m0m90m omits the duration when none is given0m
  32m  32m✔39m0m90m invites a false-positive report when problems exist0m
  32m  32m✔39m0m90m stays silent about false positives when clean0m

0m  Report hints0m
  32m  32m✔39m0m90m renders the hint of a rule that reported a violation0m
  32m  32m✔39m0m90m names each firing rule only once0m
  32m  32m✔39m0m90m emits nothing when no violation fired0m

0m  rules0m
  32m  32m✔39m0m90m hands every assembled rule a violations method0m

0m  SectionLevel0m
  32m  32m✔39m0m90m accepts a lone leading title0m
  32m  32m✔39m0m90m flags a first-level heading below the title0m
  32m  32m✔39m0m90m flags a third-level heading0m
  32m  32m✔39m0m90m accepts a second-level heading0m

0m  SelfContained0m
  32m  32m✔39m0m90m flags a mentioned-above reference0m
  32m  32m✔39m0m90m flags a section-below reference0m
  32m  32m✔39m0m90m accepts a concrete markdown link0m
  32m  32m✔39m0m90m ignores a reference inside a code span0m

0m  ShortSections0m
  32m  32m✔39m0m90m flags a section name of four words0m
  32m  32m✔39m0m90m accepts a two-word section name0m

0m  Simple0m
  32m  32m✔39m0m90m flags a tangled multi-clause line0m
  32m  32m✔39m0m90m accepts a short imperative line0m
  32m  32m✔39m0m90m accepts one conjunction with one comma0m
  32m  32m✔39m0m90m accepts a comma-separated list carrying no conjunction0m
  32m  32m✔39m0m90m accepts a coordinated list inside a single when clause0m

0m  Sources0m
  32m  32m✔39m0m90m keeps a plain file path untouched0m
  32m  32m✔39m0m90m expands a directory into its default manifesto files0m
  32m  32m✔39m0m90m skips default manifestos that the directory lacks0m
  32m  32m✔39m0m90m finds manifestos nested inside subdirectories0m
  32m  32m✔39m0m90m ignores manifestos buried inside node_modules0m

0m  Sources error handling0m
  32m  32m✔39m0m90m throws a clear error when a passed path does not exist0m

0m  Stale0m
  32m  32m✔39m0m90m flags a latest reference0m
  32m  32m✔39m0m90m flags an as-of-today reference0m
  32m  32m✔39m0m90m flags a hardcoded version literal0m
  32m  32m✔39m0m90m ignores a version inside a fenced code block0m
  32m  32m✔39m0m90m accepts a durable rule0m

0m  Terms0m
  32m  32m✔39m0m90m flags two synonyms of one concept0m
  32m  32m✔39m0m90m accepts one consistent term0m
  32m  32m✔39m0m90m accepts "bot" beside "agent" as domain-distinct nouns0m
  32m  32m✔39m0m90m ignores synonyms inside code spans0m

0m  TokenCount0m
  32m  32m✔39m0m90m flags a file that overflows the token cap0m
  32m  32m✔39m0m90m accepts a file within the token cap0m
  32m  32m✔39m0m90m counts the tokens hidden inside frontmatter0m

0m  ToolClarity0m
  32m  32m✔39m0m90m flags running the script0m
  32m  32m✔39m0m90m flags using the tool0m
  32m  32m✔39m0m90m ignores a backticked command0m
  32m  32m✔39m0m90m accepts a proper name0m

0m  Transition0m
  32m  32m✔39m0m90m flags a leading "furthermore" connector0m
  32m  32m✔39m0m90m flags a leading "in summary" connector0m
  32m  32m✔39m0m90m accepts a plain command0m
  32m  32m✔39m0m90m accepts a line with no leading connector0m
  32m  32m✔39m0m90m ignores a connector inside inline code0m

0m  Unfinished flags0m
  32m  32m✔39m0m90m flags a line carrying a TODO token0m
  32m  32m✔39m0m90m flags a line carrying an angle-bracket placeholder0m
  32m  32m✔39m0m90m flags a line ending in a bare ellipsis0m

0m  Unfinished accepts0m
  32m  32m✔39m0m90m accepts a finished imperative line0m
  32m  32m✔39m0m90m ignores an angle-bracket placeholder inside inline code0m

0m  Unique0m
  32m  32m✔39m0m90m flags an instruction that repeats another0m
  32m  32m✔39m0m90m accepts a file with distinct instructions0m

0m  Units0m
  32m  32m✔39m0m90m flags a bare ceiling number0m
  32m  32m✔39m0m90m flags a bare delay number0m
  32m  32m✔39m0m90m accepts a number carrying a unit0m
  32m  32m✔39m0m90m accepts a number carrying a spelled unit0m

0m  Units exemptions0m
  32m  32m✔39m0m90m accepts a numbered list ordinal0m
  32m  32m✔39m0m90m accepts a version number0m
  32m  32m✔39m0m90m ignores digits welded to an identifier0m
  32m  32m✔39m0m90m accepts the lower bound of a range whose unit trails the upper bound0m
  32m  32m✔39m0m90m ignores a number inside a code span0m

0m  Units identifiers0m
  32m  32m✔39m0m90m accepts a count noun added to the whitelist0m
  32m  32m✔39m0m90m ignores a status code after "code"0m

0m  Units follow-up0m
  32m  32m✔39m0m90m accepts a four-digit calendar year0m
  32m  32m✔39m0m90m accepts an edition suffix after an apostrophe0m
  32m  32m✔39m0m90m ignores digits inside a bare URL0m
  32m  32m✔39m0m90m accepts a method-count unit noun0m
  32m  32m✔39m0m90m accepts a unit word past a masked code span0m

0m  Untrusted0m
  32m  32m✔39m0m90m flags an unguarded read of a page0m
  32m  32m✔39m0m90m flags an unguarded fetch of a url0m
  32m  32m✔39m0m90m accepts a guarded data-only instruction0m
  32m  32m✔39m0m90m accepts a line that consumes no external source0m
  32m  32m✔39m0m90m ignores a source named inside a code span0m

0m  Untrusted scope and sources0m
  32m  32m✔39m0m90m accepts a consuming line when a guard sits in a separate section0m
  32m  32m✔39m0m90m ignores a skill reading its own bare output0m
  32m  32m✔39m0m90m flags an unguarded read of command output0m

0m  Untrusted hyphen boundaries0m
  32m  32m✔39m0m90m ignores a verb buried in a hyphenated compound word0m
  32m  32m✔39m0m90m ignores a verb trailing a hyphenated compound word0m

0m  Untrusted environment variables0m
  32m  32m✔39m0m90m accepts a url read from a host-injected environment variable0m

0m  Usage0m
  32m  32m✔39m0m90m adds the tokens of another tally0m
  32m  32m✔39m0m90m keeps the model name when adding to an empty tally0m
  32m  32m✔39m0m90m estimates cost from the per-model price table0m
  32m  32m✔39m0m90m prices a million tokens of gpt-5.4 from its table entry0m
  32m  32m✔39m0m90m charges nothing for a model absent from the price table0m
  32m  32m✔39m0m90m renders a one-line summary of the exchange0m

0m  Vague0m
  32m  32m✔39m0m90m flags a properly qualifier0m
  32m  32m✔39m0m90m flags a clean qualifier0m
  32m  32m✔39m0m90m flags a fast qualifier0m
  32m  32m✔39m0m90m accepts a measurable criterion0m
  32m  32m✔39m0m90m ignores a qualifier inside a code span0m

0m  Vague described positions0m
  32m  32m✔39m0m90m ignores a qualifier quoted inside a described thesis0m

0m  Verdict0m
  32m  32m✔39m0m90m shows the confidence as a percentage beside the warning0m
  32m  32m✔39m0m90m rounds the confidence to a whole percentage0m
  32m  32m✔39m0m90m delegates its SARIF result to the wrapped violation0m
  32m  32m✔39m0m90m exposes the rule id of the violation it wraps0m

0m  version0m
  32m  32m✔39m0m90m matches the semantic version shape0m

0m  Violation0m
  32m  32m✔39m0m90m carries its rule id into the SARIF result0m
  32m  32m✔39m0m90m renders a human line with the location ahead of the message0m

0m  WeakVerb0m
  32m  32m✔39m0m90m flags a leading handle verb0m
  32m  32m✔39m0m90m flags a leading manage verb0m
  32m  32m✔39m0m90m accepts a precise leading verb0m
  32m  32m✔39m0m90m ignores a weak verb inside a code span0m

0m  Yaml0m
  32m  32m✔39m0m90m parses a flat key into one pair0m
  32m  32m✔39m0m90m reads the value of a key0m
  32m  32m✔39m0m90m tracks the absolute line of a key0m
  32m  32m✔39m0m90m holds no pair for a comment line0m
  32m  32m✔39m0m90m folds a literal block scalar into the value0m
  32m  32m✔39m0m90m folds a folded block scalar into the value0m
  32m  32m✔39m0m90m keeps the key row of a block scalar0m
  32m  32m✔39m0m90m stops folding a block scalar at the next key0m


92m 0m32m 468 passing0m90m (3s)0m
36m 0m36m 5 pending0m

1G0K⠙1G0K[__rultor 8e4b55d] set version to 0.13.2
 2 files changed, 3 insertions(+), 3 deletions(-)
1G0K⠙1G0K⠹1G0K⠸1G0K⠼1G0Knpm warn publish npm auto-corrected some errors in your package.json when publishing.  Please run "npm pkg fix" to address these errors.
1G0K⠼1G0Knpm warn publish errors corrected:
npm warn publish "bin[dogent]" script name was cleaned
npm warn publish "repository" was changed from a string to an object
npm warn publish "repository.url" was normalized to "git+https://github.com/yegor256/dogent.git"
1G0K⠼1G0Knpm notice
1G0K⠼1G0Knpm notice 📦  @yegor256/dogent@0.13.2
1G0K⠼1G0Knpm notice Tarball Contents
1G0K⠼1G0Knpm notice 1.1kB LICENSE.txt
npm notice 11.7kB README.md
npm notice 1.1kB package.json
npm notice 2.4kB src/answer.js
npm notice 3.4kB src/args.js
npm notice 1.5kB src/defaults.js
npm notice 744B src/document.js
npm notice 5.6kB src/dogent.js
npm notice 552B src/fragments/bullets.js
npm notice 746B src/fragments/frontmatter.js
npm notice 514B src/fragments/header.js
npm notice 450B src/fragments/prose.js
npm notice 466B src/fragments/snippet.js
npm notice 1.0kB src/log.js
npm notice 3.1kB src/markdown.js
npm notice 496B src/mask.js
npm notice 1.7kB src/openai.js
npm notice 1.4kB src/oracle.js
npm notice 4.2kB src/prompt.js
npm notice 1.1kB src/quoted.js
npm notice 716B src/region.js
npm notice 2.1kB src/report.js
npm notice 1.7kB src/rules/ambiguous-or.js
npm notice 1.7kB src/rules/atomic.js
npm notice 1.2kB src/rules/budget.js
npm notice 1.6kB src/rules/command.js
npm notice 1.4kB src/rules/concise.js
npm notice 1.7kB src/rules/conditional.js
npm notice 1.7kB src/rules/counter-example.js
npm notice 1.7kB src/rules/crowded.js
npm notice 3.5kB src/rules/dead-import.js
npm notice 1.7kB src/rules/default.js
npm notice 1.8kB src/rules/description-length.js
npm notice 1.6kB src/rules/description-triggers.js
npm notice 2.1kB src/rules/description-voice.js
npm notice 1.3kB src/rules/done.js
npm notice 1.8kB src/rules/duplicate-section.js
npm notice 1.7kB src/rules/emoji.js
npm notice 2.4kB src/rules/emphasis.js
npm notice 1.4kB src/rules/empty.js
npm notice 1.6kB src/rules/example.js
npm notice 2.1kB src/rules/external-link.js
npm notice 1.4kB src/rules/fence-language.js
npm notice 2.1kB src/rules/format.js
npm notice 2.0kB src/rules/frontmatter.js
npm notice 1.3kB src/rules/grouped.js
npm notice 1.5kB src/rules/hedging.js
npm notice 2.4kB src/rules/hidden-char.js
npm notice 2.3kB src/rules/homoglyph.js
npm notice 4.1kB src/rules/index.js
npm notice 2.6kB src/rules/inline-code.js
npm notice 3.7kB src/rules/jargon.js
npm notice 1.2kB src/rules/line-length.js
npm notice 1.8kB src/rules/meta-reference.js
npm notice 1.4kB src/rules/name-format.js
npm notice 1.7kB src/rules/name-matches-dir.js
npm notice 1.3kB src/rules/no-articles.js
npm notice 1.6kB src/rules/ordered.js
npm notice 1.4kB src/rules/passive.js
npm notice 1.6kB src/rules/persona.js
npm notice 1.8kB src/rules/placement.js
npm notice 1.5kB src/rules/polite.js
npm notice 1.6kB src/rules/positive.js
npm notice 1.5kB src/rules/pseudo-heading.js
npm notice 1.7kB src/rules/punctuation.js
npm notice 2.0kB src/rules/quantifier.js
npm notice 1.5kB src/rules/rationale.js
npm notice 2.1kB src/rules/redundant.js
npm notice 2.2kB src/rules/referential.js
npm notice 1.4kB src/rules/section-level.js
npm notice 1.9kB src/rules/self-contained.js
npm notice 1.2kB src/rules/short-sections.js
npm notice 2.2kB src/rules/simple.js
npm notice 1.7kB src/rules/stale.js
npm notice 2.3kB src/rules/terms.js
npm notice 1.3kB src/rules/token-count.js
npm notice 1.6kB src/rules/tool-clarity.js
npm notice 1.7kB src/rules/transition.js
npm notice 1.5kB src/rules/unfinished.js
npm notice 1.7kB src/rules/unique.js
npm notice 3.7kB src/rules/units.js
npm notice 2.5kB src/rules/untrusted.js
npm notice 2.0kB src/rules/vague.js
npm notice 1.7kB src/rules/weak-verb.js
npm notice 1.5kB src/sources.js
npm notice 1.6kB src/usage.js
npm notice 883B src/verdict.js
npm notice 336B src/version.js
npm notice 821B src/violation.js
npm notice 1.5kB src/yaml.js
1G0K⠼1G0Knpm notice Tarball Details
1G0K⠼1G0Knpm notice name: @yegor256/dogent
1G0K⠼1G0Knpm notice version: 0.13.2
1G0K⠼1G0Knpm notice filename: yegor256-dogent-0.13.2.tgz
1G0K⠼1G0Knpm notice package size: 47.4 kB
1G0K⠼1G0Knpm notice unpacked size: 168.1 kB
1G0K⠼1G0Knpm notice shasum: 80658293f0589a8582a8119ca75bd304f4521630
1G0K⠼1G0Knpm notice integrity: sha512-8d3ihgHDap+tC[...]Fiy4dJD6LaqJg==
1G0K⠼1G0Knpm notice total files: 90
1G0K⠼1G0Knpm notice
1G0K⠼1G0Knpm notice Publishing to https://registry.npmjs.org/ with tag latest and public access
1G0K⠼1G0K⠴1G0K⠦1G0K⠧1G0K⠇1G0K⠏1G0K⠋1G0K⠙1G0K⠹1G0K⠸1G0K⠼1G0K⠴1G0K⠦1G0K⠧1G0K⠇1G0K⠏1G0K+ @yegor256/dogent@0.13.2
1G0K⠏1G0K+ mv /home/r/repo .
++ whoami
+ chown -R root repo
+ '[' -n '' ']'
++ whoami
+ sudo chown -R ubuntu repo
+ cd repo
+ git checkout __rultor
Already on '__rultor'
+ git tag 0.13.2 -m '0.13.2: tagged by rultor.com'
+ git reset --hard
HEAD is now at 8e4b55d set version to 0.13.2
+ git clean -fd
+ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
+ git branch -D __rultor
Deleted branch __rultor (was 8e4b55d).
+ git push --all origin
Everything up-to-date
+ git push --tags origin
To github.com:yegor256/dogent.git
 * [new tag]         0.13.2 -> 0.13.2
container ef164403c9ac8141f4557f33c6b643912a2e40798738e6e8873a5dbf1ea752fe is dead
Tue Jun 30 07:33:27 UTC 2026