# Test help-search coverage using the intended reader

Compare anonymous, customer and staff article sets under an explicit local visibility policy.

## Name the reader in every coverage test

The local knowledge policy has public, signed-in and staff articles. Anonymous readers see public only. Customers see public and signed-in. Staff see all three classes. Unknown article visibility stays unresolved. These are supplied example roles, not real account permissions or security certification.

Filled article access matrix

| Article | Visibility | Anonymous | Customer | Staff |
| --- | --- | --- | --- | --- |
| A1 | public | Visible | Visible | Visible |
| A2 | signed-in | Hidden | Visible | Visible |
| A3 | staff | Hidden | Hidden | Visible |

## Separate access from guide applicability

An anonymous search has A1 available. Switching the local test role to customer adds A2. A staff result containing A3 does not prove that the customer can retrieve it. Visibility does not establish that a guide matches the task/version.

1. State the intended reader
2. Apply each visibility rule
3. Retain hidden and unknown outcomes
4. Check applicability separately

An administrator’s broad view must not stand in for the customer’s view.

For a customer reader, which articles are visible?

A1 and A2. A3 remains staff-only under the local policy.

## Keep permission gaps unresolved

The material compares anonymous and customer results on the same article set. If A2’s visibility becomes null, the result includes A1 as visible and A2 as unknown, rather than guessing it is public or hidden.

The model accepts only the three declared reader values and visibility classes, plus null visibility. IDs must be distinct and there are at most 30 articles. This test does not authenticate anyone, broaden permission, fetch hidden text or simulate a vendor administrator exception.

Use the guide applicability owner once the reader can obtain the document. A real knowledge integration must enforce access outside the language model as well.

## Complete local records and trace

```json
{
  "issuer": "Astera Technology",
  "resource": "ops-help-reader-permission-search",
  "locale": "en",
  "contract": "The local knowledge policy has public, signed-in and staff articles. Anonymous readers see public only. Customers see public and signed-in. Staff see all three classes. Unknown article visibility stays unresolved. These are supplied example roles, not real account permissions or security certification.",
  "input": {
    "reader": "anonymous",
    "articles": [
      {
        "id": "A1",
        "visibility": "public"
      },
      {
        "id": "A2",
        "visibility": "signed-in"
      },
      {
        "id": "A3",
        "visibility": "staff"
      }
    ]
  },
  "output": {
    "ok": true,
    "state": "complete",
    "result": {
      "visible": [
        "A1"
      ],
      "unknown": []
    },
    "trace": [
      {
        "id": "A1",
        "decision": "visible"
      },
      {
        "id": "A2",
        "decision": "hidden"
      },
      {
        "id": "A3",
        "decision": "hidden"
      }
    ]
  },
  "verificationCases": [
    {
      "name": "baseline",
      "input": {
        "reader": "anonymous",
        "articles": [
          {
            "id": "A1",
            "visibility": "public"
          },
          {
            "id": "A2",
            "visibility": "signed-in"
          },
          {
            "id": "A3",
            "visibility": "staff"
          }
        ]
      },
      "expected": {
        "ok": true,
        "state": "complete",
        "result": {
          "visible": [
            "A1"
          ],
          "unknown": []
        }
      }
    },
    {
      "name": "material-edit",
      "input": {
        "reader": "customer",
        "articles": [
          {
            "id": "A1",
            "visibility": "public"
          },
          {
            "id": "A2",
            "visibility": "signed-in"
          },
          {
            "id": "A3",
            "visibility": "staff"
          }
        ]
      },
      "expected": {
        "ok": true,
        "state": "complete",
        "result": {
          "visible": [
            "A1",
            "A2"
          ],
          "unknown": []
        }
      }
    },
    {
      "name": "fresh-boundary",
      "input": {
        "reader": "anonymous",
        "articles": [
          {
            "id": "A1",
            "visibility": "public"
          },
          {
            "id": "A2",
            "visibility": null
          },
          {
            "id": "A3",
            "visibility": "staff"
          }
        ]
      },
      "expected": {
        "ok": true,
        "state": "unknown",
        "result": {
          "visible": [
            "A1"
          ],
          "unknown": [
            "A2"
          ]
        }
      }
    }
  ],
  "meaningOfNull": "Unknown or no established value for the field; inspect its specific trace.",
  "businessSideEffects": false
}
```
