{"id":40180954,"url":"https://github.com/aichaos/rsts","last_synced_at":"2026-01-19T18:36:15.944Z","repository":{"id":146102147,"uuid":"74075841","full_name":"aichaos/rsts","owner":"aichaos","description":"RiveScript Test Suite for all implementations.","archived":false,"fork":false,"pushed_at":"2021-08-21T03:35:57.000Z","size":124,"stargazers_count":3,"open_issues_count":0,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-06-21T16:55:38.769Z","etag":null,"topics":["rivescript"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aichaos.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-11-17T23:15:21.000Z","updated_at":"2024-01-10T19:20:17.000Z","dependencies_parsed_at":"2023-05-15T04:15:37.131Z","dependency_job_id":null,"html_url":"https://github.com/aichaos/rsts","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/aichaos/rsts","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aichaos%2Frsts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aichaos%2Frsts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aichaos%2Frsts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aichaos%2Frsts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aichaos","download_url":"https://codeload.github.com/aichaos/rsts/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aichaos%2Frsts/sbom","scorecard":{"id":172673,"data":{"date":"2025-08-11","repo":{"name":"github.com/aichaos/rsts","commit":"8692e9f7cc6d7483e2b88a86f53cacfdf69dd4b5"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.7,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":0,"reason":"Found 0/22 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: java/gradle/wrapper/gradle-wrapper.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 5 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":8,"reason":"2 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2021-142 / GHSA-8q59-q68h-6hv4","Warn: Project is vulnerable to: PYSEC-2018-49 / GHSA-rprw-h62v-c2w7"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-16T16:58:13.716Z","repository_id":146102147,"created_at":"2025-08-16T16:58:13.716Z","updated_at":"2025-08-16T16:58:13.716Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28580363,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-19T18:29:59.827Z","status":"ssl_error","status_checked_at":"2026-01-19T18:29:40.878Z","response_time":67,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["rivescript"],"created_at":"2026-01-19T18:36:15.085Z","updated_at":"2026-01-19T18:36:15.928Z","avatar_url":"https://github.com/aichaos.png","language":"Go","readme":"# RiveScript Test Suite (RSTS)\n\nThis is the unified test suite for the [RiveScript][1] chatbot scripting\nlanguage. It serves as a centralized set of RiveScript tests that can verify\nthe accuracy of any implementation of RiveScript.\n\nIf you're developing your own implementation of RiveScript, passing the tests\nin this set should give you the confidence that your implementation is at least\nas correct as the official implementations.\n\nAs of August 20, 2021 the following official implementations of RiveScript\npass the entire test suite:\n\n* [x] Go\n* [x] Java\n* [x] JavaScript\n* [ ] Perl (couple issues, [see report](perl/))\n* [x] Python\n\nThe YAML test files are in the `tests/` directory, and individual test runner\nscripts for each programming language are in their respective directories.\n\nEach programming language directory should be kept minimal: just a test runner\nscript and optional metadata (for dependency declaration, etc.) should be in\neach directory.\n\n# Test Schema\n\nFor maximum language interoperability, the test files are written in [YAML][2]\nformat. There are YAML libraries available for most popular programming\nlanguages.\n\nThe test files follow this format:\n\n```yaml\n# Each top level key is a unique name for the test.\ntest_name:\n  # Tests can optionally define these global options to their RiveScript instance\n  username: \"localuser\"  # Override the username; this is the default one.\n  utf8: true\n\n  # The tests themselves are broken into a series of \"Test Actions\": it's an\n  # array of tasks to be processed from top to bottom, and each action can\n  # stream RiveScript source code (additive), test inputs and outputs and\n  # manage user variables. See \"Test Actions\" below for more details.\n  tests:\n    # Stream in RiveScript source code to test against. Most tests will start with\n    # one of these, and some tests may have multiple source statements that should\n    # be streamed over top of the existing brain.\n    - source: |\n        // RiveScript source is included as a YAML\n        // literal-style multi-line string.\n        + hello bot\n        - Hello human!\n\n        + how are you\n        - Good, you?\n        - Alright, how are you?\n\n        + my name is *\n        - \u003cset name=\u003cformal\u003e\u003eNice to meet you, \u003cget name\u003e.\n\n        + who am i\n        - Your name is \u003cget name\u003e, right?\n\n    # A simple input and output\n    - input: \"Hello bot!\"\n      reply: \"Hello human!\"\n\n    # You can test random outputs too, just use an array for the 'reply'\n    - input: \"How are you?\"\n      reply:\n        - Good, you?\n        - Alright, how are you?\n\n    # Testing setting a user variable...\n    - input: \"My name is Alice\"\n      reply: \"Nice to meet you, Alice.\"\n\n    # ...and verify it was set\n    - input: \"Who am I?\"\n      reply: \"Your name is Alice, right?\"\n\n    # ...by asserting the user variable is correct.\n    - assert:\n        name: \"Alice\"\n\n    # Or you can set the user variable directly:\n    - set:\n        name: \"Bob\"\n\n    # And verify:\n    - assert:\n        name: \"Bob\"\n\n    # Another way to verify:\n    - input: \"Who am I?\"\n      reply: \"Your name is Bob, right?\"\n\n    # And if you need to stream in additional code:\n    - source: |\n        + what is your name\n        - I'm just a RiveScript bot.\n\n    - input: \"What is your name?\"\n      reply: \"I'm just a RiveScript bot.\"\n```\n\n## Test Actions\n\nThe types of actions that your test runner must support are as follows:\n\n* Stream RiveScript source code. Each test should begin with a blank brain, and\n  each `stream` action should stream its source code on top of the existing\n  brain (updating the reply set it already has).\n\n    ```yaml\n    - source: |\n      + hello bot\n      - Hello human!\n    ```\n\n* Check an input and reply (or replies):\n\n    ```yaml\n    # A one-to-one mapping\n    - input: \"Hello bot\"\n      reply: \"Hello human\"\n\n    # A one-to-many mapping, if random replies can be given\n    - input: \"Hello bot\"\n      reply:\n        - \"Hello human\"\n        - \"Hi there\"\n    ```\n\n* Set a user variable:\n\n    ```yaml\n    # You can set as many variables as you need. Use key/value pairs\n    # for mapping a user variable to its value.\n    - set:\n        name: \"Alice\"\n        age: \"5\"\n    ```\n\n* Assert the values of user variables:\n\n    ```yaml\n    # Similar to `set`, provide key/value pairs of variable names and\n    # their expected values. Multiple variables can be used.\n    - assert:\n        name: \"Alice\"\n        age: \"5\"\n    ```\n\n## Writing a Test Runner\n\nTo verify that your implementation of the test runner is processing the YAML\nsyntax correctly, there are a pair of files named `test-spec.yml` and\n`test-spec.json` which contain identical data, but one is in YAML format and\nthe other is in JSON. Use your programming language's deep comparison function\nto verify both files are parsed the same.\n\n# See Also\n\n* [RiveScript.com][1]\n* [The AiChaos GitHub Organization][3]\n\n[1]: https://www.rivescript.com/\n[2]: http://yaml.org/\n[3]: https://github.com/aichaos\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faichaos%2Frsts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faichaos%2Frsts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faichaos%2Frsts/lists"}