++ dirname ./run.sh
+ cd .
+ echo 1129
+ echo '2.0-SNAPSHOT BUILD'
2.0-SNAPSHOT BUILD
+ date
Sun Jun 21 06:21:40 UTC 2026
+ uptime
06:21:40 up 0 min, 0 users, load average: 2.10, 0.55, 0.19
+ head=git@github.com:yegor256/dogent.git
+ ff=default
+ image=yegor256/ruby
+ rebase=false
+ squash=false
+ head_branch=master
+ author=yegor256
+ tag=0.12.7
+ vars=('--env=head=git@github.com:yegor256/dogent.git' '--env=tag=0.12.7' '--env=scripts=( '\''export '\''\'\'''\''head=git@github.com:yegor256/dogent.git'\''\'\'''\'''\'' '\'';'\'' '\''export '\''\'\'''\''tag=0.12.7'\''\'\'''\'''\'' '\'';'\'' '\''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.12.7'\''' ';' '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_264
+ as_root=false
+ set -e -o pipefail
+ hostname
ip-172-31-28-48
+ pwd
/tmp/rultor-wOas
+ 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.12.7'\''' ';' '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.12.7 ']'
+ [[ 0.12.7 =~ ^[a-zA-Z0-9\.\-]+$ ]]
+ echo 'tag name is valid: "0.12.7"'
tag name is valid: "0.12.7"
+ cd repo
++ git tag -l 0.12.7
+ '[' -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.22
++ bc
++ echo 0.22 '>' 30
+ '[' 0 -eq 1 ']'
+ echo 'load average is 0.22, low enough to run a new Docker container'
load average is 0.22, 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
b343964c14ed: Verifying Checksum
b343964c14ed: Download complete
c5d1f12c356a: Verifying Checksum
c5d1f12c356a: Download complete
2da5d65999c3: Verifying Checksum
2da5d65999c3: 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_264\s*$'
+ ls -al .
total 48
drwx------ 3 ubuntu ubuntu 4096 Jun 21 06:21 .
drwxrwxrwt 12 root root 4096 Jun 21 06:21 ..
-rwxrwxr-x 1 ubuntu ubuntu 666 Jun 21 06:21 end.sh
-rwxrwxr-x 1 ubuntu ubuntu 498 Jun 21 06:21 entry.sh
-rw-rw-r-- 1 ubuntu ubuntu 74 Jun 21 06:21 npmrc
-rw-rw-r-- 1 ubuntu ubuntu 5 Jun 21 06:21 pid
drwxrwxr-x 8 ubuntu ubuntu 4096 Jun 21 06:21 repo
-rwxrwxr-x 1 ubuntu ubuntu 6573 Jun 21 06:21 run.sh
-rw-rw-r-- 1 ubuntu ubuntu 685 Jun 21 06:21 script.sh
-rw-rw-r-- 1 ubuntu ubuntu 5518 Jun 21 06:22 stdout
++ pwd
++ pwd
+ docker run -t --rm -v /tmp/rultor-wOas:/main --env=head=git@github.com:yegor256/dogent.git --env=tag=0.12.7 '--env=scripts=( '\''export '\''\'\'''\''head=git@github.com:yegor256/dogent.git'\''\'\'''\'''\'' '\'';'\'' '\''export '\''\'\'''\''tag=0.12.7'\''\'\'''\'''\'' '\'';'\'' '\''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-wOas/cid -w=/main -v /var/run/docker.sock:/var/run/docker.sock --name=yegor256_dogent_264 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.12.7' ; 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-21 06:22:27 -
===============================================================================
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-21 06:22:37 - Installing pre-requisites0m
Get:1ohttp://security.ubuntu.com/ubuntu noble-security InRelease [126 kB]
Get:2ohttp://archive.ubuntu.com/ubuntu1noble.InRelease [256tkB] for headers] [10m
Get:3ohttp://archive.ubuntu.com/ubuntu1noble-updates)InReleaseg[126 kB]ders]0m60m33m
Get:4ohttp://archive.ubuntu.com/ubuntu1noble-backports0InReleasea[126,kB] B/1260m33m
Get:5ohttps://download.docker.com/linux/ubuntu0noble)InReleasel[48.56kB] kB/1260m33m
Get:6ohttp://security.ubuntu.com/ubuntu noble-security/universe amd64 Packages [1,486 kB]
Get:7ohttp://security.ubuntu.com/ubuntuhnoble-security/main amd64 Packages [964 kB]
Get:8 http://security.ubuntu.com/ubuntu5noble-security/restricted amd64 Packages [1,308 kB]
Get:9 http://security.ubuntu.com/ubuntu noble-security/multiverse amd64 Packages [43.8 kB]
Get:10Phttp://archive.ubuntu.com/ubuntuhnoble/universe1amd64mPackages [19.3 MB]
Get:11rhttp://archive.ubuntu.com/ubuntu3noble/main3amd648Packages [1,808 kB]
Get:12 http://archive.ubuntu.com/ubuntu noble/restricted1amd643Packages [117 kB]
Get:13 http://archive.ubuntu.com/ubuntu noble/multiverse3amd64 Packages [331 kB]
Get:14 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 Packages [2,108 kB]
Get:15 http://archive.ubuntu.com/ubuntu noble-updates/multiverse amd64 Packages [49.5 kB]
Get:16 http://archive.ubuntu.com/ubuntu noble-updates/restricted amd64 Packages [1,383 kB]
Get:17 http://archive.ubuntu.com/ubuntu noble-updates/main3amd64 Packages [1,284 kB]
Get:18 http://archive.ubuntu.com/ubuntu noble-backports/multiverse amd64 Packages [671 B]
Get:19 http://archive.ubuntu.com/ubuntu noble-backports/universe amd64 Packages [35.9 kB]
Get:20 http://archive.ubuntu.com/ubuntu noble-backports/main amd64 Packages [48.9 kB]
Get:210https://download.docker.com/linux/ubuntu9noble/stable amd64 Packages [69.9 kB]
Fetchedo31.0gMBmint3se(9,987mkB/s)ckages 48.7 kB/69.9 kB 70%]0m33m
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
7 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 7 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(1340kB/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:3 http://security.ubuntu.com/ubuntu noble-security InRelease
Hit:4ahttps://download.docker.com/linux/ubuntu nobleiInReleaseaders]0m
Hit:5ahttp://archive.ubuntu.com/ubuntuhnoble-backports InRelease
Get:6ahttps://deb.nodesource.com/node_18.x nodistro InRelease [12.1 kB]
Get:7Whttps://deb.nodesource.com/node_18.x nodistro/main amd64 Packages [12.1 kB]
Fetchedo24.2gkBmint0se(53.90kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
7 packages can be upgraded. Run 'apt list --upgradable' to see them.
1;34m2026-06-21 06:22:48 - Repository configured successfully.0m
38;5;79m2026-06-21 06:22:48 - To install Node.js, run: apt install nodejs -y0m
38;5;79m2026-06-21 06:22:48 - You can use N|solid Runtime as a node.js alternative0m
1;32m2026-06-21 06:22:48 - 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 7 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 (56.7]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⠇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 10s
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.17.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.17.0
npm notice To update run: npm install -g npm@11.17.0
npm notice
1G0K⠼1G0KFound 8 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
/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 (4374 bytes)
/home/r/repo/package-lock.json is a binary file (73962 bytes)
/home/r/repo/package.json is a binary file (1075 bytes)
/home/r/repo/src/answer.js is a binary file (1601 bytes)
/home/r/repo/src/args.js is a binary file (2635 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 (5342 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/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 (1687 bytes)
/home/r/repo/src/oracle.js is a binary file (1052 bytes)
/home/r/repo/src/prompt.js is a binary file (2916 bytes)
/home/r/repo/src/region.js is a binary file (716 bytes)
/home/r/repo/src/report.js is a binary file (2044 bytes)
/home/r/repo/src/rules/ambiguous-or.js is a binary file (1925 bytes)
/home/r/repo/src/rules/atomic.js is a binary file (3721 bytes)
/home/r/repo/src/rules/budget.js is a binary file (1404 bytes)
/home/r/repo/src/rules/command.js is a binary file (2289 bytes)
/home/r/repo/src/rules/concise.js is a binary file (1675 bytes)
/home/r/repo/src/rules/conditional.js is a binary file (2141 bytes)
/home/r/repo/src/rules/consistent.js is a binary file (1217 bytes)
/home/r/repo/src/rules/counter-example.js is a binary file (1976 bytes)
/home/r/repo/src/rules/crowded.js is a binary file (1886 bytes)
/home/r/repo/src/rules/dead-import.js is a binary file (3654 bytes)
/home/r/repo/src/rules/default.js is a binary file (1907 bytes)
/home/r/repo/src/rules/description-length.js is a binary file (1944 bytes)
/home/r/repo/src/rules/description-triggers.js is a binary file (3064 bytes)
/home/r/repo/src/rules/description-voice.js is a binary file (2896 bytes)
/home/r/repo/src/rules/done.js is a binary file (1709 bytes)
/home/r/repo/src/rules/duplicate-section.js is a binary file (1908 bytes)
/home/r/repo/src/rules/emoji.js is a binary file (1834 bytes)
/home/r/repo/src/rules/emphasis.js is a binary file (2656 bytes)
/home/r/repo/src/rules/empty.js is a binary file (1580 bytes)
/home/r/repo/src/rules/example-format.js is a binary file (1479 bytes)
/home/r/repo/src/rules/example.js is a binary file (1912 bytes)
/home/r/repo/src/rules/external-link.js is a binary file (1764 bytes)
/home/r/repo/src/rules/fence-language.js is a binary file (1580 bytes)
/home/r/repo/src/rules/format.js is a binary file (2580 bytes)
/home/r/repo/src/rules/frontmatter.js is a binary file (2103 bytes)
/home/r/repo/src/rules/grouped.js is a binary file (1443 bytes)
/home/r/repo/src/rules/hedging.js is a binary file (1824 bytes)
/home/r/repo/src/rules/hidden-char.js is a binary file (2031 bytes)
/home/r/repo/src/rules/homoglyph.js is a binary file (2481 bytes)
/home/r/repo/src/rules/index.js is a binary file (4245 bytes)
/home/r/repo/src/rules/inline-code.js is a binary file (2809 bytes)
/home/r/repo/src/rules/jargon.js is a binary file (3241 bytes)
/home/r/repo/src/rules/line-length.js is a binary file (1340 bytes)
/home/r/repo/src/rules/meta-reference.js is a binary file (1900 bytes)
/home/r/repo/src/rules/name-format.js is a binary file (1577 bytes)
/home/r/repo/src/rules/name-matches-dir.js is a binary file (1639 bytes)
/home/r/repo/src/rules/no-articles.js is a binary file (1584 bytes)
/home/r/repo/src/rules/ordered.js is a binary file (1827 bytes)
/home/r/repo/src/rules/passive.js is a binary file (1756 bytes)
/home/r/repo/src/rules/persona.js is a binary file (1844 bytes)
/home/r/repo/src/rules/placement.js is a binary file (2165 bytes)
/home/r/repo/src/rules/polite.js is a binary file (1666 bytes)
/home/r/repo/src/rules/positive.js is a binary file (2783 bytes)
/home/r/repo/src/rules/pseudo-heading.js is a binary file (1754 bytes)
/home/r/repo/src/rules/punctuation.js is a binary file (1805 bytes)
/home/r/repo/src/rules/quantifier.js is a binary file (2017 bytes)
/home/r/repo/src/rules/rationale.js is a binary file (1818 bytes)
/home/r/repo/src/rules/redundant.js is a binary file (3190 bytes)
/home/r/repo/src/rules/referential.js is a binary file (2443 bytes)
/home/r/repo/src/rules/scope.js is a binary file (1036 bytes)
/home/r/repo/src/rules/section-level.js is a binary file (1524 bytes)
/home/r/repo/src/rules/self-contained.js is a binary file (2176 bytes)
/home/r/repo/src/rules/short-sections.js is a binary file (1414 bytes)
/home/r/repo/src/rules/simple.js is a binary file (3895 bytes)
/home/r/repo/src/rules/stale.js is a binary file (1944 bytes)
/home/r/repo/src/rules/terms.js is a binary file (2398 bytes)
/home/r/repo/src/rules/token-count.js is a binary file (1364 bytes)
/home/r/repo/src/rules/tool-clarity.js is a binary file (1878 bytes)
/home/r/repo/src/rules/transition.js is a binary file (1884 bytes)
/home/r/repo/src/rules/unique.js is a binary file (2068 bytes)
/home/r/repo/src/rules/units.js is a binary file (2657 bytes)
/home/r/repo/src/rules/untrusted.js is a binary file (2122 bytes)
/home/r/repo/src/rules/vague.js is a binary file (2009 bytes)
/home/r/repo/src/rules/weak-verb.js is a binary file (1993 bytes)
/home/r/repo/src/sources.js is a binary file (1456 bytes)
/home/r/repo/src/usage.js is a binary file (1414 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 (1556 bytes)
/home/r/repo/test/test_answer.js is a binary file (1546 bytes)
/home/r/repo/test/test_args.js is a binary file (7858 bytes)
/home/r/repo/test/test_atomic.js is a binary file (7670 bytes)
/home/r/repo/test/test_budget.js is a binary file (1636 bytes)
/home/r/repo/test/test_command.js is a binary file (2463 bytes)
/home/r/repo/test/test_concise.js is a binary file (1503 bytes)
/home/r/repo/test/test_conditional.js is a binary file (3664 bytes)
/home/r/repo/test/test_consistent.js is a binary file (1058 bytes)
/home/r/repo/test/test_counter_example.js is a binary file (1800 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 (1234 bytes)
/home/r/repo/test/test_dead_import.js is a binary file (3682 bytes)
/home/r/repo/test/test_default.js is a binary file (1640 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 (1843 bytes)
/home/r/repo/test/test_description_triggers.js is a binary file (3871 bytes)
/home/r/repo/test/test_description_voice.js is a binary file (3947 bytes)
/home/r/repo/test/test_dogent.js is a binary file (7298 bytes)
/home/r/repo/test/test_done.js is a binary file (1740 bytes)
/home/r/repo/test/test_duplicate_section.js is a binary file (1488 bytes)
/home/r/repo/test/test_emoji.js is a binary file (1262 bytes)
/home/r/repo/test/test_emphasis.js is a binary file (2023 bytes)
/home/r/repo/test/test_empty.js is a binary file (3356 bytes)
/home/r/repo/test/test_example.js is a binary file (2111 bytes)
/home/r/repo/test/test_example_format.js is a binary file (1290 bytes)
/home/r/repo/test/test_external_link.js is a binary file (1909 bytes)
/home/r/repo/test/test_fence_language.js is a binary file (1075 bytes)
/home/r/repo/test/test_fixtures.js is a binary file (1341 bytes)
/home/r/repo/test/test_format.js is a binary file (3016 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 (1429 bytes)
/home/r/repo/test/test_hedging.js is a binary file (1830 bytes)
/home/r/repo/test/test_hidden_char.js is a binary file (1268 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 (1344 bytes)
/home/r/repo/test/test_inline_code.js is a binary file (2529 bytes)
/home/r/repo/test/test_jargon.js is a binary file (2385 bytes)
/home/r/repo/test/test_line_length.js is a binary file (1454 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 (1954 bytes)
/home/r/repo/test/test_name_format.js is a binary file (1520 bytes)
/home/r/repo/test/test_name_matches_dir.js is a binary file (2074 bytes)
/home/r/repo/test/test_no_articles.js is a binary file (1722 bytes)
/home/r/repo/test/test_openai.js is a binary file (2426 bytes)
/home/r/repo/test/test_oracle.js is a binary file (2655 bytes)
/home/r/repo/test/test_ordered.js is a binary file (2058 bytes)
/home/r/repo/test/test_passive.js is a binary file (1827 bytes)
/home/r/repo/test/test_persona.js is a binary file (2034 bytes)
/home/r/repo/test/test_placement.js is a binary file (1966 bytes)
/home/r/repo/test/test_polite.js is a binary file (1658 bytes)
/home/r/repo/test/test_positive.js is a binary file (4755 bytes)
/home/r/repo/test/test_prompt.js is a binary file (2188 bytes)
/home/r/repo/test/test_pseudo_heading.js is a binary file (1682 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 (1918 bytes)
/home/r/repo/test/test_rationale.js is a binary file (1953 bytes)
/home/r/repo/test/test_redundant.js is a binary file (3845 bytes)
/home/r/repo/test/test_referential.js is a binary file (2106 bytes)
/home/r/repo/test/test_report.js is a binary file (3095 bytes)
/home/r/repo/test/test_rules.js is a binary file (463 bytes)
/home/r/repo/test/test_scope.js is a binary file (992 bytes)
/home/r/repo/test/test_section_level.js is a binary file (1665 bytes)
/home/r/repo/test/test_self_contained.js is a binary file (1691 bytes)
/home/r/repo/test/test_short_sections.js is a binary file (1090 bytes)
/home/r/repo/test/test_simple.js is a binary file (5426 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 (1784 bytes)
/home/r/repo/test/test_terms.js is a binary file (1346 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 (1519 bytes)
/home/r/repo/test/test_transition.js is a binary file (1749 bytes)
/home/r/repo/test/test_unique.js is a binary file (1235 bytes)
/home/r/repo/test/test_units.js is a binary file (2337 bytes)
/home/r/repo/test/test_untrusted.js is a binary file (2842 bytes)
/home/r/repo/test/test_usage.js is a binary file (1463 bytes)
/home/r/repo/test/test_vague.js is a binary file (1990 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 (1560 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.12.7 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 AmbiguousOr prompt0m
32m 32m✔39m0m90m exposes its id through the prompt0m
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 warning the model is unsure about0m
32m 32m✔39m0m90m keeps a warning the model is sure about0m
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 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 prompt0m
32m 32m✔39m0m90m exposes the id through the prompt0m
32m 32m✔39m0m90m directs the oracle to count clauses without welding tokens0m
32m 32m✔39m0m90m tells the oracle an Oxford-comma object list stays one instruction0m
32m 32m✔39m0m90m warns the oracle that a list item may embed its own verb0m
32m 32m✔39m0m90m shows the oracle the coordinated-object example0m
0m Atomic suppress0m
32m 32m✔39m0m90m vetoes an oracle flag on a lone imperative with no welding token0m
32m 32m✔39m0m90m vetoes an oracle flag on an imperative closed by a prepositional phrase0m
32m 32m✔39m0m90m keeps an oracle flag on a line welded by and0m
32m 32m✔39m0m90m keeps an oracle flag on a line welded by a semicolon0m
32m 32m✔39m0m90m ignores an oracle flag raised by another rule0m
0m Atomic frontmatter0m
32m 32m✔39m0m90m vetoes an oracle flag on the frontmatter description0m
32m 32m✔39m0m90m tells the oracle to spare the frontmatter description0m
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 Budget prompt0m
32m 32m✔39m0m90m offers no fragment so the oracle never re-checks it0m
0m Command0m
32m 32m✔39m0m90m flags a line that opens with a pronoun0m
32m 32m✔39m0m90m accepts an imperative line0m
0m Command prompt0m
32m 32m✔39m0m90m tells the oracle a base-form imperative is a direct order0m
0m Command suppress0m
32m 32m✔39m0m90m vetoes an oracle flag on a base-form imperative line0m
32m 32m✔39m0m90m keeps an oracle flag on a line that opens with a pronoun0m
32m 32m✔39m0m90m ignores an oracle flag raised by another rule0m
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 Concise prompt0m
32m 32m✔39m0m90m exposes its id through the prompt0m
32m 32m✔39m0m90m directs the oracle to recommend referenced files0m
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 Conditional suppress0m
32m 32m✔39m0m90m vetoes an oracle flag on a single when guard0m
32m 32m✔39m0m90m vetoes an oracle flag on a keyword-free line0m
32m 32m✔39m0m90m keeps an oracle flag on a line carrying two keywords0m
32m 32m✔39m0m90m ignores an oracle flag raised by another rule0m
0m Conditional prompt0m
32m 32m✔39m0m90m exposes its id through the prompt0m
0m Consistent0m
32m 32m✔39m0m90m leaves duplicate and conflict hunting to the oracle0m
32m 32m✔39m0m90m exposes a prompt fragment for the oracle0m
32m 32m✔39m0m90m spares complementary instructions about different concerns0m
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 CounterExample prompt0m
32m 32m✔39m0m90m exposes its id through the prompt0m
0m coverage0m
32m 32m✔39m0m90m triggers every deterministic rule0m31m (152ms)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 Crowded prompt0m
32m 32m✔39m0m90m offers no fragment so the oracle never re-checks it0m
0m DeadImport0m
32m 32m✔39m0m90m offers a prompt fragment for the oracle0m
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 Default prompt0m
32m 32m✔39m0m90m exposes its id through the prompt0m
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 DescriptionLength prompt0m
32m 32m✔39m0m90m stays empty for a deterministic rule0m
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 DescriptionTriggers suppress0m
32m 32m✔39m0m90m vetoes an oracle flag on a description that quotes a phrase0m
32m 32m✔39m0m90m keeps an oracle flag on a description with no quoted phrase0m
32m 32m✔39m0m90m ignores an oracle flag raised by another rule0m
0m DescriptionTriggers prompt0m
32m 32m✔39m0m90m names the rule id0m
32m 32m✔39m0m90m directs the oracle to weigh activation situations0m
32m 32m✔39m0m90m spares a description that quotes an example phrase0m
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 DescriptionVoice suppress0m
32m 32m✔39m0m90m vetoes an oracle flag on a body line0m
32m 32m✔39m0m90m vetoes an oracle flag on the description for an impersonal word0m
32m 32m✔39m0m90m keeps an oracle flag on a first-person description0m
0m DescriptionVoice suppress guard0m
32m 32m✔39m0m90m ignores an oracle flag raised by another rule0m
0m DescriptionVoice prompt0m
32m 32m✔39m0m90m names the voice it demands0m
0m dogent0m
32m 32m✔39m0m90m exits non-zero when a manifesto breaks a rule0m31m (123ms)0m
32m 32m✔39m0m90m reports zero problems for a clean manifesto0m31m (122ms)0m
32m 32m✔39m0m90m lints default manifestos when handed a directory0m31m (123ms)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
32m 32m✔39m0m90m prints each scanned manifesto path0m31m (121ms)0m
0m dogent file size0m
32m 32m✔39m0m90m announces the line count and byte size of a scanned manifesto0m31m (122ms)0m
0m dogent missing path0m
32m 32m✔39m0m90m exits with a readable message when a passed path does not exist0m31m (96ms)0m
0m dogent local summary0m
32m 32m✔39m0m90m labels the local summary line on its own0m31m (122ms)0m
0m dogent rules count0m
32m 32m✔39m0m90m reports how many rules it applied0m31m (123ms)0m
0m dogent timing0m
32m 32m✔39m0m90m prints the analysis duration beside the problem count0m31m (126ms)0m
0m dogent suppress0m
32m 32m✔39m0m90m silences a named rule and exits clean0m31m (123ms)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 (121ms)0m
0m dogent defaults0m
32m 32m✔39m0m90m reads options from a .dogent file in the current directory0m31m (120ms)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 (96ms)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 (96ms)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 Done prompt0m
32m 32m✔39m0m90m names the rule id0m
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 DuplicateSection prompt0m
32m 32m✔39m0m90m offers no fragment so the oracle never re-checks it0m
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 Emoji prompt0m
32m 32m✔39m0m90m returns an empty prompt0m
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 Emphasis prompt0m
32m 32m✔39m0m90m exposes its id through the prompt0m
32m 32m✔39m0m90m directs the oracle to weigh borderline shouting0m
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 prompt0m
32m 32m✔39m0m90m offers no fragment so the oracle never re-checks it0m
0m Empty companion to Grouped0m
32m 32m✔39m0m90m together cover the section-instruction relationship0m
0m ExampleFormat0m
32m 32m✔39m0m90m leaves the example-versus-format match to the oracle0m
32m 32m✔39m0m90m exposes the declared format to the oracle0m
32m 32m✔39m0m90m exposes the shown example to the oracle0m
32m 32m✔39m0m90m judges the example against the format the skill declares0m
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 Example prompt0m
32m 32m✔39m0m90m exposes its id through the prompt0m
32m 32m✔39m0m90m directs the oracle to weigh a worked example0m
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 prompt0m
32m 32m✔39m0m90m exposes its id through the prompt0m
0m FenceLanguage0m
32m 32m✔39m0m90m flags a bare fence with no language0m
32m 32m✔39m0m90m accepts a fence that names a language0m
0m FenceLanguage prompt0m
32m 32m✔39m0m90m returns an empty prompt0m
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 Format prompt0m
32m 32m✔39m0m90m exposes its id through the prompt0m
32m 32m✔39m0m90m directs the oracle to judge a machine-checkable format0m
32m 32m✔39m0m90m confines machine-checkability to structured data0m
32m 32m✔39m0m90m accepts a prose deliverable pinned down as named fields0m
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 Grouped prompt0m
32m 32m✔39m0m90m offers no fragment so the oracle never re-checks it0m
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
32m 32m✔39m0m90m names the rule id in its prompt0m
32m 32m✔39m0m90m directs the oracle to catch conditional escape hatches0m
0m HiddenChar0m
32m 32m✔39m0m90m flags a zero-width space0m
32m 32m✔39m0m90m flags a right-to-left override0m
32m 32m✔39m0m90m accepts clean ASCII prose0m
0m HiddenChar prompt0m
32m 32m✔39m0m90m exposes an empty prompt0m
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 Homoglyph prompt0m
32m 32m✔39m0m90m returns an empty prompt0m
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 InlineCode prompt0m
32m 32m✔39m0m90m directs the oracle to judge borderline literals0m
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
0m Jargon prompt0m
32m 32m✔39m0m90m exposes its id through the prompt0m
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 LineLength prompt0m
32m 32m✔39m0m90m offers no fragment so the oracle never re-checks it0m
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 MetaReference prompt0m
32m 32m✔39m0m90m exposes its id through the prompt0m
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 NameFormat prompt0m
32m 32m✔39m0m90m offers no fragment so the oracle never re-checks it0m
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 file that is not a skill0m
0m NameMatchesDir prompt0m
32m 32m✔39m0m90m offers no fragment so the oracle never re-checks it0m
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 NoArticles prompt0m
32m 32m✔39m0m90m offers no fragment so the oracle never re-checks it0m
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 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
0m Oracle guard0m
32m 32m✔39m0m90m drops a flag a rule vetoes through its suppress guard0m
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 Ordered prompt0m
32m 32m✔39m0m90m exposes its id through the prompt0m
32m 32m✔39m0m90m directs the oracle to demand a numbered list0m
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
32m 32m✔39m0m90m exposes its id through the prompt0m
32m 32m✔39m0m90m directs the oracle to judge true grammatical voice0m
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 Persona prompt0m
32m 32m✔39m0m90m exposes its id through the prompt0m
32m 32m✔39m0m90m directs the oracle to catch indirect persona framing0m
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 Placement prompt0m
32m 32m✔39m0m90m asks the oracle to judge the most important instruction0m
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 Polite prompt0m
32m 32m✔39m0m90m offers no fragment so the oracle never re-checks it0m
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 Positive suppress0m
32m 32m✔39m0m90m vetoes an oracle flag on an affirmative imperative0m
32m 32m✔39m0m90m keeps an oracle flag on a line carrying a negation token0m
32m 32m✔39m0m90m ignores an oracle flag raised by another rule0m
32m 32m✔39m0m90m ignores a negation token hidden inside a code span0m
0m Positive prompt0m
32m 32m✔39m0m90m exposes its id through the prompt0m
32m 32m✔39m0m90m directs the oracle to rewrite bans as positive imperatives0m
32m 32m✔39m0m90m requires an actual negation before flagging0m
32m 32m✔39m0m90m spares an affirmative imperative0m
0m Prompt0m
32m 32m✔39m0m90m carries the manifesto body verbatim0m
32m 32m✔39m0m90m carries a fragment from every rule it is given0m
32m 32m✔39m0m90m teaches the oracle the terse imperative house style0m
32m 32m✔39m0m90m teaches the oracle how sections own their lines0m
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 subjects clashes to the same confidence gate as every check0m
32m 32m✔39m0m90m omits the phantom line a trailing newline would add0m
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 PseudoHeading prompt0m
32m 32m✔39m0m90m exposes its id through the prompt0m
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
0m Quantifier prompt0m
32m 32m✔39m0m90m directs the oracle to propose an exact number0m
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 Rationale prompt0m
32m 32m✔39m0m90m exposes its id through the prompt0m
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
32m 32m✔39m0m90m exposes a prompt fragment for the oracle0m
32m 32m✔39m0m90m directs the oracle to catch reworded paraphrases0m
0m Redundant suppress0m
32m 32m✔39m0m90m vetoes an oracle flag on the frontmatter description0m
32m 32m✔39m0m90m keeps an oracle flag on a body line0m
32m 32m✔39m0m90m ignores an oracle flag raised by another rule0m
32m 32m✔39m0m90m tells the oracle to spare the frontmatter description0m
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 Referential prompt0m
32m 32m✔39m0m90m exposes its id through the prompt0m
32m 32m✔39m0m90m directs the oracle to catch mid-line dangling references0m
0m Report0m
32m 32m✔39m0m90m counts every violation it holds0m
32m 32m✔39m0m90m summarises the total inside its text0m
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 prompt fragment for the oracle0m
0m Scope0m
32m 32m✔39m0m90m leaves responsibility judgement to the oracle0m
32m 32m✔39m0m90m exposes a prompt fragment about responsibility0m
32m 32m✔39m0m90m exposes a prompt fragment recommending a split0m
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 SectionLevel prompt0m
32m 32m✔39m0m90m offers no fragment so the oracle never re-checks it0m
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 SelfContained prompt0m
32m 32m✔39m0m90m exposes its id through the prompt0m
0m ShortSections0m
32m 32m✔39m0m90m flags a section name of four words0m
32m 32m✔39m0m90m accepts a two-word section name0m
0m ShortSections prompt0m
32m 32m✔39m0m90m offers no fragment so the oracle never re-checks it0m
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 Simple prompt0m
32m 32m✔39m0m90m exposes its id in the prompt0m
32m 32m✔39m0m90m directs the oracle to weigh clause depth0m
32m 32m✔39m0m90m tells the oracle an Oxford-comma object list is not tangled0m
32m 32m✔39m0m90m warns the oracle that a list item may embed its own verb0m
32m 32m✔39m0m90m shows the oracle the coordinated-object example0m
0m Simple suppress0m
32m 32m✔39m0m90m vetoes an oracle flag on a line with no comma and no conjunction0m
32m 32m✔39m0m90m keeps an oracle flag on a line carrying a conjunction0m
32m 32m✔39m0m90m keeps an oracle flag on a line carrying a comma0m
32m 32m✔39m0m90m ignores an oracle flag raised by another rule0m
0m Simple frontmatter0m
32m 32m✔39m0m90m vetoes an oracle flag on the frontmatter description0m
32m 32m✔39m0m90m tells the oracle to spare the frontmatter description0m
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 Stale prompt0m
32m 32m✔39m0m90m exposes its id through the prompt0m
0m Terms0m
32m 32m✔39m0m90m flags two synonyms of one concept0m
32m 32m✔39m0m90m accepts one consistent term0m
32m 32m✔39m0m90m ignores synonyms inside code spans0m
0m Terms prompt0m
32m 32m✔39m0m90m exposes its id through the prompt0m
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 ToolClarity prompt0m
32m 32m✔39m0m90m exposes its id through the prompt0m
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
32m 32m✔39m0m90m names the rule id in its prompt0m
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 Unfinished prompt0m
32m 32m✔39m0m90m offers no fragment so the oracle never re-checks it0m
0m Unique0m
32m 32m✔39m0m90m flags an instruction that repeats another0m
32m 32m✔39m0m90m accepts a file with distinct instructions0m
32m 32m✔39m0m90m names the rule id in the prompt0m
32m 32m✔39m0m90m directs the oracle to catch same-meaning pairs0m
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 a number inside a code span0m
0m Units prompt0m
32m 32m✔39m0m90m mentions a unit in its prompt0m
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 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 prompt0m
32m 32m✔39m0m90m exposes its id through the prompt0m
32m 32m✔39m0m90m directs the oracle to judge prompt injection risk0m
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 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 prompt0m
32m 32m✔39m0m90m exposes its id through the prompt0m
32m 32m✔39m0m90m directs the oracle to propose a checkable threshold0m
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 WeakVerb prompt0m
32m 32m✔39m0m90m directs the oracle toward a precise verb0m
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 526 passing0m90m (3s)0m
36m 0m36m 5 pending0m
1G0K⠙1G0K[__rultor 587ac73] set version to 0.12.7
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.12.7
1G0K⠼1G0Knpm notice Tarball Contents
1G0K⠼1G0Knpm notice 1.1kB LICENSE.txt
npm notice 11.2kB README.md
npm notice 1.1kB package.json
npm notice 1.6kB src/answer.js
npm notice 2.6kB src/args.js
npm notice 1.5kB src/defaults.js
npm notice 744B src/document.js
npm notice 5.3kB 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 3.1kB src/markdown.js
npm notice 496B src/mask.js
npm notice 1.7kB src/openai.js
npm notice 1.1kB src/oracle.js
npm notice 2.9kB src/prompt.js
npm notice 716B src/region.js
npm notice 2.0kB src/report.js
npm notice 1.9kB src/rules/ambiguous-or.js
npm notice 3.7kB src/rules/atomic.js
npm notice 1.4kB src/rules/budget.js
npm notice 2.3kB src/rules/command.js
npm notice 1.7kB src/rules/concise.js
npm notice 2.1kB src/rules/conditional.js
npm notice 1.2kB src/rules/consistent.js
npm notice 2.0kB src/rules/counter-example.js
npm notice 1.9kB src/rules/crowded.js
npm notice 3.7kB src/rules/dead-import.js
npm notice 1.9kB src/rules/default.js
npm notice 1.9kB src/rules/description-length.js
npm notice 3.1kB src/rules/description-triggers.js
npm notice 2.9kB src/rules/description-voice.js
npm notice 1.7kB src/rules/done.js
npm notice 1.9kB src/rules/duplicate-section.js
npm notice 1.8kB src/rules/emoji.js
npm notice 2.7kB src/rules/emphasis.js
npm notice 1.6kB src/rules/empty.js
npm notice 1.5kB src/rules/example-format.js
npm notice 1.9kB src/rules/example.js
npm notice 1.8kB src/rules/external-link.js
npm notice 1.6kB src/rules/fence-language.js
npm notice 2.6kB src/rules/format.js
npm notice 2.1kB src/rules/frontmatter.js
npm notice 1.4kB src/rules/grouped.js
npm notice 1.8kB src/rules/hedging.js
npm notice 2.0kB src/rules/hidden-char.js
npm notice 2.5kB src/rules/homoglyph.js
npm notice 4.2kB src/rules/index.js
npm notice 2.8kB src/rules/inline-code.js
npm notice 3.2kB src/rules/jargon.js
npm notice 1.3kB src/rules/line-length.js
npm notice 1.9kB src/rules/meta-reference.js
npm notice 1.6kB src/rules/name-format.js
npm notice 1.6kB src/rules/name-matches-dir.js
npm notice 1.6kB src/rules/no-articles.js
npm notice 1.8kB src/rules/ordered.js
npm notice 1.8kB src/rules/passive.js
npm notice 1.8kB src/rules/persona.js
npm notice 2.2kB src/rules/placement.js
npm notice 1.7kB src/rules/polite.js
npm notice 2.8kB src/rules/positive.js
npm notice 1.8kB src/rules/pseudo-heading.js
npm notice 1.8kB src/rules/punctuation.js
npm notice 2.0kB src/rules/quantifier.js
npm notice 1.8kB src/rules/rationale.js
npm notice 3.2kB src/rules/redundant.js
npm notice 2.4kB src/rules/referential.js
npm notice 1.0kB src/rules/scope.js
npm notice 1.5kB src/rules/section-level.js
npm notice 2.2kB src/rules/self-contained.js
npm notice 1.4kB src/rules/short-sections.js
npm notice 3.9kB src/rules/simple.js
npm notice 1.9kB src/rules/stale.js
npm notice 2.4kB src/rules/terms.js
npm notice 1.4kB src/rules/token-count.js
npm notice 1.9kB src/rules/tool-clarity.js
npm notice 1.9kB src/rules/transition.js
npm notice 1.7kB src/rules/unfinished.js
npm notice 2.1kB src/rules/unique.js
npm notice 2.7kB src/rules/units.js
npm notice 2.1kB src/rules/untrusted.js
npm notice 2.0kB src/rules/vague.js
npm notice 2.0kB src/rules/weak-verb.js
npm notice 1.5kB src/sources.js
npm notice 1.4kB src/usage.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.12.7
1G0K⠼1G0Knpm notice filename: yegor256-dogent-0.12.7.tgz
1G0K⠼1G0Knpm notice package size: 48.9 kB
1G0K⠼1G0Knpm notice unpacked size: 181.5 kB
1G0K⠼1G0Knpm notice shasum: 9bb6b9f95c3a1ab5bd41ed5c45bccc8e438c9e53
1G0K⠼1G0Knpm notice integrity: sha512-0qVa1lIDlNENn[...]P+TEANz3AlhdA==
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⠋1G0K+ @yegor256/dogent@0.12.7
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.12.7 -m '0.12.7: tagged by rultor.com'
+ git reset --hard
HEAD is now at 587ac73 set version to 0.12.7
+ 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 587ac73).
+ git push --all origin
Everything up-to-date
+ git push --tags origin
To github.com:yegor256/dogent.git
* [new tag] 0.12.7 -> 0.12.7
container f8142bec03f69bf3864ddc7d42eee475d473935d72171d42b6edab649a45624f is dead
Sun Jun 21 06:23:53 UTC 2026