Greenhorn / literal onboarding audit

vis-timeline-3024edd7

DEAD END
visjs/vis-timeline @ e04fdef4 2026-07-18 16:26:26 UTC Codex · gpt-5.6-terra (build default) GPT-5.6 Luna · Azure AI Foundry (build default) Transcript JSON

The literal path stopped here.

No documentation sentence licensed a next action.
No further command proposed

Expected the documented test command to succeed; it exited 1. The only applicable sentence says, “Then run the tests: $ npm run test,” and provides no documented remedy for a failing test.

NO FURTHER COMMAND REACHED THE SHELL

Command lifecycles

A proposed command, its independent ruling, and its Docker result share one step. Nothing is silently skipped.

  1. 1

    Documentation scope

    Greenhorn loaded docs

    Documentation scope

    Loaded 3 documentation files (depth ≤2, cap 6; external links disabled).

  2. 2

    Command lifecycle

    Codex proposedGPT-5.6 ruledDocker executed
    npm installLICENSEDFRICTION
    Documentation evidenceThen, the project can be build running `npm install` in the root of the project.

    The proposed command exactly matches a documented command and has no unsafe shell composition.

    Literal readings considered
    • The exact proposed command is explicitly documented for installing project dependencies in the root directory.
    • The state identifies this as a Node project using npm.

    SHELL RECEIVED: YESAccepted command reached the isolated Docker executor.

    Docker resultexit 0
    Show command output
    > vis-timeline@0.0.0-no-version prepare
    > husky
    
    fatal: not in a git directory
    
    added 1229 packages, and audited 1373 packages in 2m
    
    246 packages are looking for funding
      run `npm fund` for details
    
    14 vulnerabilities (4 low, 2 moderate, 8 high)
    
    To address all issues (including breaking changes), run:
      npm audit fix --force
    
    Run `npm audit` for details.
    
    npm warn deprecated whatwg-encoding@3.1.1: Use @exodus/bytes instead for a more spec-conformant and faster implementation
    npm warn deprecated stable@0.1.8: Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility
    npm warn deprecated sliced@1.0.1: Unsupported
    npm warn deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
    npm warn deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
    npm 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
    npm warn deprecated folktale@2.3.2: This package is no longer actively maintained. Only security patches will be provided, if needed. Consider switching to fp-ts.
    npm warn deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.
    npm warn deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
    npm warn deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
    npm warn deprecated @babel/plugin-proposal-object-rest-spread@7.20.7: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.
    npm warn deprecated debug@4.1.1: Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)
    npm warn deprecated glob@7.2.3: 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
    npm warn deprecated glob@7.2.3: 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
    npm warn deprecated glob@7.2.3: 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
    npm notice
    npm notice New major version of npm available! 10.9.8 -> 12.0.1
    npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.1
    npm notice To update run: npm install -g npm@12.0.1
    npm notice
  3. 3

    Command lifecycle

    Codex proposedGPT-5.6 ruledDocker executed
    npm run testLICENSEDFRICTION
    Documentation evidenceThen run the tests: $ npm run test

    The proposed command exactly matches the command printed in the README's Test section. It is safe shell composition; the documented prerequisite is that project dependencies have been installed with npm install.

    Literal readings considered
    • The command is explicitly documented as the test command.
    • The state identifies this as an npm-managed Node project.

    SHELL RECEIVED: YESAccepted command reached the isolated Docker executor.

    Docker resultexit 1
    Show command output
    > vis-timeline@0.0.0-no-version test
    > mocha --exit
    
    
    
      Activator
        ✔ should activate only one at time
        ✔ should not throw on activate after destroying another activator
    
      DataAxis
        ✔ should work
        screenToValue
          ✔ can called be without an explicit redraw
        convertValue
          ✔ can called be without an explicit redraw
    
      Package
        1) Exported files
    
      Timeline PointItem
        ✔ should initialize with minimal data
        ✔ should have a default width of 0
        ✔ should error if there is missing data
        ✔ should be visible if the range is during
        ✔ should not be visible if the range is after
        ✔ should not be visible if the range is before
        ✔ should be visible for a "now" point with a default range
        should redraw() and then
          ✔ not be dirty
          ✔ have point attached to its parent
          have the correct classname for
            ✔ a non-editable item
            ✔ an editable item (with object option)
            ✔ an editable item (with boolean option)
            ✔ an editable:false override item (with boolean option)
            ✔ an editable:true override item (with boolean option)
            ✔ an editable:false override item (with object option)
            ✔ an editable:false override item (with object option for group change)
            ✔ an editable:true override item (with object option)
            ✔ an editable:true non-override item (with object option)
            ✔ an editable:false non-override item (with object option)
            ✔ an editable: {updateTime} override item (with boolean option)
            ✔ an editable: {updateTime} override item (with boolean option false)
            ✔ an editable: {updateGroup} override item (with boolean option)
          have the correct property for
            ✔ an editable: {updateGroup} override item (with boolean option false)
            ✔ an editable: {remove} override item (with boolean option)
            ✔ an editable: {remove} override item (with boolean option false)
            ✔ an editable: {updateTime, remove} override item (with boolean option)
            ✔ an editable: {updateTime, remove} override item (with boolean option false)
            ✔ an editable: {updateTime, updateGroup, remove} override item (with boolean option)
            ✔ an editable: {updateTime, updateGroup, remove} override item (with boolean option false)
    
      Timeline
        ✔ should not throw when updating data in close succession (70ms)
        ✔ setItems(null) should not crash
        ✔ setItems(with custom ID property) should work
    
      Timeline ItemSet
        ✔ should initialise with minimal data
        ✔ should redraw() and have the right classNames
        ✔ should start with no items
        ✔ should store items correctly
    
      Timeline Range
        ✔ should have start default before now
        ✔ should have end default after now
        ✔ should support custom start and end dates
        ✔ should calculate milliseconds per pixel
        ✔ should calculate 1 millisecond per pixel for simple range
    
      TimeStep
        ✔ should work with just start and end dates
        ✔ should work with specified scale (just under 1 second)
        ✔ should work with specified scale (1 second)
        ✔ should work with specified scale (2 seconds)
        ✔ should work with specified scale (5 seconds)
        ✔ should perform the step with a specified scale (1 year)
        ✔ should perform the step with a specified scale (1 month)
        ✔ should perform the step with a specified scale (1 week)
        ✔ should perform the step with a specified scale (1 day)
        ✔ should perform the step with a specified scale (1 hour)
        ✔ should not tag a 2-day (day/step-2) column with a weekday class
        ✔ should tag a 1-day (day/step-1) column with its weekday class
    
      util
        convert
          ✔ handles null
          ✔ handles undefined
          ✔ undefined type returns original object
          ✔ non-string type throws
          ✔ converts to boolean
          ✔ converts to number
          ✔ converts to String
          ✔ converts to Date from Number
          ✔ converts to Date from epoch int stored as String
          ✔ converting epoch int stored as String === epoch i
    …truncated
  4. 4

    Literal stop

    Codex stopped

    Literal stop

    Expected the documented test command to succeed; it exited 1. The only applicable sentence says, “Then run the tests: $ npm run test,” and provides no documented remedy for a failing test.

What the newcomer could read

  • README.mdlocal
  • LICENSE.Apache-2.0.txtlocal
  • LICENSE.MIT.txtlocal

How the run was contained

Read the isolation statement

Ubuntu 24.04 container, new filesystem state, source copied inside at run start. Codex reasons in a separate empty host scratch directory; the Azure GPT-5.6 key stays on the host. Only accepted commands reach the container shell.

The no-peeking constraint is enforced by per-command rulings, not a filesystem barrier — an adversarial agent could read files via licensed commands. Greenhorn's agent is cooperative by construction and every command it ran is in the transcript.

Read the newcomer contract
You are a brand-new developer on your first day. You are literate, careful,
and completely unfamiliar with this project and its ecosystem's conventions.
1. Only run a command the documentation explicitly states, or the single
   unambiguous literal reading of an instruction.
2. Ambiguous instruction (multiple reasonable readings)? Do not choose.
   Halt that path and record every reading you see.
3. On failure: read the error, re-read the docs for a documented remedy.
   Never debug from your own knowledge.
4. Never install/configure/invoke anything the docs never mentioned.
5. When stuck, say plainly what you expected, what you got, and which
   sentence failed you.
6. Undocumented environment values (keys, URLs) = dead end. Never invent.
Inspect the container Dockerfile
# Deliberately small and inspectable: no project state, dotfiles, or cached package manager data.
FROM ubuntu:24.04

ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update \
 && apt-get install -y --no-install-recommends ca-certificates curl git \
 && curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
 && apt-get install -y --no-install-recommends nodejs \
 && rm -rf /var/lib/apt/lists/* /root/.npm

WORKDIR /workspace
ENTRYPOINT []